Identification d'un port série USB

Le
johann.d
Bonjour, je voudrais savoir quelle est la méthode la plus simple et la plus
portable (2000 - XP - Vista) pour
1) énumérer les ports séries disponibles
2) savoir lesquels sont des ports série virtuel USB
3) pour chaque port série virtuel USB, retrouver le nom du driver et surtout
l'identifiant du périphérique (VendorID et ProductID)

Accessoirement, une application peut-elle être notifiée explicitement lors
de l'insertion ou du retrait d'un périphérique USB de ce type ?

Merci de vos pistes,

--
johann.d
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Christian ASTOR
Le #9741461
johann.d wrote:
Bonjour, je voudrais savoir quelle est la méthode la plus simple et la plus
portable (2000 - XP - Vista) pour
1) énumérer les ports séries disponibles
2) savoir lesquels sont des ports série virtuel USB
3) pour chaque port série virtuel USB, retrouver le nom du driver et surtout
l'identifiant du périphérique (VendorID et ProductID)



cf sources USBView, MS DDK (SetupDi* & Cie)

Accessoirement, une application peut-elle être notifiée explicitement lors
de l'insertion ou du retrait d'un périphérique USB de ce type ?



RegisterDeviceNotification()
johann.d
Le #9741231
"Christian ASTOR" news: 4807b20a$0$21143$
johann.d wrote:
Bonjour, je voudrais savoir quelle est la méthode la plus simple et la
plus portable (2000 - XP - Vista) pour
1) énumérer les ports séries disponibles
2) savoir lesquels sont des ports série virtuel USB
3) pour chaque port série virtuel USB, retrouver le nom du driver et
surtout l'identifiant du périphérique (VendorID et ProductID)



cf sources USBView, MS DDK (SetupDi* & Cie)



Bonjour et merci de cette première réponse qui m'a déjà bien avancé. Je
parviens à récupérer la liste des périphériques puis avec
SetupDiGetDeviceRegistryProperty je peux identifier ceux qui m'intéressent.
Il reste pourtant une information que je n'ai pas trouvé, c'est le numéro du
port série virtuel. J'ai bien un SPDRP_FRIENDLYNAME qui me renvoie une
chaîne du type "Port série USB (COM9)", comment puis-je remonter directement
au "COM9" sans avoir à disséquer le friendly name ?


Merci,

--
johann.d
Christian ASTOR
Le #9741221
johann.d wrote:
"Christian ASTOR"
cf sources USBView, MS DDK (SetupDi* & Cie)




Bonjour et merci de cette première réponse qui m'a déjà bien avancé. Je
parviens à récupérer la liste des périphériques puis avec
SetupDiGetDeviceRegistryProperty je peux identifier ceux qui m'intéressent.
Il reste pourtant une information que je n'ai pas trouvé, c'est le numéro du
port série virtuel. J'ai bien un SPDRP_FRIENDLYNAME qui me renvoie une
chaîne du type "Port série USB (COM9)", comment puis-je remonter directement
au "COM9" sans avoir à disséquer le friendly name ?



Avec SetupDiOpenDevRegKey() & "PortName" =>

// while( SetupDiEnumDeviceInfo ... etc
//
HKEY hKey = SetupDiOpenDevRegKey (hDeviceInfo, &DeviceInfoData,
DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ);
if (hKey)
{
char sPortName[MAX_PATH];
DWORD dwType = REG_SZ;
DWORD dwSize = sizeof(sPortName);
long nRet = RegQueryValueEx(hKey, "PortName", 0, &dwType,
(LPBYTE)sPortName, &dwSize);
...
johann.d
Le #9741191
"Christian ASTOR" news: 480fbd03$0$21142$

Avec SetupDiOpenDevRegKey() & "PortName" =>

// while( SetupDiEnumDeviceInfo ... etc
//
HKEY hKey = SetupDiOpenDevRegKey (hDeviceInfo, &DeviceInfoData,
DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ);
if (hKey)
{
char sPortName[MAX_PATH];
DWORD dwType = REG_SZ;
DWORD dwSize = sizeof(sPortName);
long nRet = RegQueryValueEx(hKey, "PortName", 0, &dwType,
(LPBYTE)sPortName, &dwSize);
...



Merci, c'est parfait !

--
johann.d
Publicité
Poster une réponse
Anonyme