1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
unit WMI_Win32_KeyboardInfo;
interface
uses
SysUtils, ActiveX, ComObj, Variants, System.Generics.Collections, FMX.Dialogs, System.UITypes;
function PhysicalKeyboardEnabled: Boolean;
implementation
type
TWMI_KeyboardInfo = record
Description, DeviceID, PNPDeviceID: string;
end;
TWMI_KeyboardInfoList = TList<TWMI_KeyboardInfo>;
// La classe Win32_Keyboard représente un clavier installé sur un système Win32.
// Exemple*: Un clavier Microsoft Natural(R) Keyboard
procedure GetWin32_KeyboardInfo(WMI_KeyboardInfoList: TWMI_KeyboardInfoList);
const
WbemUser = '';
WbemPassword = '';
WbemComputer = 'localhost';
wbemFlagForwardOnly = $00000020;
var
FSWbemLocator: OLEVariant;
FWMIService: OLEVariant;
FWbemObjectSet: OLEVariant;
FWbemObject: OLEVariant;
oEnum: IEnumvariant;
iValue: LongWord;
K: TWMI_KeyboardInfo;
begin;
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);
FWbemObjectSet := FWMIService.ExecQuery('SELECT * FROM Win32_Keyboard', 'WQL', wbemFlagForwardOnly);
oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumvariant;
while oEnum.Next(1, FWbemObject, iValue) = 0 do
begin
K.Description := String(FWbemObject.Description);
K.DeviceID := String(FWbemObject.DeviceID);
K.PNPDeviceID := String(FWbemObject.PNPDeviceID);
WMI_KeyboardInfoList.Add(K);
FWbemObject := Unassigned;
end;
end;
function PhysicalKeyboardEnabled: Boolean;
var
WMI_KeyboardInfoList: TWMI_KeyboardInfoList;
Kb: TWMI_KeyboardInfo;
begin
Result := False;
WMI_KeyboardInfoList := TWMI_KeyboardInfoList.Create;
GetWin32_KeyboardInfo(WMI_KeyboardInfoList);
for Kb in WMI_KeyboardInfoList do
begin
if Pos('USB', Kb.PNPDeviceID) > 0 then
begin
Result := True;
Break;
end;
end;
WMI_KeyboardInfoList.Free;
end;
end. |
Partager