我正在为Windows 8.1平板电脑开发一个应用程序(使用Java& eclipse RCP)。
我希望Windows在文本字段获得焦点时自动打开OSK,并在焦点丢失时再次关闭它。这适用于某些内置窗口功能,例如搜索(从屏幕右侧滑入并显示搜索字段)
我试图以编程方式打开OSK,但它无法按预期工作。 OSK已启动但在一个窗口中,该窗口从输入字段中删除焦点,因此键入的字符无法到达输入。
OSK启动如下
cmd /c c:WINDOWS/system32/osk.exe
也许还有另一种方法可以启动它,以便输入字段不会失去焦点。
更新
我设法使用
以编程方式打开键盘Runtime.getRuntime().exec(path + "tabtip.exe")
但仅在之后才以管理员身份运行应用。为什么我可以从命令行运行tabtip但不能从我的应用程序启动它?
答案 0 :(得分:0)
命名空间Windows.ApplicationModel.Search.SearchPane有一个名为ShowOnKeyboardInput的属性。
但是,这用于通过搜索超级按钮进行搜索。
答案 1 :(得分:0)
这是我的解决方案似乎工作正常。我曾希望Windows 8可以自动执行此操作但我无法找到方法。
text.addFocusListener(new FocusListener()
{
@Override
public void focusLost(FocusEvent arg0)
{
LogUtil.logInfo("Closing OSK");
try
{
if(Settings.getBoolean(Settings.OSK_USETABTIP)) {
Runtime.getRuntime().exec("cmd /c taskkill /IM tabtip.exe");
} else {
Runtime.getRuntime().exec("cmd /c taskkill /IM osk.exe");
}
}
catch (IOException e)
{
LogUtil.logError(e.toString());
}
}
@Override
public void focusGained(FocusEvent arg0)
{
try
{
String sysroot = System.getenv("SystemRoot");
if(Settings.getBoolean(Settings.OSK_USETABTIP)) {
LogUtil.logInfo("Opening TabTip");
ProcessBuilder pb = new ProcessBuilder("C:/pathtotabtip/tabtip.exe");
pb.start();
} else {
LogUtil.logInfo("Opening OSK");
ProcessBuilder pb = new ProcessBuilder(sysroot + "/system32/osk.exe");
pb.start();
}
}
catch (Exception e)
{
LogUtil.logError(e.toString());
}
}
});
注意强>
taskkill tabtip.exe
仅在Windows 8上以管理员身份运行时才有效。从cmd
开始不需要这些权限。为什么?!? : - (