Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.15;
Скачать: CL | DM;

Вниз

Кем используется COM порт ?   Найти похожие ветки 

 
S.A.S   (2003-03-20 12:05) [0]

Hi. Подскажите, пожалуйста:

1) Как правильно определить количество COM портов. Обращение к реестру (HKLM\HARDWARE\DEVICEMAP\SERIALCOMM) дает не полный список установленных портов (внутрениий модем установлен на COM4, а в реестре присутствуют только COM1, COM2 и COM3).

2) Как определить "кто" использует порт.

Необходимо определить на каких портах "сидят" модемы. Для этого использую TApdComPort(AsincPro) и функцию ApdComPort1.PutString("atz"+chr(13)) и если придет подтверждение - модем установлен. Но ApdComPort1 сначала нужно открыть, и если на COM1 сидит мышь соответственно он не откроется и я выведу "ошибка открытия", а как определить почему он не открылся (например, "используется мышью")?


 
крот ©   (2003-03-20 12:35) [1]

Что касается пункта 1. есть такое соображение. При попытке открыть несуществующий порт ф-ей CreateFile возникнет ошибка. Код ошибки, возвращенный GetLastError будет ERROR_FILE_NOT_FOUND.


 
Clickmaker ©   (2003-03-20 13:00) [2]

Ну а что касается пункта 2, то там скорей всего CreateFile вернет ERROR_SHARING_VIOLATION, если там сидит мышь, поскольку порты открываются в монопольном режиме


 
крот ©   (2003-03-20 14:18) [3]


> Clickmaker © (20.03.03 13:00)


Да, но кокое именно устройство заняло порт - непонятно. Наверное, есть способ определить каким приложением занят файл, но это уже к мастерам.


 
y-soft ©   (2003-03-20 14:28) [4]

Пример с http://www.houseofdeveloper.com/templates/show_article.php?LanguageID=1&ID=84&GetID=1

procedure EnumPorts( PortList: TStrings );
var
MaxPorts : integer;
hPort : THandle;
PortNumber : integer;
PortName : string;
begin
if PortList = nil then EXIT;

{ where are we running on? }
case Win32PlatForm of
VER_PLATFORM_WIN32_NT: MaxPorts := 256;
VER_PLATFORM_WIN32_WINDOWS: MaxPorts := 9;
end;

for PortNumber := 1 to MaxPorts do
begin
if PortNumber > 9 then
PortName := "\\.\COM" + IntToStr( PortNumber ) // ask Microsoft why...
else
PortName := "COM" + IntToStr( PortNumber );

hPort := CreateFile( PChar( PortName ),
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
0,
0 );

// note that ports already in use by other apps
// will *NOT* be detected here
if not ( hPort = INVALID_HANDLE_VALUE ) then
PortList.Add( PortName );
CloseHandle( hPort );
end;
end;


 
S.A.S   (2003-03-20 15:09) [5]

Может есть какая API функция или в запись реестре, чтобы определить на каких портах присутствуют модемы, ведь в панели управления в модемах это все прописывается (какой модем на каком порту), где это хранится ?


 
y-soft ©   (2003-03-20 15:12) [6]

Если порт открывется, посылайте на пробу AT-команды...



Страницы: 1 вся ветка

Текущий архив: 2003.05.15;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
6-46889
Карелин Артем
2003-03-04 13:07
2003.05.15
RAS без Entry. Возможно ли это?


3-46645
Skalp
2003-04-24 16:12
2003.05.15
Про транзакции


3-46562
Endi
2003-04-21 19:42
2003.05.15
Неправильная печать русских символов


11-46673
Сандро
2002-08-12 12:25
2003.05.15
MCK и OpenGL


14-46997
NetBreaker666
2003-04-26 16:34
2003.05.15
Жириновский