现在,我试图以编程方式对Windows 8.1屏幕键盘(也称为“虚拟键盘”或“软input面板(SIP)”)的数字布局进行操作。
这不是一个可以设置InputScope的WPF解决scheme,但是我在Windows 8.1平板电脑上使用了JavaFX应用程序。 我知道JavaFX有一个内置的屏幕键盘,但是要调用metro样式的SIP(tabtip.exe)。
我目前的解决scheme是这样的; 我模拟鼠标点击键盘左下angular的“&123”button与C#。 将这个代码片段编译成一个.exe文件,并从JavaFX调用它,例如当一个带有数字input的TextField接收到焦点时。 这有明显的缺点:
1)这是hacky
2)如果键盘处于浮动状态并移动或其他屏幕分辨率到位,则点击坐标可能不在正确的位置。
3)应用程序需要提升的权限来在SIP上产生鼠标事件
什么是更好的方法来做到这一点?
我试过使用Spy ++进行分析,并在按下“&123”button时发现“TipSkinEvent”。
基于 我想出了这个:
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来改变布局,如上图所示? (在Windowsregistry中设置数字标志会产生不同的布局 – 也需要pipe理员权限来终止并重新启动tabtip.exe)
为了切换键盘的可见性,我使用了一种类似的方法(将C#代码编译成一个.exe)。这个工作正常(即使没有提升权限!)。 基于
一个旁注:我也试图使用JNA跳过.exe调用没有成功。