Liste des Ports COM

Signaler
Messages postés
4
Date d'inscription
mercredi 28 janvier 2004
Statut
Membre
Dernière intervention
21 juin 2004
-
Messages postés
75
Date d'inscription
samedi 30 août 2003
Statut
Membre
Dernière intervention
7 janvier 2008
-
Bonjour,

Je cherche la manière de connaître les ports com actif et leur description (comme sur le gestionnaire de péripheriques) sur le PC sous Windows.

Pour permettre le choix de portcomm existant

Merci

10 réponses

Messages postés
1016
Date d'inscription
samedi 22 mars 2003
Statut
Membre
Dernière intervention
24 juin 2008

avec le mscontrol, tu peux ouvrir toute une serie de port(mscomm1.portopen), si un port peut etre ouvert alors aucun message d'erreur, dans ce cas tu le fermes juste apres(+ procedure de listage), si il n'existe pas, il va t'envoyer un message d'erreur que tu peux gerer (code : 8002 "port non valide"). Pour avoir les informations, c'est un autre pb que je ne connais pas.
il doit y avoir d'autres moyens

bonne prog
liquide
Messages postés
4
Date d'inscription
mercredi 28 janvier 2004
Statut
Membre
Dernière intervention
21 juin 2004

Merci Liquide

J'ai déjà implémenté cette technique qui marche bien, et je souhaitais que l'utilisateur selectionne le port est connecté mon boîtier grace à la description, sinon il doit aller dans les propriétés systèmes.
Messages postés
75
Date d'inscription
samedi 30 août 2003
Statut
Membre
Dernière intervention
7 janvier 2008
1
Euh c pas terrible les gars, de générer des erreurs pour les traiter ensuite..

La liste des port com reconnus doit se trouver dans la base de registre comme pour les imprimantes, par contre je sais pas ou dsl, je suis en train de chercher
Messages postés
1016
Date d'inscription
samedi 22 mars 2003
Statut
Membre
Dernière intervention
24 juin 2008

euhhhh , fait ta gestion de la base de registre, puis trouves les ports com en les listant et ensuite continue ton prog normalement.
elle n'est peut etre pas terrible mais elle est rapide et elle permet d'avoir la solution exacte avec un moindre code, ce qui l'est moins pour ta base de registre.

D'autant plus que l'erreur retournée est la pour la gestion, donc elle est permise, ce qui implique un code exact.

c'est juste mon avis.

Bonne prog, poele_a_frire@hotmail.com
liquide
Messages postés
75
Date d'inscription
samedi 30 août 2003
Statut
Membre
Dernière intervention
7 janvier 2008
1
HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM

le numéro 0 correspond au port com par defaut.

Cette methode est bien plus propre, selon moi toujours.
Messages postés
1016
Date d'inscription
samedi 22 mars 2003
Statut
Membre
Dernière intervention
24 juin 2008

bin donne tout le code pour recuperer tous les ports, comme ca, tout le monde en profite.

Bonne prog, poele_a_frire@hotmail.com
liquide
Messages postés
75
Date d'inscription
samedi 30 août 2003
Statut
Membre
Dernière intervention
7 janvier 2008
1
non, ta qu'a etre poli pour commencer..
Messages postés
1016
Date d'inscription
samedi 22 mars 2003
Statut
Membre
Dernière intervention
24 juin 2008

je vois ...... donneur de leçon mais pas donneur de code ....

Bonne prog, poele_a_frire@hotmail.com
liquide
Messages postés
11
Date d'inscription
mardi 30 mars 2004
Statut
Membre
Dernière intervention
11 juillet 2005

Salut,
Je suis d'accord, l'utilisation de la base de registre est top.
Se serai sympas d'avoir un exemple de code pour en avoir l'accès.
Merci d'avance.
Mathew--
Messages postés
75
Date d'inscription
samedi 30 août 2003
Statut
Membre
Dernière intervention
7 janvier 2008
1
Jai trouvé ce fichier sur VBfrance, je ne sais plus qui est l'auteur dsl :



'debut reg.bas

Option Explicit

'// Register _

{

Private Declare Function RegOpenKey Lib "advapi32.dll" Alias
"RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult
As Long) As Long

Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias
"RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String,
ByVal lpReserved As Long, lpType As Long, ByVal lpData As String,
lpcbData As Long) As Long

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

Private Declare Function RegEnumValue Lib "advapi32.dll" Alias
"RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal
lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long,
lpType As Long, ByVal lpData As String, lpcbData As Long) As Long





'// Registry section definitions

Public Enum eHKey

HKEY_CLASSES_ROOT = &H80000000

HKEY_CURRENT_USER = &H80000001

