如何用JAVA做禁用键盘,鼠标,任务管理器等任务

您所在的位置:网站首页 键盘怎样打开任务管理器 如何用JAVA做禁用键盘,鼠标,任务管理器等任务

如何用JAVA做禁用键盘,鼠标,任务管理器等任务

2024-07-02 23:23:32| 来源: 网络整理| 查看: 265

最近公司要求对软件做一个锁屏功能,要求屏蔽ALT+F4,ALT+TAB,CTRL+ALT+DEL等快捷键,屏蔽任务管理器。我查了一些资料,发现都说要用jni去调用C写的文件,这对不懂C的我来说,真是一个困难的事情。JAVA又无法直接操作底层程序,难道没办法了吗?这时候,我发现了一个开源项目:SWT Win32 Extension。网上有详细的例子,教程和文档,是个中国人做的哦,功能还是比较强大的,不过只能在WINDOWS下,有兴趣可以去看看。其实它也是调用的底层的东西,不过已经全都封装好了,这对广大JAVA开发者来说真是一个好事情。任务也就顺利完成啦。

以下是我的代码,写的比较乱,还没整理,只做了简单的验证,暂时没发现问题,呵呵。

import org.eclipse.swt.internal.win32.OS; import org.eclipse.swt.widgets.Shell; import org.sf.feeling.swt.win32.extension.Win32; import org.sf.feeling.swt.win32.extension.hook.Keyboard_LLHook; import org.sf.feeling.swt.win32.extension.hook.Mouse_LLHook; import org.sf.feeling.swt.win32.extension.hook.data.Keyboard_LLHookData; import org.sf.feeling.swt.win32.extension.hook.data.Mouse_LLHookData; import org.sf.feeling.swt.win32.extension.hook.interceptor.InterceptorFlag; import org.sf.feeling.swt.win32.extension.hook.interceptor.Keyboard_LLHookInterceptor; import org.sf.feeling.swt.win32.extension.hook.interceptor.Mouse_LLHookInterceptor; import org.sf.feeling.swt.win32.extension.registry.RegistryKey; import org.sf.feeling.swt.win32.extension.registry.RegistryValue; import org.sf.feeling.swt.win32.extension.registry.RootKey; import org.sf.feeling.swt.win32.extension.registry.ValueType; import org.sf.feeling.swt.win32.extension.shell.ApplicationBar; /**  * Ticket:屏蔽系统快捷键,供锁屏使用(添加屏蔽任务管理器,禁用鼠标事件,隐藏任务栏)  *   * @author XXXX  */ public class WinEventInterceptor {     private static boolean altPressed = false;     private static Keyboard_LLHookInterceptor keyboard_LLHookInterceptor;     private static Mouse_LLHookInterceptor mouse_LLHookInterceptor;     static {         keyboard_LLHookInterceptor = new Keyboard_LLHookInterceptor() {             @Override             public InterceptorFlag intercept(Keyboard_LLHookData hookData) {                 int vkCode = hookData.vkCode();                 // if (vkCode == OS.VK_MENU) {                 if (vkCode == OS.VK_LMENU || vkCode == OS.VK_RMENU) {                     if (hookData.getFlags() == 0x80) {                         altPressed = false;                     } else                         altPressed = true;                 }                 boolean isCtrlPressed = OS.GetKeyState(OS.VK_CONTROL) < 0 ? true : false;                 // 屏蔽windows键                 if (vkCode == 91 || vkCode == 92) {                     return InterceptorFlag.FALSE;                 }                 // 屏蔽ALT+ESC                 if (altPressed && vkCode == OS.VK_ESCAPE) {                     return InterceptorFlag.FALSE;                 }                 // 屏蔽CTRL+ESC                 if (isCtrlPressed && vkCode == OS.VK_ESCAPE) {                     return InterceptorFlag.FALSE;                 }                 // 屏蔽ALT+TAB                 if (altPressed && vkCode == OS.VK_TAB) {                     return InterceptorFlag.FALSE;                 }                 // 屏蔽ALT+F4                 if (altPressed && vkCode == OS.VK_F4) {                     return InterceptorFlag.FALSE;                 }                 return InterceptorFlag.TRUE;             }         };         mouse_LLHookInterceptor = new Mouse_LLHookInterceptor() {             @Override             public InterceptorFlag intercept(Mouse_LLHookData hookData) {                 return InterceptorFlag.FALSE;             }         };     }     /**      * 鼠标恢复      */     public static void resetMouse() {         if (Mouse_LLHook.isInstalled())             Mouse_LLHook.unInstallHook();     }     /**      * 将鼠标设为不可用      */     public static void setMouseDisable() {         if (!Mouse_LLHook.isInstalled()) {             Mouse_LLHook.addHookInterceptor(mouse_LLHookInterceptor);             Mouse_LLHook.installHook();         }     }     /**      * 自定义添加禁用哪些鼠标事件      *       * @param mouseEvents      */     public static void setMouseDisable(final MOUSE_EVENT... mouseEvents) {         if (!Mouse_LLHook.isInstalled()) {             Mouse_LLHook.addHookInterceptor(new Mouse_LLHookInterceptor() {                 @Override                 public InterceptorFlag intercept(Mouse_LLHookData hookData) {                     if (mouseEvents == null) {                         return InterceptorFlag.FALSE;                     }                     MOUSE_EVENT event = null;                     if (hookData.getWParam() == 512) {                         event = MOUSE_EVENT.MOVE;                     } else if (hookData.getWParam() == 513 || hookData.getWParam() == 514) {                         event = MOUSE_EVENT.LEFT_PRESS;                     } else if (hookData.getWParam() == 516 || hookData.getWParam() == 517) {                         event = MOUSE_EVENT.RIGHT_PRESS;                     } else if (hookData.getWParam() == 519 || hookData.getWParam() == 520) {                         event = MOUSE_EVENT.MIDDLE_PRESS;                     } else if (hookData.getWParam() == 522 && hookData.getMouseData() > 0) {                         event = MOUSE_EVENT.WHEEL_UP;                     } else if (hookData.getWParam() == 522 && hookData.getMouseData() < 0) {                         event = MOUSE_EVENT.WHEEL_DOWN;                     }                     for (MOUSE_EVENT mouse_event : mouseEvents) {                         if (mouse_event == event) {                             return InterceptorFlag.FALSE;                         }                     }                     return InterceptorFlag.TRUE;                 }             });             Mouse_LLHook.installHook();         }     }     /**      * 键盘恢复      */     public static void resetKeyboard() {         if (Keyboard_LLHook.isInstalled())             Keyboard_LLHook.unInstallHook();     }     /**      * 禁用键盘      */     public static void setKeyDisable() {         if (!Keyboard_LLHook.isInstalled()) {             Keyboard_LLHook.addHookInterceptor(new Keyboard_LLHookInterceptor() {                 @Override                 public InterceptorFlag intercept(Keyboard_LLHookData hookData) {                     return InterceptorFlag.FALSE;                 }             });             Keyboard_LLHook.installHook();         }     }     /**      * 屏蔽键盘(非组合键),例如vkCode是49,50,则屏蔽的键盘的1和2键;具体键盘对应请查询ascII码表      *       * @param vkCode      *            (要屏蔽的键,非组合键)      */     public static void setKeyDisable(final int... vkCode) {         if (!Keyboard_LLHook.isInstalled()) {             Keyboard_LLHook.addHookInterceptor(new Keyboard_LLHookInterceptor() {                 @Override                 public InterceptorFlag intercept(Keyboard_LLHookData hookData) {                     if (vkCode == null)                         return InterceptorFlag.FALSE;                     for (int code : vkCode) {                         if (code == hookData.vkCode())                             return InterceptorFlag.FALSE;                     }                     return InterceptorFlag.TRUE;                 }             });             Keyboard_LLHook.installHook();         }     }     /**      * 禁用几个常用快捷键,windows键,ALT+ESC,CTRL+ESC,ALT+TAB,ALT+F4      */     public static void setCommonUseKeyDisable() {         if (!Keyboard_LLHook.isInstalled()) {             Keyboard_LLHook.addHookInterceptor(keyboard_LLHookInterceptor);             Keyboard_LLHook.installHook();         }     }     /**      * 任务管理器恢复      */     public static void resetTaskmgr() {         RootKey currentUser = RootKey.HKEY_CURRENT_USER;         RegistryKey key = new RegistryKey(currentUser,                 "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System");         if (!key.exists()) {             key.create();         }         RegistryValue value = new RegistryValue();         value.setType(ValueType.REG_DWORD);         value.setData(0);         value.setName("DisableTaskmgr");         key.setValue(value);     }     /**      * 禁用任务管理器      */     public static void setTaskmgrDisable() {         RootKey currentUser = RootKey.HKEY_CURRENT_USER;         RegistryKey key = new RegistryKey(currentUser,                 "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System");         if (!key.exists()) {             key.create();         }         RegistryValue value = new RegistryValue();         value.setType(ValueType.REG_DWORD);         value.setData(1);         value.setName("DisableTaskmgr");         key.setValue(value);     }     enum MOUSE_EVENT {         MOVE, LEFT_PRESS, RIGHT_PRESS, MIDDLE_PRESS, WHEEL_UP, WHEEL_DOWN     }     /**      * 设置快捷键,按下此快捷键,程序的几个常用快捷键,windows键,ALT+ESC,CTRL+ESC,ALT+TAB,ALT+F4将重新被禁用      *       * @param code      *            快捷键的编码,例如F10可设为121,即OS.VK_F10      */     public static void restartHook(final int code) {         if (!Keyboard_LLHook.isInstalled()) {             Keyboard_LLHook.addHookInterceptor(new Keyboard_LLHookInterceptor() {                 @Override                 public InterceptorFlag intercept(Keyboard_LLHookData hookData) {                     int vkCode = hookData.vkCode();                     if (vkCode == code) {                         Keyboard_LLHook.unInstallHook();                         setCommonUseKeyDisable();                         setTaskmgrDisable();                     }                     return InterceptorFlag.TRUE;                 }             });             Keyboard_LLHook.installHook();         }     }     /**      * 隐藏任务栏      *       * @param handle      *            句柄,如shell.handle      */     public static void setTaskBarHide() {         ApplicationBar.setAppBarState(new Shell().handle, Win32.STATE_AUTOHIDE_ALWAYSONTOP);     }     /**      * 恢复任务栏      *       * @param handle      *            句柄,如shell.handle      */     public static void resetTaskBar() {         ApplicationBar.setAppBarState(new Shell().handle, Win32.STATE_ALWAYSONTOP);     }     /**      * 启用hook      */     public static void startHOOK() {         // 启动前先禁用快捷键         WinEventInterceptor.setCommonUseKeyDisable();         // 禁用任务管理器          WinEventInterceptor.setTaskmgrDisable();         // 隐藏任务栏         WinEventInterceptor.setTaskBarHide();     }     /**      * 关掉hook      */     public static void closeHOOK() {         // 恢复快捷键         WinEventInterceptor.resetKeyboard();         // 恢复任务管理器          WinEventInterceptor.resetTaskmgr();         // 显示任务栏         WinEventInterceptor.resetTaskBar();     } }

屏蔽任务管理器是用了一个取巧的办法,在注册表中设置字段,让其不可用。屏蔽快捷键+注册表不可用时,程序就实现锁屏无法切换了。

鼠标事件是后添加的。

欢迎大家提出意见!

依赖了两个jar包  

org.sf.feeling.swt.win32.extension.jar

swt-3.3-win32-win32-x86.jar

请自行搜索下载



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