Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoSantino Rizzo Modificato 10 anni fa
2
Utilizzare le API di connettività con .NET Compact Framework
Marco Frontini Fabio Santini
3
Agenda Utility P/Invoke per le API di connettività
La classe MessageWindows API per la gestione degli SMS e delle chiamate Comunicazioni IrDA Intercettare un SMS Bluetooth in Windows Mobile 2003 con lo Smart Device Framework 1.3 Connection Manager Nuove api del CF 2.0 per la gestione degli SMS, Phone , Bluetooth Notification Broker
4
Utility utili vxUtil – Network/Internet
vxIpConfig – con release/renew vxSnmp – read/update value SNMP vxSniffer – Network monitor PocketHost –
5
Chiamare codice unmanaged P/Invoke (C#)
Utilizzare platform invoke (P/Invoke) per chiamare codice unmanaged dichiarare la dll esterna tramite l’attributo DllImport segnare il metodo come “static extern” chiamare il metodo normalmente possono essere chiamate solo DLL non COM Namespace DllImport using System.Runtime.InteropServices; public class DoStuff { [DllImport("coredll.dll")] public static extern int SetCursor(int cursorHandle); public void Warp(int handle) SetCursor(handle); } rendere l’API disponibile chiamata
6
Gestione degli errori DllImport può rendere gli errori Win32 disponibili Impostare SetError a True per mappare gli errori Win32 chiamare 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 } mappare gli errori chiamata Controllo errore
7
Supporto al marshalling di .NET CF
CF supporta solo i tipi base marshalling by-value molto limitato deve essere un 32 bits (4 bytes) o meno deve essere un integral marshalling by-reference richiesto per molti tipi richiede un puntatore nel metodo Win32 CF automaticamente ‘blocca’ i parametri si assicura che il garbage collector non liberi quella memoria classi e strutture presentano differenti problematiche spesso è richiesto un marshalling manuale
8
User Defined Value Type
Marshalling CF Type C# Type VB Type Win32 Type ByVal ByRef Boolean bool BYTE Yes Yes (*) Int16 short Short SHORT Int32 int Integer INT32 Int64 long Long INT64 Byte byte Char char WCHAR Single float FLOAT No Double double DOUBLE String string WCHAR * StringBuilder User Defined Value Type struct Structure struct or class class Class Array of Value Type T[ ] T( ) T*/T[ ]
9
Lavorare con i messaggi Windows
La maggior parte dell API richiede l’uso di un window handle I window handles (HWND) sono al centro dell’architettura di Windows L’implementazione dei controlli del CF previene l’uso di messaggi personalizzati nessun accesso al sistema interno di gestione dei messaggi nessun accesso a HWND nessuna personalizzazione del comportamento e’ necessaria una classe speciale per gestire i messaggi Microsoft.WindowsCE.Forms.MessageWindow
10
MessageWindow MessageWindow incapsula le funzionalità dei messaggi di windows La proprietà Hwnd è il window handle si può fare l’override della WndProc per processare i messaggi riceve i messaggi in una struttura chiama la WndProc base per ottenere il comportamento di default metodi statici usati per send/post MessageWindow.SendMessage MessageWindow.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 Si utilizzano sempre gli IntPtr handle message values invio del messaggio
13
MessageWindows
14
Irda Comunicazione tra dispositivi, stampanti (specialmente nei centri commerciali ) e ActiveSync Discovering dei dispositivi nel raggio d’azione
15
Demo IrDA
16
Short Message Service (SMS)
Usato per messaggi corti Capacità di concatenare messaggi API Text – SMS API (sms.h) per inviare Text – Inbox Rule per intercettare i messaggi Dopo un esempio con Fabio (CF 2.0)
17
SMS API Send Text Message
Low 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
Inbox Rule Client Ricezione di SMS
Application Inbox Application Inbox Application SMS Transport Rule 1 DLL Rule 1 DLL Rule 1 DLL Rule 2 DLL Your Rule DLL
20
La nostra DLL Inbox Rule Client Recupera il Body del Messaggio
E’ il messaggio che vogliamo? L’applicazione è in esecuzione? Si Si Passa il body all’applicazione utilizzando vari sistemi No No Esegue l’applicazione Lo lascia andare verso la Inbox
21
Intercettare i messaggi SMS +14250010001 !!!!
22
Bluetooth Bluetooth Corto raggio (100 metri max)
Massimo 16 dispositivi 1 Mbps Peer to peer Autenticazione e Cripting
23
Le API Bluetooth Le API dei dispositivi
BthSetMode() BthGetMode() API per la gestione delle porte COM Utilizzare Winsock Utilizzare le interfaccie grafiche standard
24
Le API Bluetooth int BthSetMode( DWORD dwMode )
Imposta la modalità Bluetooth int BthGetMode( DWORD* pdwMode ) Recupera la modalità corrente del Bluetooth Modalità BTH_POWER_OFF BTH_CONNECTABLE BTH_DISCOVERABLE
25
Connection Manager Connessione “intelligente”
Network based vs. Connection based Ogni CSP ha un suo criterio di connessione costo, larghezza di banda, latenza, tempo di connessione, etc. Posso essere aggiunti altri CSP Configurazioni predefinite Impostate dai carrie o dalle aziende Planner Connection Manager Connection Service Providers Voice RAS Proxy PPTP GPRS etc
26
Connection Manager Il Connection Manager sostituisce le RAS API
Gestisce l’intero processo di connessione Le connessioni sono dichiarate a seconda della destinazione (Internet o Corporate Network) Il 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 l’azienda. Connection manager può utilizzare l’opzione “desktop pass through” attraverso Active Sync.
27
UI del Connection Manager Connection Manager Engine
Applicazione UI del Connection Manager XML Provisioning Document URL Mapper Planner Connection Manager Engine Configuration Manager Voice RAS Proxy PPTP GPRS etc
28
Connection Manager ConnMgrEstablishConnection() ConnMgrMapURL()
Determina la destinazione corretta a seconda dell’URL che viene utilizzato E’ importante usare questa API per stabilire se la connessione è internet o intranet ConnMgrEstablishConnection() Utilizzata per stabilire la connessione Gestisce gli handle durante tutta la connessione ConnMgrEstablishConnectionSync()
29
Connection Manager ConnMgrReleaseConnection()
Chiude la connessione ConnMgrConnectionStatus() Determina lo stato della connessione Notifica cambiamenti attraverso eventi o messaggi windows Controllare lo stato per determinare una eventuale disconnessione
30
Connection Manager
31
Phone.Talk Dim phone As New Phone phone.Talk( “ ” ) Proprietà e eventi recuperabili tramite State & Notification Broker
32
E-Mail 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/Email: interazione con l’utente
Compose Form Visualizzazione Inbox Sincronizzare
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 “pairing” Un dispositivo pubblica il servizio New BluetoothService( GUID ) Un dispositivo cerca i servizi GetPairedDevices() E si connette tramite il GIUD BluetoothDevice.Connect( GUID ) A 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 Broker Accesso allo stato di sistema e delle applicazioni Supporta la notifica delle modifiche dello stato Recupera e aggiorna i dettagli sui vari stati Condivide lo stato tra più applicazioni Oggi esiste ma è un casino Sono voci di registro che cambiano costantemente
40
Stati predefiniti Più di 140 stati predefiniti Appuntamenti Hardware
aggiunta, modifica, conflitti, etc. Hardware Camera, tastiera, cradle, headset, car kit Messaggi , SMS, MMS, voice, ActiveSync Phone Profili, chiamate, segnale, GPRS, log
41
La classe SystemState SystemState gestisce gli stati predefiniti
RegistryState supporta stati custom
42
Condizioni sugli stati
Può restringere la notifica applicando delle condizioni Confronto tra I valori di uno stato Di default usa AnyChange
43
Tipi di notifica Notifica temporanea Notifica persistente
L’applicazione viene notificata quando è in esecuzione Viene chiamato un event handler Si perde dopo un reset Notifica persistente L’applicazione viene eseguita se non è già in esecuzione Usa i parametri a riga di comando Rimane 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
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.