HKEY_LOCAL_MACHINE = &H80000002

HKEY_USERS = &H80000003

HKEY_PERFORMANCE_DATA = &H80000004

HKEY_CURRENT_CONFIG = &H80000005

HKEY_DYN_DATA = &H80000006

End Enum



'// Registry value type definitions

Public Enum eRegMode

REG_NONE = 0 '// No value type

REG_SZ = 1 '// Unicode nul terminated string

REG_EXPAND_SZ = 2 '// Unicode nul terminated string

REG_BINARY = 3 '// Free form binary

REG_DWORD = 4 '// 32-bit number

REG_DWORD_LITTLE_ENDIAN = 4 '// 32-bit number (same as REG_DWORD)

REG_DWORD_BIG_ENDIAN = 5 '// 32-bit number

REG_LINK = 6 '// Symbolic Link (unicode)

REG_MULTI_SZ = 7 '// Multiple Unicode strings

REG_RESOURCE_LIST = 8 '// Resource list in the resource map

REG_FULL_RESOURCE_DESCRIPTOR = 9 '// Resource list in the hardware description

REG_RESOURCE_REQUIREMENTS_LIST = 10

End Enum



Public Type tValue

Name As String

Type As eRegMode

Value As Variant

End Type





'/////////////////////////////////////////////////////////////////////////////

'// Fonction pour lire toute les valeur contenu dans une clé avec leur type et leur noms _

{

Public Function ReadRegistryValues(ByVal hKey As eHKey, ByVal section As String, ByRef ValName() As tValue)

Dim KeyValue As Long

Dim RegMode As eRegMode

Dim lValueLength As Long

Dim lValueNameLength As Long

Dim sValueName As String

Dim sValue As String

Dim Idx As Long

Call RegOpenKey(hKey, section, KeyValue) '// Ouverture

Do '// Début de la boucle principale

sValue = Space$(2048)

sValueName = Space$(2048)

lValueLength = Len(sValue)

lValueNameLength = Len(sValueName)

If (RegEnumValue(KeyValue, Idx,
sValueName, lValueNameLength, 0&, RegMode, sValue, lValueLength) 0) And (Err.Number 0) Then '// Si on trouve une valeur ...

sValueName = Left$(sValueName, lValueNameLength) '// On en extrait le nom

sValue = ReadRegistry(hKey, section, sValueName) '// et la valeur

ReDim Preserve ValName(Idx) As tValue '// Redimmentionne le tableau

ValName(Idx).Name = sValueName '// Nom de la valeur

ValName(Idx).Type = RegMode '// Le type

ValName(Idx).Value = sValue '// La valeur

Else '// Si on trouve pas de valeur, c que c la fin

Exit Do '// On quitte la boucle

End If

Idx = Idx + 1 '// Incrément de l'index de valeur

Loop

Call RegCloseKey(KeyValue) '// Fermeture

End Function ' _

}









'/////////////////////////////////////////////////////////////////////////////

'// Fonction pour lire une donnée du registre _

{

Private Function ReadRegistry(ByVal hKey As eHKey, ByVal section As String, ByVal key As String) As String

Dim KeyValue As Long

Dim RegMode As eRegMode

On Error Resume Next

Call RegOpenKey(hKey, section, KeyValue) '// Ouverture

ReadRegistry = Space$(2048)

Call RegQueryValueEx(KeyValue, key, 0&, RegMode, ReadRegistry, Len(ReadRegistry))

If Err.Number = 0 Then

If RegMode = REG_DWORD Then '// Si c'est une valeur DWORD

ReadRegistry =
Format$(Asc(Mid$(ReadRegistry, 1, 1)) + &H100& *
Asc(Mid$(ReadRegistry, 2, 1)) + &H10000 * Asc(Mid$(ReadRegistry, 3,
1)) + &H1000000 * CDbl(Asc(Mid$(ReadRegistry, 4, 1))), "000") '//
On converti le format en décimal

ElseIf RegMode = REG_BINARY Then '// Si cest une valeur BINARY

ReadRegistry = Left$(ReadRegistry, Len(ReadRegistry)) '// On lit la valeur

Else '// Sinon

ReadRegistry =
Left$(ReadRegistry, InStr(ReadRegistry, Chr(0)) - 1) '// lit avant le 0

End If

End If

Call RegCloseKey(KeyValue) '// Fermeture

End Function ' _

}

'fin reg.bas



ensuite pour récuperer ton info tu utilise l'appel :



Dim TabKey() As tValue

' base de registre

ReadRegistryValues HKEY_LOCAL_MACHINE, "HARDWARE\DEVICEMAP\SERIALCOMM", TabKey





tiens moi au courant, bonne prog