Windows で仮想キーボードを表示するかどうかを自動的に決定するにはどうすればよいですか?
アプリケーションにジェスチャーと仮想キーボードのサポートを追加していますが、実際のキーボードが接続されているときに仮想キーボードを表示したくありません...
ありがとうございました!
更新: RRUZ (win8 タブレットを持っていない) から有益な提案がありましたが、win8 タブレットが期待どおりに動作しないため、うまくいきませんでした。
To get the number of keyboards present in the system you can use the Win32_Keyboard WMI class.
Try this sample
{$APPTYPE CONSOLE}
uses
SysUtils,
ActiveX,
ComObj,
Variants;
function GetKeyboardCount : integer;
var
FSWbemLocator : OLEVariant;
FWMIService : OLEVariant;
FWbemObjectSet: OLEVariant;
FWbemObject : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
begin;
Result:=0;
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
FWbemObjectSet:= FWMIService.ExecQuery('SELECT DeviceID FROM Win32_Keyboard','WQL', $00000020);
oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
while oEnum.Next(1, FWbemObject, iValue) = 0 do
begin
Inc(Result);
FWbemObject:=Unassigned;
end;
end;
begin
try
CoInitialize(nil);
try
Writeln(Format('Keyboards %d', [GetKeyboardCount]));
finally
CoUninitialize;
end;
except
on E:EOleException do
Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
on E:Exception do
Writeln(E.Classname, ':', E.Message);
end;
Writeln('Press Enter to exit');
Readln;
end.
私の経験では、これは現実の世界では役に立ちません: 私の Win8 タブレットでは、デバイス マネージャーは PS/2 キーボード (!!) を報告するので、このような関数はキーボードがないことを決して教えてくれません。– ギエル 9時間前