我尝试了这里的所有答案:
在Java程序中打开Windows虚拟键盘 https://stackoverflow.com/questions/4948420/open-the-windows-virtual-keyboard-in-a-java-program
我执行了Runtime.getRuntime().exec("cmd /c osk");
我无法按照建议关闭它,我需要在一些过程后关闭它。
I tried:
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
我认为有点晚了,但我设法像您一样使用 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 杀死它对我来说不起作用,所以我必须以本机方式执行此操作。我希望这也适合你。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)