/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Detektion af COM porte
Fra : Thomas Due


Dato : 05-01-01 15:27

Hejsa,

Jeg har behov for at detektere hvor mange COM porte der er på en maskine.
Er der en måde at gøre det på?

Grunden til at jeg spørger er at jeg har en driver som aflæser en COM port,
og
det vil jo være fjollet, for ikke at sige potentielt skidt, at forsøge at
aflæse en
port som ikke findes.

Man skal vælge en port ud fra en liste, og hvis jeg nu kunne nøjes med at
liste
de porte som rent faktisk eksisterer, så ville det jo være smart.

Mvh
Thomas Due




 
 
Roald Henriksen (09-01-2001)
Kommentar
Fra : Roald Henriksen


Dato : 09-01-01 00:26

Daw Thomas!
Jo, det kan godt la' sig gøre, her er en stump kode:

procedure TRS232F.FindFreePorts(var PortList: TStringlist);
var
N,ErrCode: integer;
Hndl: THandle;
begin
Memo1.Lines.Clear;
PortList.Clear;
for N:= 1 to 8 do
begin
if N <> MousePortNo file://never test the mouse
port!
then begin
SetLastError(0);
Hndl:= CreateFile(
PChar(Port[N]), file://file name
GENERIC_READ or GENERIC_WRITE, file://desired access
0, file://share mode
Nil, file://security attributes
Open_Existing, file://creation distribution
FILE_FLAG_OVERLAPPED, file://flags and attributes
0 file://template file
);
ErrCode:= GetLastError;
case ErrCode of
0: begin
PortList.Append(Port[N]); file://free port, save it
Memo1.Lines.Append(Port[N]+' is free.');
end;
2: Memo1.Lines.Append(Port[N]+' is not installed.');
5: Memo1.Lines.Append(Port[N]+' is in use by another program.');
else Memo1.Lines.Append(Port[N]+' fails. Errorcode:
'+IntToStr(ErrCode));
end; file://case...
if Hndl <> INVALID_HANDLE_VALUE then CloseHandle(Hndl); file://free
port
end
else begin
Memo1.Lines.Append(Port[N]+' is used by the mouse.');
end; file://if...
end; file://for...
end;

Det essentielle er funktionen CreateFile, der returnerer en handle til
porten. Funktionen sætter også en fejlkode, der læses med GetLastError.
Fejlkoden er nul, hvis porten eksisterer og er fri. Husk inden kaldet til
CreateFile at presette fejlkoden til nul med funktionen SetLastError.
Som du kan se, overspringes en evt. museport. Det var nødvendigt på min PC,
der har musen på COM1 og anvender Logitech Mouseware version 9.0. Der skete
det, at testen sagde fri port - og værre endnu - musen frøs uhjælpeligt
fast. Surt show, så jeg kigger i Registry inden testen, så jeg kan udelukke
en evt. museport. Linierne med Memo1 bruger jeg til info, dem kan du bare
slette.

Mvh RH.




Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste