Java屏蔽Windows按键代码详解编程语言

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

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/10901.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论