是可以禁用使用Java的Windows键

是可以禁用Windows键和Alt +选项卡使用Java …

你可以使用JNA来实现这一点。

在类path中包含jna.jar和platform.jar,并创build以下类。 此类禁用左窗口键(0x5B)和右窗口键(0x5C)。 所以你可以在switch case语句中添加其他代码。

在应用程序启动时尽快调用KeyHook.blockWindowsKey()。 另一方面,在应用程序closures时调用unblockWindowsKey()。

由于代码仅在isWindows()为true时执行,所以即使在另一个操作系统上运行,也可以始终调用KeyHook.blockWindowsKey()。

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); } }