现在,我正在尝试以编程方式设置Windows 8.1屏幕键盘的数字布局,也称为"虚拟键盘"或"软输入面板(SIP)"。
它不是我可以设置InputScope的WPF解决方案,但我在Windows 8.1平板电脑上使用JavaFX应用程序。我知道JavaFX有一个内置的屏幕键盘,但是需要使用metro风格的SIP(tabtip.exe)。
我目前的解决方案是这样的;我模拟键盘左下角的鼠标点击"& 123"按钮是C#。将此代码段编译为.exe并从JavaFX调用它,例如当具有数字输入的TextField获得焦点时。这有明显的缺点:
1)这是hacky
2)如果键盘处于浮动状态并移动或其他一些屏幕分辨率到位,则点击坐标可能不在正确的位置。
3)应用程序需要提升权限才能在SIP上生成鼠标事件
有什么更好的方法可以做到这一点?
我尝试使用Spy ++分析并找到了一个" TipSkinEvent"当我按下"& 123"按钮。
void ToggleNum()
{
HWND hwndInputPanel = ::FindWindow(_TEXT("IPTip_Main_Window"), NULL);
DWORD WM_NUM_BUTTON_PRESSED = ::RegisterWindowMessage(_TEXT("TipSkinEvent"));
PostMessage(hwndInputPanel, WM_NUM_BUTTON_PRESSED, 0, 0);
}
这不起作用,不幸的是我不是Windows编程方面的专家,因此我不知道在这里需要做些什么。你能告诉我代码片段有什么问题,或者更改布局的正确API是什么,如上图所示? (在Windows注册表中设置数字标志会产生不同的布局 - 并且还需要管理员权限才能终止并重新启动tabtip.exe)
要切换键盘可见性我使用类似的方法(调用编译成.exe的C#代码)这样可以正常工作(即使没有提升权限!)。基于
旁注:我也尝试使用JNA跳过.exe调用但没有成功。