62,634
社区成员




package mouse;
import java.awt.AWTException;
import java.awt.MouseInfo;
import java.awt.Robot;
import java.util.Date;
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef;
import com.sun.jna.platform.win32.WinUser;
public class MouseCatch implements Runnable {
/**
* 获取鼠标状态间隔时间
*/
public static final int MOUSE_TIME_GET_STAT_DELAY = 1000;
/**
* 鼠标移动
*/
protected static final int _MOUSE_MOVED = 512;
/**
* 左键按下
*/
protected static final int _MOUSE_LEFT_PRESSED = 513;
/**
* 左键弹起
*/
protected static final int _MOUSE_LEFT_POPS_UP = 514;
/**
* 右键按下
*/
protected static final int _MOUSE_RIGHT_PRESSED = 516;
/**
* 右键弹起
*/
protected static final int _MOUSE_RIGHT_POPS_UP = 517;
/**
* 中键按下
*/
protected static final int _MOUSE_MIDDLE_PRESSED = 519;
/**
* 中键弹起
*/
protected static final int _MOUSE_MIDDLE_POPS_UP = 520;
/**
* 中键滚动
*/
protected static final int _MOUSE_MIDDLE_ROTATED = 522;
public static void main(String[] args) throws AWTException, InterruptedException {
System.out.println("正在监控中。。。。");
MouseCatch hook = new MouseCatch();
new Thread(hook).start();
// hook.setHookOn();
// Thread.sleep(MOUSE_TIME_GET_STAT_DELAY);
hook.setHookOff();
}
public void outstr(String str) {
System.out.println(str);
}
private boolean mouseMoved = false;
private boolean mouseLeftPressed = false;
private boolean mouseRightPressed = false;
private boolean mouseMiddlePressed = false;
private boolean mouseMiddleRotated = false;
final User32 lib=User32.INSTANCE;
static volatile Date last = new Date();
// 就是一个Windows的句柄,本例中指定的是鼠标的类型User32.WH_MOUSE_LL
private WinUser.HHOOK hhk;
private WinUser.LowLevelKeyboardProc mouseProc = new WinUser.LowLevelKeyboardProc() {
@Override
public WinDef.LRESULT callback(int nCode, WinDef.WPARAM wParam, WinUser.KBDLLHOOKSTRUCT event) {
if (nCode >= 0) {
// MouseCatch.last = new Date();
setMouseMiddleRotated(false);
setMouseMoved(false);
switch (wParam.intValue()) {
case _MOUSE_MOVED:
// System.out.println("鼠标移动");
// System.out.println("鼠标移动"+event.dwExtraInfo.toPointer().);
setMouseMoved(true);
break;
case _MOUSE_LEFT_PRESSED:
// System.out.println("鼠标左键按下");
setMouseleftPressed(true);
break;
case _MOUSE_LEFT_POPS_UP:
// System.out.println("鼠标左键弹起");
setMouseleftPressed(false);
break;
case _MOUSE_RIGHT_PRESSED:
// System.out.println("鼠标右键按下");
setMouseRightPressed(true);
break;
case _MOUSE_RIGHT_POPS_UP:
// System.out.println("鼠标右键弹起");
setMouseRightPressed(false);
break;
case _MOUSE_MIDDLE_PRESSED:
// System.out.println("鼠标中键按下");
setMouseMiddlePressed(true);
break;
case _MOUSE_MIDDLE_POPS_UP:
// System.out.println("鼠标中键弹起");
setMouseMiddlePressed(false);
break;
case _MOUSE_MIDDLE_ROTATED:
// System.out.println("鼠标中键滚动");
setMouseMiddleRotated(true);
break;
default:
setMouseMiddleRotated(false);
setMouseMoved(false);
System.out.println(wParam.intValue());
}
// outstr(String.valueOf("------------------------------------------------"));
// outstr(String.valueOf(isMouseMoved()));
// outstr(String.valueOf(isMouseLeftPressed()));
// outstr(String.valueOf(isMouseRightPressed()));
// outstr(String.valueOf(isMouseMiddlePressed()));
// outstr(String.valueOf(isMouseMiddleRotated()));
}
return lib.CallNextHookEx(hhk, nCode, wParam, null);
}
};
@Override
public void run() {
System.out.println("setHookOn th");
setHookOn();
System.err.println("setHookOn tth");
while (true) {
System.err.println("setHookOn th");
try {
Thread.sleep(MOUSE_TIME_GET_STAT_DELAY);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
if (System.currentTimeMillis() - MouseCatch.last.getTime() >= 10000) {
MouseCatch.last = new Date();
}
setHookOff();
}
}
public void setHookOn() {
// 获取指定模块的句柄
WinDef.HMODULE hMod = Kernel32.INSTANCE.GetModuleHandle(null);
// 安装钩子,返回钩子的句柄
// hhk = User32.INSTANCE.SetWindowsHookEx(User32.WH_MOUSE_LL, mouseProc, hMod, 0);
hhk = lib.SetWindowsHookEx(User32.WH_MOUSE_LL, mouseProc, hMod, 0);
int result;
WinUser.MSG msg = new WinUser.MSG();
// 此函数从调用线程的消息队列中检索消息,并将其放入指定的结构中
// User32.INSTANCE.GetMessage(msg, null, 0, 0);
lib.GetMessage(msg, null, 0, 0);
// while ((result = User32.INSTANCE.GetMessage(msg, null, 0, 0)) != 0) {
// if (result == -1) {
// setHookOff();
// break;
// } else {
// User32.INSTANCE.TranslateMessage(msg);
// System.out.println(msg);
// User32.INSTANCE.DispatchMessage(msg);
// System.out.println(msg);
// }
// }
}
// 关闭钩子
public void setHookOff() {
// User32.INSTANCE.UnhookWindowsHookEx(hhk);
lib.UnhookWindowsHookEx(hhk);
System.out.println("User32.INSTANCE.UnhookWindowsHookEx(hhk);");
// 这一句不行,会关闭应用程序
// System.exit(0);
}
public boolean isMouseLeftPressed() {
return mouseLeftPressed;
}
public void setMouseleftPressed(boolean mousePressed) {
this.mouseLeftPressed = mousePressed;
}
public boolean isMouseMoved() {
return mouseMoved;
}
public void setMouseMoved(boolean mouseMoved) {
this.mouseMoved = mouseMoved;
}
public boolean isMouseRightPressed() {
return mouseRightPressed;
}
public void setMouseRightPressed(boolean mouseRightPressed) {
this.mouseRightPressed = mouseRightPressed;
}
public boolean isMouseMiddlePressed() {
return mouseMiddlePressed;
}
public void setMouseMiddlePressed(boolean mouseMiddlePressed) {
this.mouseMiddlePressed = mouseMiddlePressed;
}
public boolean isMouseMiddleRotated() {
return mouseMiddleRotated;
}
public void setMouseMiddleRotated(boolean mouseMiddleRotated) {
this.mouseMiddleRotated = mouseMiddleRotated;
}
private class MouseStat {
private boolean mouseMoved;
private boolean mouseLeftPressed;
private boolean mouseRightPressed;
private boolean mouseMiddlePressed;
private boolean mouseMiddleRotated;
/**
* @return mouseMoved
*/
public boolean isMouseMoved() {
return mouseMoved;
}
/**
* @param mouseMoved 要设置的 mouseMoved
*/
public void setMouseMoved(boolean mouseMoved) {
this.mouseMoved = mouseMoved;
}
/**
* @return mouseLeftPressed
*/
public boolean isMouseLeftPressed() {
return mouseLeftPressed;
}
/**
* @param mouseLeftPressed 要设置的 mouseLeftPressed
*/
public void setMouseLeftPressed(boolean mouseLeftPressed) {
this.mouseLeftPressed = mouseLeftPressed;
}
/**
* @return mouseRightPressed
*/
public boolean isMouseRightPressed() {
return mouseRightPressed;
}
/**
* @param mouseRightPressed 要设置的 mouseRightPressed
*/
public void setMouseRightPressed(boolean mouseRightPressed) {
this.mouseRightPressed = mouseRightPressed;
}
/**
* @return mouseMiddlePressed
*/
public boolean isMouseMiddlePressed() {
return mouseMiddlePressed;
}
/**
* @param mouseMiddlePressed 要设置的 mouseMiddlePressed
*/
public void setMouseMiddlePressed(boolean mouseMiddlePressed) {
this.mouseMiddlePressed = mouseMiddlePressed;
}
/**
* @return mouseMiddleRotated
*/
public boolean isMouseMiddleRotated() {
return mouseMiddleRotated;
}
/**
* @param mouseMiddleRotated 要设置的 mouseMiddleRotated
*/
public void setMouseMiddleRotated(boolean mouseMiddleRotated) {
this.mouseMiddleRotated = mouseMiddleRotated;
}
}
}
setHookOn() {
......
User32.INSTANCE.GetMessage(msg, null, 0, 0);
......
或while ((result = User32.INSTANCE.GetMessage(msg, null, 0, 0)) != 0) {