Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Кем используется COM порт ? [D5, Win2k]


S.A.S ©   (2003-03-20 12:05:00) 

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

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

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

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


y-soft   (2003-03-20 15:12:00) [1]

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


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

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


y-soft   (2003-03-20 14:28:00) [3]

Пример с 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;


крот   (2003-03-20 14:18:00) [4]


> Clickmaker © (20.03.03 13:00)


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


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

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


крот   (2003-03-20 12:35:00) [6]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо