Trouver les paramètres du port série dans Delphi
-
12-09-2019 - |
Question
Salut j'ai le besoin de trouver la vitesse de transmission et d'autres paramètres d'un port série, au sujet de la recherche sur le web, il semble que je devrais utiliser GetCommConfig , retourne un disque TCommConfig avec ce que je suppose est que les données dont j'ai besoin. Le problème est la wote fonction I renvoie les mauvaises valeurs.
Le code ci-dessous ressemble à cela fonctionne, mais la vitesse de transmission est toujours 1200, qui recherche dans les fenêtres gestionnaire de périphériques (et modifier les paramètres du port), est erroné.
Je l'ai essayé d'appeler comme ceci:
ComPort('com1');
ComPort('COM1');
ComPort('COM1:');
ComPort('COM4');
ComPort('COM9');
les 4 premiers sont valables, mais reviennent 1200 et le 5 est invalide et renvoie 0
function ComPort(l_port:String):TCommConfig;
{Gets the comm port settings}
var
ComFile: THandle;
PortName: array[0..80] of Char;
size: cardinal;
CommConfig:TCommConfig;
begin
FillChar(Result, SizeOf(TCommConfig), 0);//blank return value
try
StrPCopy(PortName,l_port);
ComFile := CreateFile(PortName,GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,0{ FILE_ATTRIBUTE_NORMAL},0);
try
if (ComFile <> INVALID_HANDLE_VALUE) then
begin
FillChar(CommConfig, SizeOf(TCommConfig), 0);//blank record
CommConfig.dwSize := sizeof(TCommConfig);//set size
//CommConfig.dcb.DCBlength := SizeOf(_dcb);
size := sizeof(TCommConfig);
if (GetCommConfig(ComFile,CommConfig,size)) then
begin
Result := CommConfig;
end;
end;
finally
CloseHandle(ComFile);
end;
except
Showmessage('Unable to open port ' + l_port);
end;
end;
pas à pas dans le code, le premier 4 toujours frappé la ligne Résultat:. = CommConfig; , de sorte que le GetCommConfig est Refaire un code valide, donc je dois manquer quelque chose
Je tryed verious autres choses, telles que le réglage de la longueur de l'enregistrement de DCB, mais tous ont le même résultat, en baud de 1200.
Est-ce que quelqu'un sait où je me trompe?
La solution 2
Il se trouve que j'utilisais la mauvaise fonction, je l'utilise GetDefaultCommConfig et non
Autres conseils
La vitesse de transmission et d'autres paramètres d'un port série, sont définies lorsque le port série est ouvert. Je pense que vous lisez les valeurs par défaut.