Форум: "Система";
Текущий архив: 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