您的位置:首页 > 编程语言 > Java开发

Java 实现 Hook 对鼠标键盘监听

2009-08-06 20:09 381 查看
Java 实现全局(全操作系统)的鼠标和键盘监控,使用的是SWT Win32 Extension 项目,在以前若使用Java恐怕是很难实现的!

SWT Win32 Extension 让Java拥有了许多对操作系统底层操作的功能!

注:本程序需要SWT Win32 Extension支持http://feeling.sourceforge.net/index.php?

以下两个例子是:

(一)鼠标Hook

import org.sf.feeling.swt.win32.extension.hook.Hook;
import org.sf.feeling.swt.win32.extension.hook.data.HookData;
import org.sf.feeling.swt.win32.extension.hook.data.MouseHookData;
import org.sf.feeling.swt.win32.extension.hook.listener.HookEventListener;

public class HotMouse {

public static void main(String[] args) {
Hook.MOUSE.addListener(new HookEventListener() {
public void acceptHookData(HookData hookData) {
if (hookData != null) {
//System.out.println("Mouse Point X = " + ((MouseHookData)hookData).getPointX());
//System.err.println("Mouse Point Y =" + ((MouseHookData)hookData).getPointY());
System.err.println(((MouseHookData)hookData).getPointX()+"," + ((MouseHookData)hookData).getPointY());
}
if (hookData.getWParam() == 513) {         System.out.println("left button pressed");// left button pressed
} else if (hookData.getWParam() == 514) {  System.out.println("left button released");// left button released
} else if (hookData.getWParam() == 516) {  System.out.println("right button pressed");// right button pressed
} else if (hookData.getWParam() == 517) {  System.out.println("right button");// right button
} else if (hookData.getWParam() == 519) {  System.out.println("middle button 519");// middle button
} else if (hookData.getWParam() == 520) {  System.out.println("middle button 520");// middle button
}
}
});
Hook.MOUSE.install();
}

}


(二)键盘Hook

import org.sf.feeling.swt.win32.extension.hook.Hook;
import org.sf.feeling.swt.win32.extension.hook.data.HookData;
import org.sf.feeling.swt.win32.extension.hook.data.KeyboardHookData;
import org.sf.feeling.swt.win32.extension.hook.listener.HookEventListener;

public class HotKey {
public static void main(final String[] args) {
Hook.KEYBOARD.addListener(new HookEventListener(){//@Override
public void acceptHookData(HookData arg0) {
KeyboardHookData KHD = ((KeyboardHookData)arg0);
System.out.println(KHD.getWParam()+" - "+KHD.getTransitionState());  //Print code
if( KHD.getScanCode() == 29 && KHD.getTransitionState()){  //按下Ctrl執行動作
System.out.println("Hotting");
}else if( KHD.getScanCode() == 1 ){  //按下[ESC]結束
System.exit(0);
}
}});
Hook.KEYBOARD.install();  //註冊事件
}
}


以上两个例子源于:http://blog.shell.idv.tw/ 这里要感谢!感谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: