【问题标题】:How to open and close virtual keyboard using Java如何使用 Java 打开和关闭虚拟键盘
【发布时间】:2017-12-14 07:37:46
【问题描述】:

我从这里尝试了所有答案:

open the Windows virtual keyboard in a Java program

我执行了Runtime.getRuntime().exec("cmd /c osk");,但我无法按照建议关闭它,我需要在一些进程后关闭它。

我试过了:

import java.io.IOException;

public class ShowVirtualKeyboard{

    public static void main(String argv[]) throws IOException {
    String sysroot = System.getenv("SystemRoot");
    Process proc = Runtime.getRuntime().exec(sysroot + "/system32/osk.exe");
}
}

我得到了错误

Cannot run program "C://Windows/system32/osk.exe": CreateProcess error=740, The requested operation requires elevation

【问题讨论】:

标签: java windows virtual-keyboard


【解决方案1】:

我认为有点晚了,但我设法像您一样使用 cmd 和 JNA(Java Native Access)库打开和关闭虚拟键盘(TabTip.exe):

打开键盘:

// Java

String command = "cmd /c \"C:\\Program Files\\Common Files\\Microsoft Shared\\ink\\TabTip.exe\"";
Process = Runtime.getRuntime().exec(command);
process.waitFor();
process.destroy();

// Kotlin

val command = "cmd /c \"C:\\Program Files\\Common Files\\Microsoft Shared\\ink\\TabTip.exe\""
val process = Runtime.getRuntime().exec(command)
process.waitFor()
process.destroy()

关闭它:

//Java

String KEYBOARD_CLASS_NAME = "IPTIP_Main_Window";
int WM_SYS_COMMAND = 0x0112;
WinDef.WPARAM SC_CLOSE = WinDef.WPARAM(0xF060);
WinDef.HWND handle = User32.INSTANCE.FindWindow(KEYBOARD_CLASS_NAME, "");
if (handle != null) {
    User32.INSTANCE.SendMessage(handle, WM_SYS_COMMAND, SC_CLOSE, WinDef.LPARAM(0));
}

//Kotlin

val KEYBOARD_CLASS_NAME = "IPTIP_Main_Window"
val WM_SYS_COMMAND = 0x0112
val SC_CLOSE = WinDef.WPARAM(0xF060)
val handle = User32.INSTANCE.FindWindow(KEYBOARD_CLASS_NAME, "")
if (handle != null) {
    User32.INSTANCE.SendMessage(handle, WM_SYS_COMMAND, SC_CLOSE, WinDef.LPARAM(0))
}

关闭进程或从 cmd 杀死它对我不起作用,所以我必须以本机方式进行。我希望这对你也有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    相关资源
    最近更新 更多