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

展开全部

import org.eclipse.swt.events.DisposeEvent;

import org.eclipse.swt.events.DisposeListener;

import org.eclipse.swt.internal.win32.OS;

import org.eclipse.swt.widgets.Shell;

import org.sf.feeling.swt.win32.extension.hook.Hook;

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;

/**

* Ticket:屏蔽系统快捷e68a84e8a2ad62616964757a686964616f31333365633837键,供锁屏使用(添加禁用鼠标事件)

*

* @author XXXXX

*/

public class WinEventInterceptor {

private static Shell tagShell;

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

boolean isCtrlPressed = OS.GetKeyState(17) 

boolean isAltPressed = OS.GetKeyState(18) 

// 屏蔽windows键

if (vkCode == 91) {

return InterceptorFlag.FALSE;

}

// 屏蔽ALT+ESC

if (isAltPressed && vkCode == 27) {

return InterceptorFlag.FALSE;

}

// 屏蔽CTRL+ESC

if (isCtrlPressed && vkCode == 27) {

return InterceptorFlag.FALSE;

}

// 屏蔽ALT+TAB

if (isAltPressed && vkCode == 9) {

return InterceptorFlag.FALSE;

}

// 屏蔽ALT+F4

if (isAltPressed && vkCode == 115) {

return InterceptorFlag.FALSE;

}

return InterceptorFlag.TRUE;

}

};

mouse_LLHookInterceptor = new Mouse_LLHookInterceptor() {

@Override

public InterceptorFlag intercept(Mouse_LLHookData hookData) {

return InterceptorFlag.FALSE;

}

};

}

/**

* 根据disable为true时,鼠标不可用;false时,鼠标可用

*

* @param disable

*/

public static void setMouseDisable(boolean disable) {

if (disable) {

Mouse_LLHook.addHookInterceptor(mouse_LLHookInterceptor);

if (!Mouse_LLHook.isInstalled())

Mouse_LLHook.installHook();

} else {

if (Mouse_LLHook.isInstalled())

Mouse_LLHook.unInstallHook();

}

}

/**

* 自定义添加禁用哪些鼠标事件

*

* @param disable

* @param mouseEvents

*/

public static void setMouseDisable(boolean disable, final MOUSE_EVENT... mouseEvents) {

if (disable) {

Mouse_LLHook.addHookInterceptor(new Mouse_LLHookInterceptor() {

@Override

public InterceptorFlag intercept(Mouse_LLHookData hookData) {

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() 

event = MOUSE_EVENT.WHEEL_DOWN;

}

for (MOUSE_EVENT mouse_event : mouseEvents) {

if (mouse_event == event) {

return InterceptorFlag.FALSE;

}

}

return InterceptorFlag.TRUE;

}

});

if (!Mouse_LLHook.isInstalled())

Mouse_LLHook.installHook();

} else {

if (Mouse_LLHook.isInstalled())

Mouse_LLHook.unInstallHook();

}

}

/**

* 禁用几个快捷键,windows键,ALT+ESC,CTRL+ESC,ALT+TAB,ALT+F4,任务管理器

*

* @param shell

*            程序主窗口

* @param disable

*            是否禁用

*/

public static void setKeyDisable(final Shell shell, boolean disable) {

if (shell == null) {

return;

}

DisposeListener disposeListener = new DisposeListener() {

@Override

public void widgetDisposed(DisposeEvent e) {

if (Hook.KEYBOARD.isInstalled(shell))

Hook.KEYBOARD.uninstall(shell);

taskmgrDisable(false);

}

};

if (disable) {

if (tagShell == shell) {

return;

}

taskmgrDisable(disable);

Keyboard_LLHook.addHookInterceptor(keyboard_LLHookInterceptor);

if (!Keyboard_LLHook.isInstalled())

Keyboard_LLHook.installHook();

shell.addDisposeListener(disposeListener);

tagShell = shell;

} else {

if (tagShell != shell) {

return;

}

taskmgrDisable(disable);

if (Keyboard_LLHook.isInstalled())

Keyboard_LLHook.unInstallHook();

shell.removeDisposeListener(disposeListener);

tagShell = null;

}

}

/**

* 禁用任务管理器

*

* @param useable

*            useable:true为禁用,false为启用

*/

private static void taskmgrDisable(boolean useable) {

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

if (useable)

value.setData(1);

else

value.setData(0);

value.setName("DisableTaskmgr");

key.setValue(value);

}

enum MOUSE_EVENT {

MOVE, LEFT_PRESS, RIGHT_PRESS, MIDDLE_PRESS, WHEEL_UP, WHEEL_DOWN

}

}

其中

setKeyDisable(final Shell shell, boolean disable)

这个方法是因为程序的特殊要求,可以不需要shell。

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

鼠标事件是后添加的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值