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

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

Определение доступных 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;


Наверх

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