Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Virtual COM Port ermitteln (https://www.delphipraxis.net/88526-virtual-com-port-ermitteln.html)

ulrich.b 16. Mär 2007 17:39


Virtual COM Port ermitteln
 
Vorerst: ich weiss, dass es diesen Thread gibt.

Ich möchte unter allen COM Ports einen bestimmten virtuellen USB COM Port ermitteln (zB. selektiert über die VID und PID).

In der MSDN ist ja fast nichts zu finden über die USB Device Classes zu der dieser auch gehört (CDC: Communication Device Class) ...

gucky 16. Mär 2007 18:22

Re: Virtual COM Port ermitteln
 
Hi also ich suche bei den COm Devices mit der nachfolgenden
Funktion nach einem bestimmten Device. Kannst die Funktion ja für deine
Bedürfnisse abändern. Du must die setupapi und cfgmgr32 einbinden.

Gruß Gucky

Delphi-Quellcode:
function getDevice: string;
const
  Anschlguid = '{4D36E978-E325-11CE-BFC1-08002BE10318}';
var
  GUID: PGUID;
  Buffer: array[0..1023] of TCHAR;
  NameBuffer: array[0..1023] of Char;
  Descriptionstr: string;
  PnPHandle: HDEVINFO;
  DevData: TSPDevInfoData;
  DeviceInterfaceData: TSPDeviceInterfaceData;
  Success: LongBool;
  BufSize: DWORD;
  Devn: Integer;
  S: string;
  aguid: Tguid;
begin
  LoadSetupApi;
  LoadConfigManagerApi;
  GetMem(GUID, SizeOf(TGUID));
  guid^ := StringToGUID(Anschlguid);
  SetupDiGetClassDescription(GUID^, @Buffer[0], Length(Buffer), BufSize);
  Descriptionstr := PTSTR(@Buffer[0]);

  aguid := Guid^;
  PnPHandle := SetupDiGetClassDevs(@AGUID, nil, 0, DIGCF_PRESENT);
  //PnPHandle := SetupDiGetClassDevs(@AGUID, nil, 0, 0);
  if PnPHandle = Pointer(INVALID_HANDLE_VALUE) then
    begin
      FreeMem(GUID);
      Result := '';
      Exit;
    end;
  Devn := 0;
  repeat
    DeviceInterfaceData.cbSize := SizeOf(TSPDeviceInterfaceData);
    DevData.cbSize := SizeOf(DevData);
    Success := SetupDiEnumDeviceInfo(PnPHandle, Devn, DevData);
    if Success then
      begin
        S := GetRegistryPropertyString(PnPHandle, DevData, SPDRP_FRIENDLYNAME);
        if S = '' then
          S := GetRegistryPropertyString(PnPHandle, DevData, SPDRP_DEVICEDESC);

        if Pos(UMtsappli, s) > 0 then
          begin
            Result := StrBetween(s, '(', ')');
          end;

        Inc(Devn);
      end;
  until not Success;
  SetupDiDestroyDeviceInfoList(PnPHandle);

  UnloadConfigManagerApi;
  UnloadSetupApi;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz