Java屏蔽Windows按鍵代碼

833p 9年前發布 | 2K 次閱讀 Java

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

}</pre>

 本文由用戶 833p 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!