La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Utilizzare le API di connettività con.NET Compact Framework Marco Frontini Fabio Santini

Presentazioni simili


Presentazione sul tema: "Utilizzare le API di connettività con.NET Compact Framework Marco Frontini Fabio Santini"— Transcript della presentazione:

1

2 Utilizzare le API di connettività con.NET Compact Framework Marco Frontini Fabio Santini

3 Agenda UtilityUtility P/Invoke per le API di connettivitàP/Invoke per le API di connettività La classe MessageWindowsLa classe MessageWindows API per la gestione degli SMS e delle chiamateAPI per la gestione degli SMS e delle chiamate Comunicazioni IrDAComunicazioni IrDA Intercettare un SMSIntercettare un SMS Bluetooth in Windows Mobile 2003 con lo Smart Device Framework 1.3Bluetooth in Windows Mobile 2003 con lo Smart Device Framework 1.3 Connection ManagerConnection Manager Nuove api del CF 2.0 per la gestione degli SMS, Phone, BluetoothNuove api del CF 2.0 per la gestione degli SMS, Phone, Bluetooth Notification BrokerNotification Broker

4 Utility utili Utility utili vxUtil – Network/InternetvxUtil – Network/Internet vxIpConfig – con release/renewvxIpConfig – con release/renew vxSnmp – read/update value SNMPvxSnmp – read/update value SNMP vxSniffer – Network monitorvxSniffer – Network monitor PocketHost – p?siteId=1&jid=F735FE44921F5D6A184C7CC75BXB F2AX&platformId=2&productType=2&catalog=0&am p;sectionId=0&productId=54305PocketHost – p?siteId=1&jid=F735FE44921F5D6A184C7CC75BXB F2AX&platformId=2&productType=2&catalog=0&am p;sectionId=0&productId=54305

