Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD9] Liste des ports série présents sur une machine

9 réponses
Avatar
pmxk
Bonjour à tous,

Queqlqu'un peut-il me dire comment obtenir la liste des ports série
présents sur une machine pour alimenter une combo box?
Notez que je ne veux pas tester si je peux les ouvrir, car si un port
existe et est déjà ouvert, j'aimerai l'avoir dans ma combo quand même.
:-)

Merci
pmxk

9 réponses

Avatar
maax51
Salut,


Queqlqu'un peut-il me dire comment obtenir la liste des ports série
présents sur une machine pour alimenter une combo box?
Notez que je ne veux pas tester si je peux les ouvrir, car si un port
existe et est déjà ouvert, j'aimerai l'avoir dans ma combo quand mêm e.
:-)



Pour faire simple, tu peux consulter la base de registres, en
énumérant les valeurs de la clé :
HKEY_LOCAL_MACHINEHARDWAREDEVICEMAPSERIALCOMM (pour les ports
série)
et
HKEY_LOCAL_MACHINEHARDWAREDEVICEMAPPARALLEL PORTS (pour les ports
parallèle)

Sinon, y a une surement une API, mais j'ai pas vu de fonctions
WinDev...


Merci
pmxk



@+
Maax°(51)°
Avatar
JB
Le Sun, 08 Jun 2008 16:10:29 +0200, a écrit:

Salut,


Queqlqu'un peut-il me dire comment obtenir la liste des ports série
présents sur une machine pour alimenter une combo box?
Notez que je ne veux pas tester si je peux les ouvrir, car si un port
existe et est déjà ouvert, j'aimerai l'avoir dans ma combo quand même.
:-)



Pour faire simple, tu peux consulter la base de registres, en
énumérant les valeurs de la clé :
HKEY_LOCAL_MACHINEHARDWAREDEVICEMAPSERIALCOMM (pour les ports
série)
et
HKEY_LOCAL_MACHINEHARDWAREDEVICEMAPPARALLEL PORTS (pour les ports
parallèle)

Sinon, y a une surement une API, mais j'ai pas vu de fonctions
WinDev...


Merci
pmxk



@+
Maax°(51)°



Désolé de la longueur , un extrait de l'excellent API-Guide maintenant
transformé en pub atrrape truc.

Private Type PORT_INFO_2
pPortName As String
pMonitorName As String
pDescription As String
fPortType As Long
Reserved As Long
End Type
Private Type API_PORT_INFO_2
pPortName As Long
pMonitorName As Long
pDescription As Long
fPortType As Long
Reserved As Long
End Type
Private Declare Function EnumPorts Lib "winspool.drv" Alias "EnumPortsA"
(ByVal pName As String, ByVal Level As Long, ByVal lpbPorts As Long, ByVal
cbBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long
Private Declare Function lstrlenW Lib "kernel32" (ByVal lpString As Long)
As Long
Private Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (pTo As
Any, uFrom As Any, ByVal lSize As Long)
Private Declare Function HeapAlloc Lib "kernel32" (ByVal hHeap As Long,
ByVal dwFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GetProcessHeap Lib "kernel32" () As Long
Private Declare Function HeapFree Lib "kernel32" (ByVal hHeap As Long,
ByVal dwFlags As Long, lpMem As Any) As Long
Dim Ports(0 To 100) As PORT_INFO_2
Public Function TrimStr(strName As String) As String
'Finds a null then trims the string
Dim x As Integer
x = InStr(strName, vbNullChar)
If x > 0 Then TrimStr = Left(strName, x - 1) Else TrimStr = strName
End Function
Public Function LPSTRtoSTRING(ByVal lngPointer As Long) As String
Dim lngLength As Long
'Get number of characters in string
lngLength = lstrlenW(lngPointer) * 2
'Initialize string so we have something to copy the string into
LPSTRtoSTRING = String(lngLength, 0)
'Copy the string
CopyMem ByVal StrPtr(LPSTRtoSTRING), ByVal lngPointer, lngLength
'Convert to Unicode
LPSTRtoSTRING = TrimStr(StrConv(LPSTRtoSTRING, vbUnicode))
End Function
'Use ServerName to specify the name of a Remote Workstation i.e.
"//WIN95WKST"
'or leave it blank "" to get the ports of the local Machine
Public Function GetAvailablePorts(ServerName As String) As Long
Dim ret As Long
Dim PortsStruct(0 To 100) As API_PORT_INFO_2
Dim pcbNeeded As Long
Dim pcReturned As Long
Dim TempBuff As Long
Dim i As Integer
'Get the amount of bytes needed to contain the data returned by the
API call
ret = EnumPorts(ServerName, 2, TempBuff, 0, pcbNeeded, pcReturned)
'Allocate the Buffer
TempBuff = HeapAlloc(GetProcessHeap(), 0, pcbNeeded)
ret = EnumPorts(ServerName, 2, TempBuff, pcbNeeded, pcbNeeded,
pcReturned)
If ret Then
'Convert the returned String Pointer Values to VB String Type
CopyMem PortsStruct(0), ByVal TempBuff, pcbNeeded
For i = 0 To pcReturned - 1
Ports(i).pDescription =
LPSTRtoSTRING(PortsStruct(i).pDescription)
Ports(i).pPortName = LPSTRtoSTRING(PortsStruct(i).pPortName)
Ports(i).pMonitorName =
LPSTRtoSTRING(PortsStruct(i).pMonitorName)
Ports(i).fPortType = PortsStruct(i).fPortType
Next
End If
GetAvailablePorts = pcReturned
'Free the Heap Space allocated for the Buffer
If TempBuff Then HeapFree GetProcessHeap(), 0, TempBuff
End Function
Private Sub Form_Load()
'KPD-Team 2000
'URL: http://www.allapi.net/
'E-Mail:
Dim NumPorts As Long
Dim i As Integer
'Get the Numbers of Ports in the System
'and Fill the Ports Structure
NumPorts = GetAvailablePorts("")
'Show the available Ports
Me.AutoRedraw = True
For i = 0 To NumPorts - 1
Me.Print Ports(i).pPortName
Next
End Sub


--
--
JB
Avatar
pmxk
Après mûre réflexion, a écrit :
Salut,


Queqlqu'un peut-il me dire comment obtenir la liste des ports série
présents sur une machine pour alimenter une combo box?
Notez que je ne veux pas tester si je peux les ouvrir, car si un port
existe et est déjà ouvert, j'aimerai l'avoir dans ma combo quand même.
:-)



Pour faire simple, tu peux consulter la base de registres, en
énumérant les valeurs de la clé :
HKEY_LOCAL_MACHINEHARDWAREDEVICEMAPSERIALCOMM (pour les ports
série)
et
HKEY_LOCAL_MACHINEHARDWAREDEVICEMAPPARALLEL PORTS (pour les ports
parallèle)

Sinon, y a une surement une API, mais j'ai pas vu de fonctions
WinDev...


Merci
pmxk



@+
Maax°(51)°



Merci maax51 !
Voici mon petit code avec ton idée à mettre dans l'init d'une combo :

---------------------
base est une chaîne =
"HKEY_LOCAL_MACHINEHARDWAREDEVICEMAPSERIALCOMM"
liste, valeur sont des chaînes
i est un entier

liste=RegistreListeValeur(base)
i=1
valeur=ExtraitChaîne(liste,i,RC)
TANTQUE valeur <> EOT
ListeAjoute(MoiMême,RegistreLit(base,valeur))
i++
valeur=ExtraitChaîne(liste,i,RC)
FIN
---------------------
A+
pmxk
Avatar
Romain PETIT
pmxk a émis l'idée suivante :
Bonjour à tous,

Queqlqu'un peut-il me dire comment obtenir la liste des ports série présents
sur une machine pour alimenter une combo box?
Notez que je ne veux pas tester si je peux les ouvrir, car si un port existe
et est déjà ouvert, j'aimerai l'avoir dans ma combo quand même.
:-)



