[Java] Java屏蔽Windows按键代码 →→→→→进入此内容的聊天室

来自 , 2021-04-07, 写在 Java, 查看 116 次.
URL http://www.code666.cn/view/d6525aa8
  1. import com.sun.jna.platform.win32.Kernel32;
  2. import com.sun.jna.platform.win32.User32;
  3. import com.sun.jna.platform.win32.WinDef.HMODULE;
  4. import com.sun.jna.platform.win32.WinDef.LRESULT;
  5. import com.sun.jna.platform.win32.WinDef.WPARAM;
  6. import com.sun.jna.platform.win32.WinUser.HHOOK;
  7. import com.sun.jna.platform.win32.WinUser.KBDLLHOOKSTRUCT;
  8. import com.sun.jna.platform.win32.WinUser.LowLevelKeyboardProc;
  9. import com.sun.jna.platform.win32.WinUser.MSG;
  10.  
  11. public class KeyHook {
  12.  
  13.     private static HHOOK hhk;
  14.     private static LowLevelKeyboardProc keyboardHook;
  15.     private static User32 lib;
  16.  
  17.     public static void blockWindowsKey() {
  18.         if (isWindows()) {
  19.             new Thread(new Runnable() {
  20.  
  21.                 @Override
  22.                 public void run() {
  23.                     lib = User32.INSTANCE;
  24.                     HMODULE hMod = Kernel32.INSTANCE.GetModuleHandle(null);
  25.                     keyboardHook = new LowLevelKeyboardProc() {
  26.  
  27.                         public LRESULT callback(int nCode, WPARAM wParam, KBDLLHOOKSTRUCT info) {
  28.                             if (nCode >= 0) {
  29.                                 switch (info.vkCode) {
  30.                                     case 0x5B:
  31.                                     case 0x5C:
  32.                                         return new LRESULT(1);
  33.                                     default: //do nothing    
  34.                                 }
  35.                             }
  36.                             return lib.CallNextHookEx(hhk, nCode, wParam, info.getPointer());
  37.                         }
  38.                     };
  39.                     hhk = lib.SetWindowsHookEx(13, keyboardHook, hMod, 0);
  40.                     int result;
  41.                     MSG msg = new MSG();
  42.                     while ((result = lib.GetMessage(msg, null, 0, 0)) != 0) {
  43.                         if (result == -1) {
  44.                             break;
  45.                         } else {
  46.                             lib.TranslateMessage(msg);
  47.                             lib.DispatchMessage(msg);
  48.                         }
  49.                     }
  50.                     lib.UnhookWindowsHookEx(hhk);
  51.                 }
  52.             }).start();
  53.         }
  54.     }
  55.  
  56.     public static void unblockWindowsKey() {
  57.         if (isWindows() && lib != null) {
  58.             lib.UnhookWindowsHookEx(hhk);
  59.         }
  60.     }
  61.  
  62.     public static boolean isWindows() {
  63.         String os = System.getProperty("os.name").toLowerCase();
  64.         return (os.indexOf("win") >= 0);
  65.     }
  66. }
  67. //java/268

回复 "Java屏蔽Windows按键代码"

这儿你可以回复上面这条便签

captcha