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 USB Devices suchen, editieren (https://www.delphipraxis.net/121293-usb-devices-suchen-editieren.html)

WS1976 25. Sep 2008 06:42


USB Devices suchen, editieren
 
Hallo,

Problem:
wir suchen seit einiger Zeit eine Möglichkeit festzustellen mit wem eine serielle Schnittstelle verbunden ist.
Da uns diese nicht gelungen ist habe ich jetzt einen anderen Ansatz gefunden.

Frage:
Gibt es irgendeine Möglichkeit alle vorhandenen USB Devices anzuzeigen bzw. zu ändern oder zu löschen?
Mir kommt es hautsächlich auf die Devices an, die momentan nicht angeschlossen sind.

Beispiel:
Wir schliessen einen USB seriell Konverter an den PC an. Com9 ist im Gerätemanager zu sehen.
Entfernen wir das Gerät verschwindet die Schnittstelle aus dem Gerätemanger sie ist aber nach wie vor besetzt.
Suchen in der Registry bringt nichts. ( Alle Com9 Einträge wurden bei einer WinXP Schrottinstallation gelöscht. Com9 immer noch da).

Wir möchten das Problem mit D7 oder RAD Studio lösen.

Vielen Dank im Vorraus!
Rainer

Viktorii 25. Sep 2008 08:05

Re: USB Devices suchen, editieren
 
Hallo,

Hatte einen ähnlichen Anwendungsfall. Es gibt von JEDI eine USBView Demo. Das ist sehr aufschlussreich.

Ich habe es dann so gemacht:

Delphi-Quellcode:
function GetNumberOfConnectedBFs(): Byte;
const
  ConnectorGUID = '{AB03120F-995C-4A47-9BB6-9549EC8945D2}';      
var
  GUID                 : PGUID;
  Buffer               : array[0..1023] of TCHAR;
  Descriptionstr       : string;
  PnPHandle            : HDEVINFO;
  DevData              : TSPDevInfoData;
  DeviceInterfaceData  : TSPDeviceInterfaceData;
  Success              : LongBool;
  BufSize              : DWORD;
  DevNumber            : Integer;


begin
  Result := 0;

  LoadSetupApi;
  LoadConfigManagerApi;
  GetMem(GUID, SizeOf(TGUID));
  GUID^ := StringToGUID(ConnectorGUID);
  SetupDiGetClassDescription(GUID^, @Buffer[0], Length(Buffer), BufSize);
  Descriptionstr := PTSTR(@Buffer[0]);

  PnPHandle := SetupDiGetClassDevs(GUID, nil, 0, DIGCF_PRESENT);
  if PnPHandle = Pointer(INVALID_HANDLE_VALUE) then
  begin
    FreeMem(GUID);
    Exit;
  end;

  DevNumber := 0;

  repeat
    DeviceInterfaceData.cbSize := SizeOf(TSPDeviceInterfaceData);
    DevData.cbSize := SizeOf(DevData);
    Success := SetupDiEnumDeviceInfo(PnPHandle, DevNumber, DevData);
    if Success then
      begin
        Inc(DevNumber);
      end;
  until not Success;

  SetupDiDestroyDeviceInfoList(PnPHandle);

  UnloadConfigManagerApi;
  UnloadSetupApi;

  Result := DevNumber;
end;
Funktioniert eigentlich recht gut.
Müsstest eigentlich nur die entsprechende ConnectorGUID einfügen...

WS1976 25. Sep 2008 14:04

Re: USB Devices suchen, editieren
 
Hallo,

vielen Dank für die Antwort. Leider nützt mir das überhaupt nichts weil ich das Gerät nicht kenne.
Ich muss alle Devices suchen, auflisten und sie eventuell auch "killen" können.

Grüsse
Rainer


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 Uhr.

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