Hello,
I'm coding an application for the daughter of a friend, and need to swtich off the win(super), alt, and ctrl keys. I got some native code from the net, but it seams its not working on Win 7. The program works well, no error messages or anything of that sort, the only problem is, the alt, ctrl, and win(super) key are still working.
The code below would be called in the key event handlers, but doesn't do the job as required. It was only tested on win 7 by the client. Since I don't have windows of any version atm, I can't test it to know how it works on other versions.
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; 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); } }
I tried changing the last part of the code
to
But that didn't work as well.