Le premier site francophone dédié au développement Pocket PC


 
u      

Comment déterminer si un PPC est connecté, et connaître son identifiant ?

Connecté ou pas ?....

Qui n'a jamais souhaité savoir si un Pocket PC et connecté au PC avant de lancer un transfert de fichiers ou une mise à jour des bases de données ?...

En fait tout ce dont on a besoin se trouve dans la bibliothèque CEUTIL.DLL qui est fournie avec les Embedded Visual Tools.

Utiliser CEUTIL.DLL avec VB pour PC, une solution...

Pour commencer il faut créer un nouveau projet. Ensuite rajouter un module où on va déclarer l'ensemble des constantes et des fonctions dont on a besoin :

'
' Module CEUTIL.bas : Constantes et fonctions de CEUTIL.H


Option Explicit

'On déclare un certain nombre de constantes

Public Const CESVC_ROOT_COMMON = 0&
Public Const CESVC_ROOT_USER = 1&
Public Const CESVC_DEVICES = 2&
Public Const CESVC_DEVICEX = 3&
Public Const CESVC_DEVICE = 4&
Public Const CESVC_DEVICE_SELECTED = 5&
Public Const CESVC_SERVICES = 6&
Public Const CESVC_SERVICES_COMMON = 7&
Public Const CESVC_SYNC = 8&
Public Const CESVC_SYNC_COMMON = 9&
Public Const CESVC_FILTERS = 10&
Public Const CESVC_SPECIAL_DEFAULTS = 11&
Public Const CESVC_CUSTOM_MENUS = 12&
Public Const CESVC_ROOT_MACHINE = CESVC_ROOT_COMMON
Public Const CESVC_SERVICES_USER = CESVC_SERVICES

Public Declare Function CeSvcOpen Lib "ceutil" (ByVal uSvc As Long, ByVal pszPath As Any, ByVal fCreate As Boolean, ByRef phSvc As Long) As Long

Public Declare Function CeSvcOpenEx Lib "ceutil" (ByVal hSvcRoot As Long, ByVal pszPath As String, ByVal fCreate As Boolean, ByRef phSvc As Long) As Long

Public Declare Function CeSvcClose Lib "ceutil" (ByVal hSvc As Long) As Long

Public Declare Function CeSvcGetString Lib "ceutil" (ByVal hSvc As Long, ByVal pszValName As String, ByVal pszVal As String, ByVal cbVal As Long) As Long

Public Declare Function CeSvcSetString Lib "ceutil" (ByVal hSvc As Long, ByVal pszValName As String, ByVal pszVal As String) As Long

Public Declare Function CeSvcGetDword Lib "ceutil" (ByVal hSvc As Long, ByVal pszValName As String, ByRef pdwVal As Long) As Long

Public Declare Function CeSvcSetDword Lib "ceutil" (ByVal hSvc As Long, ByVal pszValName As String, ByVal dwVal As Long) As Long

Public Declare Function CeSvcDeleteVal Lib "ceutil" (ByVal hSvc As Long, ByVal pszValName As String) As Long

' Note si on déclare le paramètre pszVal comme String, il faut le passer par valeur (ByVal).

Public Declare Function CeSvcGetBinary Lib "ceutil" (ByVal hSvc As Long, ByVal pszValName As String, pszVal As Any, ByRef pcbVal As Long) As Long

Public Declare Function CeSvcSetBinary Lib "ceutil" (ByVal hSvc As Long, ByVal pszValName As String, pszVal As Any, ByVal cbVal As Long) As Long

Public Declare Function CeGetDeviceId Lib "ceutil" () As Long
Public Declare Function CeGetSelectedDeviceId Lib "ceutil" () As Long

Public Declare Function CeSvcEnumProfiles Lib "ceutil" (ByRef phSvc As Long, _
ByVal lProfileIndex As Long, ByRef plProfile As Long) As Long


On va ensuite créer un form où on va placer un label qui va afficher les informations de la connexion. Plusieurs cas sont possibles :

Ne peut pas identifier un périphérique
Pas de périphérique connecté
Périphérique connecté en tant qu'invité
Périphérique connecté (dans ce cas on affiche son identifiant)

Ensuite on va écrire une petite fonction qui se chargera de nous afficher les bonnes informations :

Private Function GetDeviceName()             
 'Par défaut en cas d'erreur
 GetDeviceName = "Ne peut pas identifier le périphérique"
 'Obtenir l'identifiant du périphérique
 idDvc& = CeGetDeviceId()
 'Selon la valeur de idDvc& on a plusiers cas...
 Select Case idDvc&

Case 0 GetDeviceName = "Pas de périphérique connecté"
Case -1 GetDeviceName = "Périphérique connecté en tant qu'invité"
Case Else ' Ouvre la base de registre à la clé ' HKEY_CURRENT_USER\Software\Microsoft\Windows CE Services\Partners ' If (0 = CeSvcOpen(CESVC_DEVICEX, idDvc&, False, hSvc)) Then
'Essaie de récupérer le nom du périphérique szVal$ = String$(100, 0)

If (0 = CeSvcGetString(hSvc, "DisplayName", szVal$, 100)) Then ' Avec SUCCES: récupère le nom GetDeviceName = "Actuellement connecté : " & Left$(szVal$, InStr(szVal$, Chr$(0)) - 1) End If 'Ferme le handle Call CeSvcClose (hSvc)

End If
End Select
End Function

Pour récupérer l'identifiant du périphérique on appelle la fonction préc

Private Sub Form_Load()
 Label1.Caption = GetDeviceName()
End Sub

édente et on l'affiche dans le label :

On peut aussi utiliser un timer pour réactualiser à intervalles réguliers l'état de la connexion :

Private Sub Timer1_Timer()
Label1.Caption = GetDeviceName()
End Sub

Et voilà, à tout moment on peut savoir si son PPC est connecté et surtout connaître son identifiant…

Vous pouvez télécharger les sources VB de cet article ici

Cristian CIOCHR

 

 
       

 

 
       
 
       
Copyright 2001-2004 - Tous droits réservés
 
       

iPAQ est un produit de COMPAQ.
Visual Tools est un produit de Microsoft Corporation.
Toutes les autres marques et produits présents dans ces pages sont la propriété exclusive de leurs sociétés respectives.