Форум: "Система";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];




Вниз

Работа с COM-портом 


EsKor   (2002-01-11 05:48) [0]

Недавно на конференции появлялось утвержение, что получить дескриптор уже открытого порта не возможно с помощью API.
Тогда вопрос:
А как его все-таки его получить, если очень надо?
Спасибо за ответы!



gek   (2002-01-11 07:34) [1]

дескриптор получаешь когда порт открываешь



EsKor   (2002-01-11 08:45) [2]

>gek
Так в том-то и дело, что когда COM-порт уже открыт (занят), функция CreateFile(...) возвращает значение INVALID_HANDLE_VALUE = DWORD(-1), при этом функция GetLastError возвращает ошибку ERROR_ACCESS_DENIED = 5;
Согласно Help параметр dwCreationDistribution функции CreateFile(...) может иметь значение только OPEN_EXISTING:
"The CreateFile function can create a handle to a communications resource, such as the serial port COM1. For communications resources, the dwCreationDistribution parameter must be OPEN_EXISTING, and the hTemplate parameter must be NULL."
М.б. есть еще какая функция/процедура открытия порта которую я никак увидеть не могу?



gek   (2002-01-11 09:54) [3]

Именно так и будет если снова порт пытаться открыть.
Он и говорит - ошибка доступа.
Я всегда порты открывал именно так
var
hNewCommFile: THandle;
begin
hNewCommFile := CreateFile(PChar("COM2"),GENERIC_READ+GENERIC_WRITE,
0, nil, OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0);



MegaVolt   (2002-01-11 09:55) [4]

ИМХО по идеологии СОМ порта нельзя чтобы к нему обращались две программы :( Следовательно и получить второй дескриптор нельзя :( Увы.



Fishbone   (2002-01-11 10:22) [5]

Это можно сделать через vxd, работающие на уровне ядра. Описывать сдесь это я не буду - дам животрепещущий пример - искать в <a href= http://www.sysinternals.com> http://www.sysinternals.com </a> программу portmon - она идет с исходниками, правда на с, но кому надо - тот разберется.



EsKor   (2002-01-11 10:31) [6]

Видимо я не совсем верно задаю вопрос.
Нужно не открыть уже открытый порт, захватить его, или работать параллельно с другой программой, а просто получить его дескриптор. Ну на самом деле не просто из любопытства, а, например с целью его принудительного закрытия. Может быть это и странная задача, но она есть и долго объснять зачем это нужно.




Форум: "Система";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.72 MB
Время: 0.023 c
1-22661           LiNkS                 2002-03-27 21:59  2002.04.08  
Как переместить в Memo курсор на опр. место в опр. строке?


3-22532           AndrewK               2002-03-14 08:51  2002.04.08  
Какие исключения возникают при работе с базой?


3-22578           ghost_by              2002-03-14 21:19  2002.04.08  
ACCESS и threads


1-22701           gray1                 2002-03-25 13:30  2002.04.08  
сохранение в файл екселя


1-22657           Serd_hhc              2002-03-26 14:09  2002.04.08  
Как сменить текст моей консольной проги.