如何用JAVA做禁用键盘,鼠标,任务管理器等任
2个回答
展开全部
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:屏蔽系统快捷键,供锁屏使用(添加禁用鼠标事件)
*
* @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) < 0 ? true : false;
boolean isAltPressed = OS.GetKeyState(18) < 0 ? true : false;
// 屏蔽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() < 0) {
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。
屏蔽任务管理器是用了一个取巧的办法,在注册表中设置字段,让其不可用。屏蔽快捷键+注册表不可用时,程序就实现锁屏无法切换了。
鼠标事件是后添加的。
展开全部
Ctrl+shift+ESC组合键最适合在图形界面中操作。
②打开任务管理器之后,可以继续使用快捷键操作。按tab键可以跳转当前的任务。
③这时,再使用上下(▲▼)键,选中需要管理的进程。
④选中之后,按一下Alt+E键就能通过键盘直接关闭这个进程。
⑤同样,使用Alt组合键也能打开任务管理器的菜单。Alt+F键→打开文件菜单。
⑥Alt+O键→打开选项菜单
在弹出的菜单中,有相应的快捷键提示,按Alt键加这个字母键即可。
⑦Alt+V键→打开查看菜单
使用上下键可以选择不同的菜单。
②打开任务管理器之后,可以继续使用快捷键操作。按tab键可以跳转当前的任务。
③这时,再使用上下(▲▼)键,选中需要管理的进程。
④选中之后,按一下Alt+E键就能通过键盘直接关闭这个进程。
⑤同样,使用Alt组合键也能打开任务管理器的菜单。Alt+F键→打开文件菜单。
⑥Alt+O键→打开选项菜单
在弹出的菜单中,有相应的快捷键提示,按Alt键加这个字母键即可。
⑦Alt+V键→打开查看菜单
使用上下键可以选择不同的菜单。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询