Avatar billede driis Nybegynder
15. september 2004 - 18:12 Der er 8 kommentarer og
1 løsning

Win32 API finde installerede COM porte

Hvordan finder jeg ud af hvor mange og hvilke serielle porte der er installeret på maskinen vha Win32 API ?
Avatar billede odni Nybegynder
15. september 2004 - 18:46 #1
Du kunne bruge funktionen CreateFile til at prøve at skabe forbindelse til comporten. Hvis det lykkes, har du en funktionel comport. Sæt det ind i en lykke, og tæl op og aflæs, hvad du nu skal bruge af informationer.

Til comporte kunne CreateFile se således ud:

HANDLE hCom = CreateFile(pCommPort, GENERIC_READ | GENERIC_WRITE,0, NULL, OPEN_EXISTING, 0, NULL);

hvor pCommPort er en pointer til navnet på com-porten der skal ledes efter, i formatet COMnr (COM4 f.eks.).

Du kan så tjekke om comporten findes ved at tjekke således:

if (hCom != INVALID_HANDLE_VALUE) { comporten findes; }

Held og lykke.
Avatar billede arne_v Ekspert
15. september 2004 - 18:47 #2
Den hurtige løsning er at forsøge at åbne alle COMn: og se hvilke der fejler.

:-)

For en mere avanceret løsning se denne her artikel:
  http://www.codeproject.com/useritems/serial_portsenum_fifo.asp?df=100&forumid=15560&exp=0&select=875177
Avatar billede driis Nybegynder
25. september 2004 - 22:05 #3
I må begge gerne lægge et svar.

Jeg har læst mig frem til, at på Windows 2000 / XP kan en seriel port godt have et andet navn end "COMn" så derfor er den først foreslåede metode ikke helt fejlfri. Men sikkert anvendelig i langt de fleste tilfælde.
Avatar billede arne_v Ekspert
25. september 2004 - 22:06 #4
svar
Avatar billede driis Nybegynder
26. september 2004 - 00:25 #5
arne >> Jeg prøver at bruge koden fra artiklen, du linker til.

Når jeg prøver at kompilere eksemplet ( Microsoft VC++ ), får jeg en fejl i linien:
typedef DWORD WINAPI
  (* CM_Open_DevNode_Key)(DWORD, DWORD, DWORD, DWORD, ::PHKEY, DWORD);
og én mere i:
res1=OpenDevNodeKey(DeviceInfoData.DevInst,KEY_QUERY_VALUE,0,
            RegDisposition_OpenExisting,&KeyDevice,CM_REGISTRY_HARDWARE);

Compiler output:

Compiling...
Win32Serial.cpp
d:\Visual Studio Projects\Serial\Win32Serial\Win32Serial.h(14) : error C2059: syntax error : '('
d:\Visual Studio Projects\Serial\Win32Serial\Win32Serial.cpp(53) : warning C4311: 'type cast' : pointer truncation from 'FARPROC' to 'DWORD'
d:\Visual Studio Projects\Serial\Win32Serial\Win32Serial.cpp(79) : error C2064: term does not evaluate to a function taking 6 arguments


Nogen ide om hvad der går galt ?
Avatar billede arne_v Ekspert
26. september 2004 - 17:48 #6
Der må mangle et eller andet.

Bruger du VS6 SP5 ?

Har du PSDK installeret ?  Hvis ja har du prøvet at bruge header filer defra ?
Avatar billede driis Nybegynder
26. september 2004 - 18:25 #7
Jeg bruger VS .NET, og bruger headers fra PSDK.
Avatar billede arne_v Ekspert
03. oktober 2004 - 14:43 #8
Fik du det til at virke ?
Avatar billede driis Nybegynder
03. oktober 2004 - 14:49 #9
Nej - projektet er lagt lidt på køl indtil videre.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester