Недавно начал экспериментировать с COM портами в Delphi). Штука занимательная, возможно напишу об этом деле интересную статью, но пока хочу поделиться способом получения списка доступных для работы COM портов. Метод сильно расписывать не буду, код коротенький, так что в подробностях я надеюсь вы разберетесь сами). Итак приступим:
1) Для начала разместим компоненты на форме (2 компонента Buton и 1 Компонент StringList), я допустим сделал это так:
2) Свойство Enabled у Button2 устанавливаем в false, в разделе var создаем глобальную переменную Phandle:Thandle;
3) Создаем обработчик событий на Button1, где прописываем следующее:
Var
i:Integer;
begin
for i:=0 to 10 do
begin
Phandle:=CreateFile(Pchar('COM'+intToStr(i+1)), Generic_Read or Generic_Write, 0, nil, open_existing, file_flag_overlapped,0);
if Phandle<>invalid_handle_value then
begin
Listbox1.Items.Add('COM'+ IntToStr(i+1));
CloseHandle(Phandle);
end;
Button1.Enabled:=False;
Button2.Enabled:=True;
end;
end;
4) Создаем обработчик событий на Button2, и прописываем там:
begin
ListBox1.Clear;
Button1.Enabled:=True;
Button2.Enabled:=False;
end;
Запускаем проект, жмем на Button1, и если вы все выполняли внимательно, то в нашем ListBox1 получим полный список СОМ портов, которые есть на вашем компьютере. Ну а для не внимательных прилагаю исходник). Вообще есть еще способ получения информации о портах из реестра, но опробовав его я убедился в его некорректности. На стационарной машине где контроллер COM порта расположен на материнке, он работает, а когда вставляю в USB разъем конвертер USB/COM найти его в системе не удается. А методом рассмотренным выше получается просканировать все и получить достоверные данные). До встречи в следующих обзорах.
|