是否可以使用java禁用Windows键 [英] is it is possible to disable the windows keys using java
问题描述
是否可以使用java禁用windows键和alt + tab ...
is it is possible to disable the windows keys and alt+tab using java ...
推荐答案
你可以使用JNA实现这一点。
You can use JNA to achieve this.
在类路径中包含jna.jar和platform.jar并创建以下类。
此类禁用左窗口密钥(0x5B)和右窗口密钥(0x5C)。因此,您可以在switch case语句中添加其他代码。
Include jna.jar and platform.jar on the classpath and create the following class. This class disables left windows key (0x5B) and right windows key (0x5C). So you can add other codes at the switch case statement.
在应用程序启动时尽快调用KeyHook.blockWindowsKey()。
另一方面,在app shutdown时调用unblockWindowsKey()。
Call KeyHook.blockWindowsKey() as soon as possible when your application starts. On the other side, call unblockWindowsKey() at app shutdown.
由于代码仅在isWindows()为true时执行,因此您始终可以调用KeyHook .blockWindowsKey(),即使在另一个操作系统上运行。
Since the code is only executed when isWindows() is true, you can always call KeyHook.blockWindowsKey(), even when running on another OS.
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef.HMODULE;
import com.sun.jna.platform.win32.WinDef.LRESULT;
import com.sun.jna.platform.win32.WinDef.WPARAM;
import com.sun.jna.platform.win32.WinUser.HHOOK;
import com.sun.jna.platform.win32.WinUser.KBDLLHOOKSTRUCT;
import com.sun.jna.platform.win32.WinUser.LowLevelKeyboardProc;
import com.sun.jna.platform.win32.WinUser.MSG;
public class KeyHook {
private static HHOOK hhk;
private static LowLevelKeyboardProc keyboardHook;
private static User32 lib;
public static void blockWindowsKey() {
if (isWindows()) {
new Thread(new Runnable() {
@Override
public void run() {
lib = User32.INSTANCE;
HMODULE hMod = Kernel32.INSTANCE.GetModuleHandle(null);
keyboardHook = new LowLevelKeyboardProc() {
public LRESULT callback(int nCode, WPARAM wParam, KBDLLHOOKSTRUCT info) {
if (nCode >= 0) {
switch (info.vkCode){
case 0x5B:
case 0x5C:
return new LRESULT(1);
default: //do nothing
}
}
return lib.CallNextHookEx(hhk, nCode, wParam, info.getPointer());
}
};
hhk = lib.SetWindowsHookEx(13, keyboardHook, hMod, 0);
// This bit never returns from GetMessage
int result;
MSG msg = new MSG();
while ((result = lib.GetMessage(msg, null, 0, 0)) != 0) {
if (result == -1) {
break;
} else {
lib.TranslateMessage(msg);
lib.DispatchMessage(msg);
}
}
lib.UnhookWindowsHookEx(hhk);
}
}).start();
}
}
public static void unblockWindowsKey() {
if (isWindows() && lib != null) {
lib.UnhookWindowsHookEx(hhk);
}
}
public static boolean isWindows(){
String os = System.getProperty("os.name").toLowerCase();
return (os.indexOf( "win" ) >= 0);
}
}
这篇关于是否可以使用java禁用Windows键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!