Java屏蔽Windows按键代码

来源:互联网 发布:ipad看图片软件 编辑:程序博客网 时间:2024/06/05 11:57

用到的包有

platform.jar

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 Test  {      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);    }    //测试    public static void main(String[] args) {    unblockWindowsKey();}  }