![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определение доступных COM портов? [D7, XP]
Сергей Кокоулин © (2008-10-22 21:19:00)Как Определить сие? Если можно на примере!
Германн (2008-10-25 19:46:00) [1]2 Сергей Кокоулин (25.10.08 18:24) [12]
Тогда после [11] поможет вызов GetLastError.
Сергей Кокоулин (2008-10-25 18:24:00) [2]
> В смысле, порт занят
Программа по умолчанию должна просканировать СОМ1 и СОМ2 и при Определении что тот или иной порт занят другим приложением, вывести Конкретную мессагу.
Типа того:
ShowMessage('МуПрограмма :) обнаружила, что порты СОМ: ' + IntToStr(i) + ' заняты другой Программой. Закройте её для освобождения порта(ов)!');
tesseract (2008-10-24 10:33:00) [3]
> сделать вывод мессаги о недоступности того или иного порта?
ой ёёё
ComHandle=CreateFile();
if COMHandle=INVALID_HANDLE_VALUE then ShowMessage("не-не-не-не Дэвид Блэйн!");
YurikGL (2008-10-23 21:16:00) [4]
> Спасибо, а как при опросе портов, сделать вывод мессаги
> о недоступности того или иного порта?
В смысле, порт занят, или такого порта вообще нет?
Сергей Кокоулин (2008-10-23 18:33:00) [5]Спасибо, а как при опросе портов, сделать вывод мессаги о недоступности того или иного порта?
tesseract (2008-10-23 10:53:00) [6]Так должно работать :
procedure GetComList;
var reg:Tregistry;
i:integer;
begin
ComList:=TStringList.Create;
Reg := TRegistry.Create;
try
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.OpenKey('hardware\devicemap\serialcomm', false);
reg.GetValueNames(ComList);
for i:=0 to comList.Count-1 do
comList[i]:=reg.ReadString(comList[i]);
finally
reg.Free;
end;
end;
wal (2008-10-23 09:35:00) [7]HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
Поросенок Винни-Пух (2008-10-23 09:34:00) [8]попробуй с помощью его найти com10.....com31
brother (2008-10-23 08:51:00) [9]код отработал нормально на занятом порте...
YurikGL (2008-10-23 08:41:00) [10]
> а если порт занят? то его и всписке небудет
Честно - не помню. Вроде бы действительно не было у меня занятых портов.
brother (2008-10-23 08:30:00) [11]будет... тк GENERIC_READ or GENERIC_WRITE, то в любом случае, что либо произойдет
Slym (2008-10-23 08:14:00) [12]YurikGL © (23.10.08 7:40) [1]
а если порт занят? то его и всписке небудет
YurikGL (2008-10-23 07:40:00) [13]Выдернул из какого-то старого проекта
ComboBox1.Items.Clear;
for i := 0 to 31 do {цикл опроса}
begin {пробуем получить дескриптор порта}
FHandl := CreateFile(PChar('COM' + IntToStr(i + 1)),
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
if FHandl <> INVALID_HANDLE_VALUE then {если порт есть то добавить в список}
ComboBox1.Items.Add('COM' + IntToStr(i + 1));
CloseHandle(FHandl); {закрыть дескриптор}
end;
if ComboBox1.Items.Count=0 then begin
Button1.Enabled:=false;
ComboBox1.Items.Add('none');
ShowMessage('В системе Com-портов не найдено.');
end;
ComboBox1.ItemIndex:=0;