http://windevapi.free.fr/forum1.php?idr=1&ids™
cf en bas "Lister les différents ports"


A+

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Jacques TREPP
eh bien : ça faisait un bail que je n'étais pas allé sur le site de JL :
ça me rajeunit :)



--
Jacques TREPP
Albygest
3, rue Jean Mermoz
81160 ST-JUERY
(enlevez 'pasdespam' pour me joindre)
Avatar
pmxk
Romain PETIT a formulé ce mercredi :
pmxk a émis l'idée suivante :
Bonjour à tous,

Queqlqu'un peut-il me dire comment obtenir la liste des ports série
présents sur une machine pour alimenter une combo box?
Notez que je ne veux pas tester si je peux les ouvrir, car si un port
existe et est déjà ouvert, j'aimerai l'avoir dans ma combo quand même.
:-)



http://windevapi.free.fr/forum1.php?idr=1&ids™
cf en bas "Lister les différents ports"


A+



Merci pour le site, il est très enrichissant !
pmxk
Avatar
JeAn-PhI
Romain PETIT a formulé la demande :
pmxk a émis l'idée suivante :
Bonjour à tous,

Queqlqu'un peut-il me dire comment obtenir la liste des ports série
présents sur une machine pour alimenter une combo box?
Notez que je ne veux pas tester si je peux les ouvrir, car si un port
existe et est déjà ouvert, j'aimerai l'avoir dans ma combo quand même.
:-)



http://windevapi.free.fr/forum1.php?idr=1&ids™
cf en bas "Lister les différents ports"


A+



petit bémol sur ce code il ne retourne pas la totalité des ports
disponibles en tout sur ma machine j'ai COM1,5,6 en port physique et
2,3 en virtuel

--
Cordialement JeAn-PhI
Avatar
pmxk
Il se trouve que JeAn-PhI a formulé :

petit bémol sur ce code il ne retourne pas la totalité des ports disponibles
en tout sur ma machine j'ai COM1,5,6 en port physique et 2,3 en virtuel



Et ...?
Le script ne ramène que les ports physiques je présume ?
Avatar
JeAn-PhI
pmxk a couché sur son écran :
Il se trouve que JeAn-PhI a formulé :

petit bémol sur ce code il ne retourne pas la totalité des ports
disponibles en tout sur ma machine j'ai COM1,5,6 en port physique et 2,3 en
virtuel



Et ...?
Le script ne ramène que les ports physiques je présume ?



en tout cas quand je l'ai tester sur ma machine il me retournait COM1,
2, 3, 4 alors que je n'avais que le 1 et puis quand j'ai une carte pci
il ne me les a pas pris en compte

--
Cordialement JeAn-PhI