1

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時間前

4

0 に答える 0