5 Chiamare codice unmanaged P/Invoke (C#) Utilizzare platform invoke (P/Invoke) per chiamare codice unmanagedUtilizzare platform invoke (P/Invoke) per chiamare codice unmanaged dichiarare la dll esterna tramite lattributo DllImportdichiarare la dll esterna tramite lattributo DllImport segnare il metodo come static externsegnare il metodo come static extern chiamare il metodo normalmentechiamare il metodo normalmente possono essere chiamate solo DLL non COMpossono essere chiamate solo DLL non COM using System.Runtime.InteropServices; public class DoStuff { [DllImport("coredll.dll")] public static extern int SetCursor(int cursorHandle); public void Warp(int handle) { SetCursor(handle); } Namespace DllImport rendere lAPI disponibile chiamata

6 Gestione degli errori DllImport può rendere gli errori Win32 disponibiliDllImport può rendere gli errori Win32 disponibili Impostare SetError a True per mappare gli errori Win32Impostare SetError a True per mappare gli errori Win32 chiamare Marshal.GetLastWin32Errorchiamare Marshal.GetLastWin32Error using System.Runtime.InteropServices; public class DoStuff { [DllImport("coredll.dll", SetLastError = True)] public static extern int SetCursor(int cursorHandle); public void Warp(int handle) { SetCursor(handle); if (Marshal.GetLastWin32Error() != 0) // handle error } chiamata mappare gli errori Controllo errore

7 Supporto al marshalling di.NET CF CF supporta solo i tipi baseCF supporta solo i tipi base marshalling by-value molto limitatomarshalling by-value molto limitato deve essere un 32 bits (4 bytes) o menodeve essere un 32 bits (4 bytes) o meno deve essere un integraldeve essere un integral marshalling by-reference richiesto per molti tipimarshalling by-reference richiesto per molti tipi richiede un puntatore nel metodo Win32richiede un puntatore nel metodo Win32 CF automaticamente blocca i parametriCF automaticamente blocca i parametri si assicura che il garbage collector non liberi quella memoriasi assicura che il garbage collector non liberi quella memoria classi e strutture presentano differenti problematicheclassi e strutture presentano differenti problematiche spesso è richiesto un marshalling manualespesso è richiesto un marshalling manuale

8 Marshalling CF Type C# Type VB Type Win32 Type ByValByRef BooleanboolBooleanBYTEYes Yes (*) Int16shortShortSHORTYes Int32intIntegerINT32Yes Int64longLongINT64Yes BytebyteByteBYTEYes CharcharCharWCHARYes SinglefloatSingleFLOATNo DoubledoubleDoubleDOUBLENo StringstringString WCHAR * YesNo StringBuilderStringBuilderStringBuilder YesNo User Defined Value Type structStructure struct or class No Yes (*) classClassClass struct or class Yes (*) No Array of Value Type T[ ] T( ) T*/T[ ] YesNo

9 Lavorare con i messaggi Windows La maggior parte dell API richiede luso di un window handleLa maggior parte dell API richiede luso di un window handle I window handles (HWND) sono al centro dellarchitettura di WindowsI window handles (HWND) sono al centro dellarchitettura di Windows Limplementazione dei controlli del CF previene luso di messaggi personalizzatiLimplementazione dei controlli del CF previene luso di messaggi personalizzati nessun accesso al sistema interno di gestione dei messagginessun accesso al sistema interno di gestione dei messaggi nessun accesso a HWNDnessun accesso a HWND nessuna personalizzazione del comportamentonessuna personalizzazione del comportamento e necessaria una classe speciale per gestire i messaggie necessaria una classe speciale per gestire i messaggi Microsoft.WindowsCE.Forms.MessageWindowMicrosoft.WindowsCE.Forms.MessageWindow

10 MessageWindow MessageWindow incapsula le funzionalità dei messaggi di windowsMessageWindow incapsula le funzionalità dei messaggi di windows La proprietà Hwnd è il window handleLa proprietà Hwnd è il window handle si può fare loverride della WndProc per processare i messaggisi può fare loverride della WndProc per processare i messaggi riceve i messaggi in una strutturariceve i messaggi in una struttura chiama la WndProc base per ottenere il comportamento di defaultchiama la WndProc base per ottenere il comportamento di default metodi statici usati per send/postmetodi statici usati per send/post MessageWindow.SendMessageMessageWindow.SendMessage MessageWindow.PostMessageMessageWindow.PostMessage

11 MessageWindow class personalizzata public class MyMessageWin : MessageWindow { const int WM_USER = 1024; public const int WM_DOWORK + 1; protected override void WndProc(ref Message m) { base.WndProc (ref m); if (m.Msg == WM_DOWORK) { // m.WParam & m.LParam }

12 Usare la MessageWindow class public void DoWork() { MyMessageWin _theWin = new MyMessageWin(); IntPtr longVal = new IntPtr(100); Message m = Message.Create(_theWin.Hwnd, _theWin.WM_DOWORK, IntPtr.Zero, longVal); MessageWindow.SendMessage(ref m); } crea un istanza handle Si utilizzano sempre gli IntPtr message values invio del messaggio

13 MessageWindowsMessageWindows

14 Irda Comunicazione tra dispositivi, stampanti (specialmente nei centri commerciali ) e ActiveSyncComunicazione tra dispositivi, stampanti (specialmente nei centri commerciali ) e ActiveSync Discovering dei dispositivi nel raggio dazioneDiscovering dei dispositivi nel raggio dazione

15 Demo IrDA

16 Short Message Service (SMS) Usato per messaggi cortiUsato per messaggi corti Capacità di concatenare messaggiCapacità di concatenare messaggi APIAPI Text – SMS API (sms.h) per inviareText – SMS API (sms.h) per inviare Text – Inbox Rule per intercettare i messaggiText – Inbox Rule per intercettare i messaggi Dopo un esempio con Fabio (CF 2.0)Dopo un esempio con Fabio (CF 2.0)

17 SMS API Send Text Message Low level API under all other SMS servicesLow level API under all other SMS services SMS_HANDLE hsms = NULL; hr = SmsOpen(SMS_MSGTYPE_TEXT, SMS_MODE_SEND, &hsms, 0); SMS_ADDRESS smsaAddress; smsaAddress.smsatAddressType = SMSAT_INTERNATIONAL; wcscpy(smsaAddress.ptsAddress, pszName); TEXT_PROVIDER_SPECIFIC_DATA tpsData; tpsData.psMessageClass = PS_MESSAGE_CLASS1; psData.psReplaceOption = PSRO_NONE; hr = SmsSend(hsms, NULL, &smsaAddress, NULL, (BYTE*) pszMsg, wcslen(pszMsg) * sizeof(WCHAR), (BYTE*) &tpsData, sizeof(tpsData), SMSDE_OPTIMAL, SMS_OPTION_DELIVERY_NONE, &smsmidMessageID) hr = SmsClose(hsms);

18 Classe Managed per SMS e Phone

19 InboxApplication Rule 1 DLL InboxApplication InboxApplication Rule 2 DLL SMSTransport Inbox Rule Client Ricezione di SMS Your Rule DLL

20 La nostra DLL Recupera il Body del Messaggio E il messaggio che vogliamo? Lapplicazi one è in esecuzione ? Esegue lapplicazione Passa il body allapplicazione utilizzando vari sistemi SiSi No Lo lascia andare verso la Inbox No Inbox Rule Client

21 Intercettare i messaggi SMS !!!!

22 Bluetooth BluetoothBluetooth Corto raggio (100 metri max)Corto raggio (100 metri max) Massimo 16 dispositiviMassimo 16 dispositivi 1 Mbps1 Mbps Peer to peerPeer to peer Autenticazione e CriptingAutenticazione e Cripting

23 Le API Bluetooth Le API dei dispositiviLe API dei dispositivi BthSetMode()BthSetMode() BthGetMode()BthGetMode() API per la gestione delle porte COMAPI per la gestione delle porte COM Utilizzare WinsockUtilizzare Winsock Utilizzare le interfaccie grafiche standardUtilizzare le interfaccie grafiche standard

24 Le API Bluetooth int BthSetMode( DWORD dwMode )int BthSetMode( DWORD dwMode ) Imposta la modalità BluetoothImposta la modalità Bluetooth int BthGetMode( DWORD* pdwMode )int BthGetMode( DWORD* pdwMode ) Recupera la modalità corrente del BluetoothRecupera la modalità corrente del Bluetooth ModalitàModalità BTH_POWER_OFFBTH_POWER_OFF BTH_CONNECTABLEBTH_CONNECTABLE BTH_DISCOVERABLEBTH_DISCOVERABLE

25 Connection Manager Voice Connessione intelligenteConnessione intelligente Network based vs. Connection basedNetwork based vs. Connection based Ogni CSP ha un suo criterio di connessioneOgni CSP ha un suo criterio di connessione costo, larghezza di banda, latenza, tempo di connessione, etc.costo, larghezza di banda, latenza, tempo di connessione, etc. Posso essere aggiunti altri CSPPosso essere aggiunti altri CSP Configurazioni predefiniteConfigurazioni predefinite Impostate dai carrie o dalle aziendeImpostate dai carrie o dalle aziende RASProxyPPTPGPRSetc Planner Connection Service Providers

26 Connection Manager Il Connection Manager sostituisce le RAS APIIl Connection Manager sostituisce le RAS API Gestisce lintero processo di connessioneGestisce lintero processo di connessione Le connessioni sono dichiarate a seconda della destinazione (Internet o Corporate Network)Le connessioni sono dichiarate a seconda della destinazione (Internet o Corporate Network) Il Connection manager gestisce connessioni che prevedono più saltiIl Connection manager gestisce connessioni che prevedono più salti Esempio di connessione ad una rete corporate: il connection manager attiva la connessione GPRS verso internet e in seguito attiva la connessione PPTP verso lazienda.Esempio di connessione ad una rete corporate: il connection manager attiva la connessione GPRS verso internet e in seguito attiva la connessione PPTP verso lazienda. Connection manager può utilizzare lopzione desktop pass through attraverso Active Sync.Connection manager può utilizzare lopzione desktop pass through attraverso Active Sync.

27 Connection Manager Connection Manager Engine Voice RASProxyPPTPGPRS etc Planner ConfigurationManager UI del Connection Manager XMLProvisioningDocument URLMapper Applicazione

28 Connection Manager ConnMgrMapURL()ConnMgrMapURL() Determina la destinazione corretta a seconda dellURL che viene utilizzatoDetermina la destinazione corretta a seconda dellURL che viene utilizzato E importante usare questa API per stabilire se la connessione è internet o intranetE importante usare questa API per stabilire se la connessione è internet o intranet ConnMgrEstablishConnection()ConnMgrEstablishConnection() Utilizzata per stabilire la connessioneUtilizzata per stabilire la connessione Gestisce gli handle durante tutta la connessioneGestisce gli handle durante tutta la connessione ConnMgrEstablishConnectionSync()ConnMgrEstablishConnectionSync()

29 Connection Manager ConnMgrReleaseConnection()ConnMgrReleaseConnection() Chiude la connessioneChiude la connessione ConnMgrConnectionStatus()ConnMgrConnectionStatus() Determina lo stato della connessioneDetermina lo stato della connessione Notifica cambiamenti attraverso eventi o messaggi windowsNotifica cambiamenti attraverso eventi o messaggi windows Controllare lo stato per determinare una eventuale disconnessioneControllare lo stato per determinare una eventuale disconnessione

30 Connection Manager

31 Phone.Talk Proprietà e eventi recuperabili tramite State & Notification BrokerProprietà e eventi recuperabili tramite State & Notification Broker Dim phone As New Phone phone.Talk( )

32 e SMS SmsMessage msg = new SmsMessage(); msg.To.Add( new Recipient( ")); msg.Body = Ciao Nello !"; msg.Send();

33 Contact != Recipient Contact myCustomer; //... Message msg = new Message(); msg.To.Add( myCustomer ); // Non Compila msg.To.Add( new Recipient( myCustomer. 2Address ) ); // OK

34 SMS/ interazione con lutente Compose FormCompose Form Visualizzazione InboxVisualizzazione Inbox SincronizzareSincronizzare

35 Intercept SMS MessageInterceptor sms; void Form_Load(... ) { sms = new MessageInterceptor(); //... Proprietà opzionali sms.MessageReceived += new EventHandler(sms_MessageReceived); } void sms_MessageReceived(...) { //... Arrivato messaggio !!! }

36 Che ne faccio del messaggio ? MessageInterceptor sms; void Form_Load(... ) { sms = new MessageInterceptor(); sms.InterceptionAction = InterceptionAction.NotifyAndDelete; sms.MessageReceived += new EventHandler(sms_MessageReceived); } void sms_MessageReceived(...) { //... Handle incoming message }

37 Bluetooth in Windows Mobile 5.0 Utilizza la UI per fare il pairingUtilizza la UI per fare il pairing Un dispositivo pubblica il servizioUn dispositivo pubblica il servizio New BluetoothService( GUID )New BluetoothService( GUID ) Un dispositivo cerca i serviziUn dispositivo cerca i servizi GetPairedDevices()GetPairedDevices() E si connette tramite il GIUDE si connette tramite il GIUD BluetoothDevice.Connect( GUID )BluetoothDevice.Connect( GUID ) A quel punto si ottiene un NetworkStream da utilizzare per trasferire i datiA quel punto si ottiene un NetworkStream da utilizzare per trasferire i dati

38 Nuove classi Windows Mobile 5.0 SMS e Phone

39 Gestione dello stato Microsoft.WindowsMobile.Status Nuovo State and Notification BrokerNuovo State and Notification Broker Accesso allo stato di sistema e delle applicazioniAccesso allo stato di sistema e delle applicazioni Supporta la notifica delle modifiche dello statoSupporta la notifica delle modifiche dello stato Recupera e aggiorna i dettagli sui vari statiRecupera e aggiorna i dettagli sui vari stati Condivide lo stato tra più applicazioniCondivide lo stato tra più applicazioni Oggi esiste ma è un casinoOggi esiste ma è un casino Sono voci di registro che cambiano costantementeSono voci di registro che cambiano costantemente

40 Stati predefiniti Più di 140 stati predefinitiPiù di 140 stati predefiniti AppuntamentiAppuntamenti aggiunta, modifica, conflitti, etc.aggiunta, modifica, conflitti, etc. HardwareHardware Camera, tastiera, cradle, headset, car kitCamera, tastiera, cradle, headset, car kit MessaggiMessaggi , SMS, MMS, voice, ActiveSync , SMS, MMS, voice, ActiveSync PhonePhone Profili, chiamate, segnale, GPRS, logProfili, chiamate, segnale, GPRS, log

41 La classe SystemState SystemState gestisce gli stati predefinitiSystemState gestisce gli stati predefiniti RegistryState supporta stati customRegistryState supporta stati custom

42 Condizioni sugli stati Può restringere la notifica applicando delle condizioniPuò restringere la notifica applicando delle condizioni Confronto tra I valori di uno statoConfronto tra I valori di uno stato Di default usa AnyChangeDi default usa AnyChange

43 Tipi di notifica Notifica temporaneaNotifica temporanea Lapplicazione viene notificata quando è in esecuzioneLapplicazione viene notificata quando è in esecuzione Viene chiamato un event handlerViene chiamato un event handler Si perde dopo un resetSi perde dopo un reset Notifica persistenteNotifica persistente Lapplicazione viene eseguita se non è già in esecuzioneLapplicazione viene eseguita se non è già in esecuzione Usa i parametri a riga di comandoUsa i parametri a riga di comando Rimane dopo un soft resetRimane dopo un soft reset

44 Notification Broker

45 © 2004 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS SUMMARY. Content created by 3 Leaf Solutions


Scaricare ppt "Utilizzare le API di connettività con.NET Compact Framework Marco Frontini Fabio Santini"

Presentazioni simili


Annunci Google