Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

liczba portow szeregowych w systemie windows

emilbart
-
-
Posty:4
Rejestracja:10 lis 2005, o 15:46
Lokalizacja:łódź
liczba portow szeregowych w systemie windows

Postautor: emilbart » 30 sie 2006, o 13:05

Witam
Chce napisac program w Delphi ktory poda mi liczbe portow com dostepnych w systemie windows (takze wirtualnych) Moze ktos jest w stanie mi pomoc?

Awatar użytkownika
tasza
-
-
Posty:456
Rejestracja:17 sty 2005, o 10:52

Postautor: tasza » 3 wrz 2006, o 21:38

hmm, nie wiem czy to jeszcze aktualne, ale może się przyda...

Win32 obsługuje porty szeregowe przy pomocy tych samych funkcji,
którymi obsługuje pliki. Porty są widziane jako specjalne pliki
o nazwach 'COM1'...'COM256', nawet jeżeli są to port dodatkowe na kartach,
lub wirtulane COM-y (np. od mostków USB/RS232)
Jedna z metod policzenia ile mamy portów szeregowych polega
na kolejnym próbowaniu, czy do danego urządzenia/pliku da się się uzyskać
uchwyt (handle) i czy będzie ono dostępne.
Można to zrobić funkcją CreateFile() z atrybutem OPEN_EXISTING.
Jeżeli dla danej nazwy COMx ona zwróci wartość różną od INVALID_HANDLE_VALUE
to znaczy że dany port istnieje i jest gotowy do otwarcia (czyli w chwili badania - zamknięty)
Jeżeli z CreateFile() dostaniemy INVALID_HANDLE_VALUE, to nalezy teraz
sprawdzić kod błędu zwrócony przes system, ponieważ port może istnieć, ale być
aktualnie w użyciu. Test wykonujemy funkcją GetLastError(), dla portu szeregowego
który jest zajęty kod błędu będzie ERROR_ACCESS_DENIED.
Tu linki do MSDN-a z potrzebnymi zagadnieniami:
funkcja API CreateFile()
:arrow: http://msdn.microsoft.com/library/defau ... tefile.asp
funkcja API GetLastError()
:arrow: http://msdn.microsoft.com/library/defau ... terror.asp
systemowe kody błędów do numeru 499
:arrow: http://msdn.microsoft.com/library/defau ... 0-499_.asp
( port istnieje, lecz zajęty - kod 5, nie istnieje - kod 2)

a w załączniku kawałek programiku, który testuje obecność COM-ów,
w tym przypadku w zakresie 1..10, docelowo można w pętli dać $FF,
bo tyle NT może mieć portów szeregowych

no i obrazek - jak to działa - ja przykładowo mam 3 porty szeregowe,
jeden z płyty (COM1 - aktualnie wolny), dwa z karty expandera I/O,
COM3 - zajęty przez Wacom Artpad, COM4 - wolny...

I to tak mniej więcej wygląda...

tasza
Załączniki
com_num.zip
(202.81KiB)Pobrany 210 razy
porty.gif

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 39 gości