Можно через SetupAPI.
| Код | const SetupApiModuleName = 'SetupApi.dll';
DIGCF_DEFAULT = $00000001; // only valid with DIGCF_DEVICEINTERFACE DIGCF_PRESENT = $00000002; DIGCF_ALLCLASSES = $00000004; DIGCF_PROFILE = $00000008; DIGCF_DEVICEINTERFACE = $00000010;
SPDRP_DEVICEDESC = $00000000; // DeviceDesc (R/W) SPDRP_HARDWAREID = $00000001; // HardwareID (R/W) SPDRP_COMPATIBLEIDS = $00000002; // CompatibleIDs (R/W) SPDRP_UNUSED0 = $00000003; // unused SPDRP_SERVICE = $00000004; // Service (R/W) SPDRP_UNUSED1 = $00000005; // unused SPDRP_UNUSED2 = $00000006; // unused SPDRP_CLASS = $00000007; // Class (R--tied to ClassGUID) SPDRP_CLASSGUID = $00000008; // ClassGUID (R/W) SPDRP_DRIVER = $00000009; // Driver (R/W) SPDRP_CONFIGFLAGS = $0000000A; // ConfigFlags (R/W) SPDRP_MFG = $0000000B; // Mfg (R/W) SPDRP_FRIENDLYNAME = $0000000C; // FriendlyName (R/W) SPDRP_LOCATION_INFORMATION = $0000000D; // LocationInformation (R/W) SPDRP_PHYSICAL_DEVICE_OBJECT_NAME = $0000000E; // PhysicalDeviceObjectName (R) SPDRP_CAPABILITIES = $0000000F; // Capabilities (R) SPDRP_UI_NUMBER = $00000010; // UiNumber (R) SPDRP_UPPERFILTERS = $00000011; // UpperFilters (R/W) SPDRP_LOWERFILTERS = $00000012; // LowerFilters (R/W) SPDRP_BUSTYPEGUID = $00000013; // BusTypeGUID (R) SPDRP_LEGACYBUSTYPE = $00000014; // LegacyBusType (R) SPDRP_BUSNUMBER = $00000015; // BusNumber (R) SPDRP_ENUMERATOR_NAME = $00000016; // Enumerator Name (R) SPDRP_SECURITY = $00000017; // Security (R/W, binary form) SPDRP_SECURITY_SDS = $00000018; // Security (W, SDS form) SPDRP_DEVTYPE = $00000019; // Device Type (R/W) SPDRP_EXCLUSIVE = $0000001A; // Device is exclusive-access (R/W) SPDRP_CHARACTERISTICS = $0000001B; // Device Characteristics (R/W) SPDRP_ADDRESS = $0000001C; // Device Address (R) SPDRP_UI_NUMBER_DESC_FORMAT = $0000001E; // UiNumberDescFormat (R/W) SPDRP_MAXIMUM_PROPERTY = $0000001F; // Upper bound on ordinals
type HDEVINFO = Pointer; SP_DEVINFO_DATA = packed record cbSize: DWORD; ClassGuid: TGUID; DevInst: DWORD; // DEVINST handle Reserved: WORD; end;
function SetupDiClassGuidsFromNameEx(const ClassName: PAnsiChar; ClassGuidList: PGUID; ClassGuidListSize: DWORD; var RequiredSize: DWORD; const MachineName: PAnsiChar; Reserved: Pointer): LongBool; stdcall;
function SetupDiGetClassDevs(ClassGuid: PGUID; const Enumerator: PChar; hwndParent: HWND; Flags: DWORD): HDEVINFO; stdcall;
function SetupDiEnumDeviceInfo(DeviceInfoSet: HDEVINFO; MemberIndex: DWORD; var DeviceInfoData: SP_DEVINFO_DATA): LongBool; stdcall;
function SetupDiGetDeviceRegistryProperty(DeviceInfoSet: HDEVINFO; var DeviceInfoData: SP_DEVINFO_DATA; Property_: DWORD; PropertyRegDataType: PDWORD; PropertyBuffer: PBYTE; PropertyBufferSize: DWORD; RequiredSize: PDWORD): LongBool; stdcall;
function SetupDiDestroyDeviceInfoList(DeviceInfoSet: HDEVINFO): LongBool; stdcall;
implementation
function SetupDiClassGuidsFromNameEx; external SetupApiModuleName name 'SetupDiClassGuidsFromNameExA'; function SetupDiGetClassDevs; external SetupApiModuleName name 'SetupDiGetClassDevsA'; function SetupDiEnumDeviceInfo; external SetupApiModuleName name 'SetupDiEnumDeviceInfo'; function SetupDiGetDeviceRegistryProperty; external SetupApiModuleName name 'SetupDiGetDeviceRegistryPropertyA'; function SetupDiDestroyDeviceInfoList; external SetupApiModuleName name 'SetupDiDestroyDeviceInfoList';
function FindDeviceByName(ADevName: string; APropertyFlags, AFlags: Cardinal; AStringList: TStrings): Boolean; var DevInfoData: SP_DEVINFO_DATA; hDevInfo1: Pointer; I, DataT, Buffersize: DWORD; Buffer: PAnsiChar; LGUID: TGUID; begin Result := False;
SetupDiClassGuidsFromNameEx(PChar(ADevName), @LGUID, 1, Buffersize, '', nil);
hDevInfo1 := SetupDiGetClassDevs(@LGUID, nil, HWND(nil), AFlags);
try DevInfoData.cbSize := SizeOf(SP_DEVINFO_DATA); I := 0; Buffersize := 500; GetMem(Buffer, Buffersize); try while SetupDiEnumDeviceInfo(hDevInfo1, I, DevInfoData) do begin SetupDiGetDeviceRegistryProperty(hDevInfo1, DevInfoData, APropertyFlags, @DataT, PByte(Buffer), Buffersize, nil);
AStringList.Add(Buffer);
Inc(I); end; finally FreeMem(Buffer); end; finally SetupDiDestroyDeviceInfoList(hDevInfo1); end; end;
|
| Код | procedure TForm1.Button1Click(Sender: TObject); begin FindDeviceByName('display', SPDRP_DEVICEDESC, DIGCF_PRESENT, Memo1.Lines);
{первый параметр имя устройства в твоем случае mouse, keyboard, display} {второй параметр, какие устройства выводить, если к примеру написать DIGCF_PRESENT or DIGCF_ALLCLASSES то получишь все девайсы, а не только тот что запросил} {Третий параметр, что из описания данного устройства получить сейчас выводится название.}
end;
|
|