cs_nitrique
Messages postés344Date d'inscriptionjeudi 1 mai 2003StatutMembreDernière intervention 4 avril 2011
-
3 oct. 2005 à 09:48
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 2014
-
4 oct. 2005 à 13:24
Bonjour,
J'aimerais avoir des informations sur le materiel connecté au port COM n de manière à l'identifier.
Pour être clair:
Mon appli doit scanner un port COM et trouver un périphérique bien précis (Le périphérique est branché en USB mais il simule un port COM), si il ne le trouve pas, il passe au port COM suivant.
Comment obtenir des informations sur le materiel branché en rs232 ?
(ou sinon, le nom du port COM virtuel Créé)
Merci d'avance.
David, à VERSAILLES
A voir également:
[TcomPort] Identifier les materiels connectés (infos)
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201413 3 oct. 2005 à 14:55
le nom que je t'ai donné correspond à un convertisseur belkin
pour la violation d'accès c'est bizzare chez moi ça fonctionne sans
problème mais je n'est mis que cela sur la form.je ne pense pas (mais
je n'en suis pas sur) qu'il y ait un autre moyen que de lire le
registre pour savoir quel peripherique est installé.
si tu veux une operation automatisee remplace le listbox par des Tstrings (l'enumports n'est là que pour l'exemple. tu fais:
var Numport:string;
dans le traitement tu ajoutes if valuename= ' \Device\slabser0' then Numport:=Data;
tu n'es pas obligé de passer par des Tstrings;
ça devrais donner quelque chose comme ça
function NumeroPort:string;
var
KeyHandle: HKEY;
ErrCode, Index: Integer;
ValueName, Data: string;
ValueLen, DataLen, ValueType: DWORD;
begin
ErrCode : = RegOpenKeyEx(
HKEY_LOCAL_MACHINE,
'HARDWARE\DEVICEMAP\SERIALCOMM',
0,
KEY_READ,
KeyHandle);
if ErrCode <> ERROR_SUCCESS then
raise EComPort.Create(CError_RegError, ErrCode);
Index := 0;
repeat
ValueLen : = 256;
DataLen := 256;
SetLength(ValueName, ValueLen);
SetLength(Data, DataLen);
ErrCode := RegEnumValue(
KeyHandle,
Index,
PChar(ValueName),
{$IFDEF DELPHI_4_OR_HIGHER}
Cardinal(ValueLen),
{$ELSE}
ValueLen,
{$ENDIF}
nil,
@ValueType,
PByte(PChar(Data)),
@DataLen);
if ErrCode = ERROR_SUCCESS then
begin
SetLength(Data, DataLen);
if valuename' \Device\slabser0' then Numeroport:Data;
cs_nitrique
Messages postés344Date d'inscriptionjeudi 1 mai 2003StatutMembreDernière intervention 4 avril 20111 3 oct. 2005 à 13:59
Bonjour Jlen100,
J'ai bien essayé ton code:
var temp1,temp2,temp3: TStrings;
KeyHandle: HKEY;
ErrCode, Index: Integer;
ValueName, Data: string;
ValueLen, DataLen, ValueType: DWORD;
begin
ErrCode := RegOpenKeyEx(HKEY_LOCAL_MACHINE,'HARDWARE\DEVICEMAP\SERIALCOMM',0,KEY_READ,KeyHandle);
if ErrCode <> ERROR_SUCCESS then
raise EComPort.Create(CError_RegError, ErrCode);
Index := 0;
repeat
ValueLen := 256;
DataLen := 256;
SetLength(ValueName, ValueLen);
SetLength(Data, DataLen);
ErrCode := RegEnumValue(KeyHandle,Index,PChar(ValueName),
{$IFDEF DELPHI_4_OR_HIGHER}
Cardinal(ValueLen),
{$ELSE}
ValueLen,
{$ENDIF}
nil,@ValueType,PByte(PChar(Data)),@DataLen);
if ErrCode = ERROR_SUCCESS then
begin
SetLength(Data, DataLen);
temp1.Add(Data);//donne la liste non triée des ports presents
temp2.Add(valuename);// donne la liste des descriptions
Inc(Index);
end
else
if ErrCode <> ERROR_NO_MORE_ITEMS then
raise EComPort.Create(CError_RegError, ErrCode);
until (ErrCode <> ERROR_SUCCESS) ;
RegCloseKey(KeyHandle);
enumcomports(temp3);// donne la liste classée des ports
Qui a l'air de répondre à ma demande (J'ai été voir dans le registre, mon port est: \Device\slabser0, c'est normal ?)
Mais il me fait une violation d'accès que le port soit ouvert ou non.
Mais je n'ai pas besoin d'une superbe interface utilisateur, puis-je faire simplement:
var temp1: TStrings;
begin
enumcomports(temp1);// donne la liste classée des ports
(Qui me fait également une violation d'accès mais la combobox est-elle chargée des description ?)
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201413 3 oct. 2005 à 15:13
un dernier conseil pour verifier que device corespond bien à ton
matériel place 3 listbox sur une form et utilises le premier code ainsi
tu auras la liste complète de ports serie de ton PC (le device varie
d'un matériel à un autre ce qui est normal puisque celà sert à
l'indentifier).
si tu as plusieurs matériels d'origine différentes mets un liste en fichier ini et modifie le test
cs_nitrique
Messages postés344Date d'inscriptionjeudi 1 mai 2003StatutMembreDernière intervention 4 avril 20111 4 oct. 2005 à 13:18
Si la réponse t"interesse, la voici:
Begin
Application.Initialize;
Application.Title := 'GT_D2R';
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
//Halt(ret); // valeur de retour de l'application
end.