1. Спонсор публикаций Marketplace codeby. Сервис, который так долго ждали. При расчетах используем биткоин. Первый товар уже в продаже: Консультация на тему ИБ от Ondrik8

    Скрыть объявление
  2. Спонсор публикаций Marketplace codeby. Сервис, который так долго ждали. При расчетах используем биткоин. Второй товар маркетплейса: Надёжная обфускация вашей программы от PingVinich

    Скрыть объявление

ик порт

Тема в разделе "Delphi - Система", создана пользователем Tsnok, 26 окт 2005.

Статус темы:
Закрыта.
  1. Tsnok

    Tsnok Гость

    Репутация:
    0
    Всем привет.
    Кто знает как можно из мод Дельфи проверить наличие ик порта.
    Не откажусь от примеров на С.

    Благодарю за помощь.
     
  2. zubr

    zubr Гость

    Репутация:
    0
    Вот код определения модемов в системе:
    Код (Text):
    type
    SP_DEVINFO_DATA=record
     cbSize:DWord;
     ClassGuid:TGuid;
     DevInst:DWord;
     Reserved:LongInt;
    end;

    PSP_DEVINFO_DATA=^SP_DEVINFO_DATA;
    PGuid=^TGuid;

    const
    DIGCF_ALLCLASSES=$00000004;
    DIGCF_PRESENT=$00000002;
    DIGCF_PROFILE=$00000008;
    DIGCF_DEVICEINTERFACE=$00000010;
    SPDRP_DEVICEDESC=$00000000;


    function SetupDiCreateDeviceInfoList(ClassGuid:PGuid;
     hwndParent:cardinal):Pointer; stdcall;
     external 'setupapi.dll';
    function SetupDiGetClassDevsExA(ClassGuid:PGuid; Enumerator:PChar;
     hwndParent:cardinal; Flags:DWord; DeviceInfoSet:Pointer;
     MachineName:PChar; Reserved:DWord):Pointer; stdcall;
     external 'setupapi.dll';
    function SetupDiGetDeviceRegistryPropertyA(DeviceInfoSet:Pointer;
     DeviceInfoData:PSP_DEVINFO_DATA; Property_:DWord; PropertyRegDataType:Pointer;
     PropertyBuffer:Pointer; PropertyBufferSize:cardinal; RequiredSize:Pointer):
     longbool; stdcall;
     external 'setupapi.dll';
    function SetupDiEnumDeviceInfo(DeviceInfoSet:Pointer; MemberIndex:DWord;
     var DeviceInfoData:SP_DEVINFO_DATA):longbool; stdcall;
     external 'setupapi.dll';
    function SetupDiDestroyDeviceInfoList(DeviceInfoSet:Pointer):longbool; stdcall;
     external 'setupapi.dll';


    procedure TForm1.Button2Click(Sender: TObject);
    var
    hAllDevices, hDev:Pointer;
    k:Integer;
    Data:SP_DEVINFO_DATA;
    dwInfo, dwRequired, sz:DWord;
    buf:PChar;
    g:TGuid;
    s:string;
    begin
    hDev:=SetupDiCreateDeviceInfoList(nil, 0);
    k:=GetLastError;
    ShowMessage(IntToStr(k));
    g:=StringToGuid('{4D36E96D-E325-11CE-BFC1-08002BE10318}');//это гуид модемов, тебе надо найти в MSDN гуид ИК-портов
    hAllDevices:=SetupDiGetClassDevsExA(@g, nil, 0, DIGCF_PRESENT {or DIGCF_ALLCLASSES},
    hDev, nil, 0);
    k:=GetLastError;
    ShowMessage(IntToStr(k));
    FillChar(Data, SizeOf(SP_DEVINFO_DATA), 0);
    Data.cbSize:=SizeOf(SP_DEVINFO_DATA);
    dwInfo:=0;
    If not SetupDiEnumDeviceInfo(hAllDevices, dwInfo, Data) then
    ShowMessage('Error');
    While SetupDiEnumDeviceInfo(hAllDevices, dwInfo, Data) do
    begin
    dwRequired:=0;
    If (not SetupDiGetDeviceRegistryPropertyA(hAllDevices, @Data,
     SPDRP_DEVICEDESC,
     nil, nil, 0, @dwRequired)) and (GetLastError=ERROR_INSUFFICIENT_BUFFER) then
    begin
     sz:=dwRequired;
     buf:=StrAlloc(100);
     FillChar(buf^, 100, #0);
     If SetupDiGetDeviceRegistryPropertyA(hAllDevices, @Data, SPDRP_DEVICEDESC,
     nil, @buf^, 100, @dwRequired) then
     begin
     s:=string(buf);
     Memo1.Lines.Add(s);
     end;
     StrDispose(buf);
    end;
    inc(dwInfo);
    end;
    SetupDiDestroyDeviceInfoList(hAllDevices);
    SetupDiDestroyDeviceInfoList(hDev);
    end;
    В твоем случае надо заменить только гуид, или для отображения всего оборудования вместо гуид поставь nil
     
  3. Tsnok

    Tsnok Гость

    Репутация:
    0
    Спасибо!
    Все работает.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей