Salut j'ai besoin de trouver le débit en bauds et d'autres paramètres pour un port série, En regardant sur le web, il semble que je devrais utiliser GetCommConfig, Cela retourne un enregistrement TCommConfig avec quoi Je suppose que ce sont les données dont j'ai besoin. Le problème est la fonction que je wote retourne les mauvaises valeurs.Trouver les paramètres du port série dans Delphi
Le code ci-dessous semble fonctionner, mais le débit en bauds est toujours de 1200, ce qui ne va pas dans Windows Gestionnaire de périphériques (et modifier les paramètres de port).
Je l'ai essayé d'appeler comme si:
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 touche toujours la ligne Résultat: = CommConfig;, donc le GetCommConfig est revenu 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, comme transmission de 1200.
Est-ce que quelqu'un sait où je me trompe?
Avez-vous essayé GetCommState? http://msdn.microsoft.com/en-us/library/aa363260%28VS.85%29.aspx – stukelly
Oui même résultat, autant que je peux dire, GetCommConfig utilise GetCommState en interne pour remplir l'enregistrement DCB. – Re0sless