以编程方式为Windows屏幕键盘设置数字布局

时间:2017-03-14 08:35:58

标签: windows javafx

现在,我正在尝试以编程方式设置Windows 8.1屏幕键盘的数字布局,也称为"虚拟键盘"或"软输入面板(SIP)"。

numeric keyboard

它不是我可以设置InputScope的WPF解决方案,但我在Windows 8.1平板电脑上使用JavaFX应用程序。我知道JavaFX有一个内置的屏幕键盘,但是需要使用metro风格的SIP(tabtip.exe)。

我目前的解决方案是这样的;我模拟键盘左下角的鼠标点击"& 123"按钮是C#。将此代码段编译为.exe并从JavaFX调用它,例如当具有数字输入的TextField获得焦点时。这有明显的缺点:

1)这是hacky

2)如果键盘处于浮动状态并移动或其他一些屏幕分辨率到位,则点击坐标可能不在正确的位置。

3)应用程序需要提升权限才能在SIP上生成鼠标事件

有什么更好的方法可以做到这一点?

我尝试使用Spy ++分析并找到了一个" TipSkinEvent"当我按下"& 123"按钮。

基于this post,我提出了这个问题:

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#代码)这样​​可以正常工作(即使没有提升权限!)。基于this post

旁注:我也尝试使用JNA跳过.exe调用但没有成功。

0 个答案:

没有答案