Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.05.15;
Скачать: [xml.tar.bz2];

Вниз

Кем используется 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.008 c
6-46881
Olphi
2003-03-18 20:02
2003.05.15
Как с помощью функций WinApi отпраивть письмо?


14-46976
Василий_
2003-04-24 19:30
2003.05.15
Систем 98Win


3-46617
Belkova
2003-04-22 23:23
2003.05.15
отчеты


1-46747
Max1111
2003-05-05 11:21
2003.05.15
Про меню, путь (помогите plizzzz)


8-46856
Blacked
2003-01-31 00:49
2003.05.15
Помогите с ACM (дубль два)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский