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

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

EnumPorts странно работает [D7, WinXP]


Корешь ©   (2006-05-31 22:22:00) 

Использую для получения списка портов следующий код
var
BytesNeeded, Returned, I: DWORD;
Success: Boolean;
PortsRtr: Pointer;
InfoPtr: PPortInfo1;
TempStr: string;
begin
Success:=EnumPorts(nil, 1, nil, 0, BytesNeeded, Returned);
If (not Success) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) then
  begin
  GetMem(PortsRtr, BytesNeeded);
  Try
     Win32Check(EnumPorts(nil, 1, PortsRtr, BytesNeeded, BytesNeeded, Returned));
     For I:=0 to  Returned -1 do
       begin
          InfoPtr:= PPortInfo1(DWORD(PortsRtr)+ I * SizeOf(TPortInfo1));
          TempStr:= InfoPtr^.pName;
          ComboBox1.Items.Add(TempStr);
       end;
  Finally
     FreeMem(PortsRtr);
  end;
  end;

Так вот получается что у меня в системе четыре com и три lpt портов, хотя их два и один соответсвенно, как получит правильную информацию о наличии портов?


Kolan   (2006-05-31 23:29:00) [1]


> tesseract ©   (31.05.06 23:15) [6]

Угу...


tesseract   (2006-05-31 23:15:00) [2]

Kolan см внимательнрее код который я тебе выслал :-).

Там не Tstrings, а TStringList, лучше использовать Assign, а не цикл, остальное верно :-)


Kolan   (2006-05-31 22:40:00) [3]

Ну все что знал расказал... (c)


Корешь   (2006-05-31 22:36:00) [4]

не то же не катит...
wmi выдает правильные результаты, но не очень хочется его использовать...


Kolan   (2006-05-31 22:32:00) [5]

Как узнать имена установленных в системе COM-портов?
Previous  Top  Next  

uses Registry;  

procedure TForm1.Button1Click(Sender: TObject);  
var  
 reg : TRegistry;  
 ts : TStrings;  
 i : integer;  
begin  
 reg := TRegistry.Create;  
 reg.RootKey := HKEY_LOCAL_MACHINE;  
 reg.OpenKey('hardware\devicemap\serialcomm',  
             false);  
 ts := TStringList.Create;  
 reg.GetValueNames(ts);  
 for i := 0 to ts.Count -1 do begin  
   Memo1.Lines.Add(reg.ReadString(ts.Strings[i]));  
 end;  
 ts.Free;  
 reg.CloseKey;  
 reg.free;  
end;

Взято с Исходников.ru http://www.sources.ru


Корешь   (2006-05-31 22:29:00) [6]

оно конечно можно, но если в это время порт занят кемто то получится что его нет....


Kolan   (2006-05-31 22:24:00) [7]


> как получит правильную информацию о наличии портов?
>

Я думаю просто попытать ся их открыть... Удачно - он есть нет, значит нет...


Наверх

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