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...