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?
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
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
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()
http://msdn.microsoft.com/library/defau ... tefile.asp
funkcja API GetLastError()
http://msdn.microsoft.com/library/defau ... terror.asp
systemowe kody błędów do numeru 499
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
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()
http://msdn.microsoft.com/library/defau ... tefile.asp
funkcja API GetLastError()
http://msdn.microsoft.com/library/defau ... terror.asp
systemowe kody błędów do numeru 499
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
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 53 gości