以前QA做性能测试用手机的秒表,很不方便。前两年为QA做了一个java秒表,记录鼠标两次点击之间的时间差。但是那是基于JInvoke的,JInvoke是收费软件,有试用的时限,用来封装JNI编程的复杂性。最近QA要求我再搞一个完全免费的类似软件。这次用的是jnativehook.
jnativehook可以用来监控键盘和鼠标的事件。底层通过调用不同平台的native code屏蔽了平台相关性。它强大的地方在于,基于jnativehook的软件可以后台运行,没有类似“监控某窗口内键盘/鼠标事件”的限制。
扩展jnativehook的这个小工具可以记录两次鼠标点击之间的时间差,更确切地说,是记录第一次鼠标抬起和第二次鼠标按下的时间差。举一个QA使用的例子,比如在UI上点击一个button,等着执行成功弹出的对话框。QA在点击button时,鼠标一抬起,这个小工具就开始计时,当QA看见对话框时,马上在屏幕任意位置点鼠标,软件就记录了这两次点击之间的时间差。当然,这样做还是不够精确,存在人反应时间的误差。
jnativehook项目的主页在 https://code.google.com/p/jnativehook/
我扩展程序的源代码如下:
import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
import org.jnativehook.mouse.NativeMouseEvent;
import org.jnativehook.mouse.NativeMouseInputListener;
public class MouseHook implements NativeMouseInputListener {
static double startPoint = 0.0;
/**
* @param args
*/
public static void main(String[] args) {
try {
GlobalScreen.registerNativeHook();
}
catch (NativeHookException ex) {
System.err.println("There was a problem registering the native hook.");
System.err.println(ex.getMessage());
System.exit(1);
}
//Construct the example object.
MouseHook example = new MouseHook();
//Add the appropriate listeners for the example object.
GlobalScreen.getInstance().addNativeMouseListener(example);
}
@Override
public void nativeMouseClicked(NativeMouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void nativeMousePressed(NativeMouseEvent arg0) {
System.out.println((System.currentTimeMillis() - startPoint)/1000);
}
@Override
public void nativeMouseReleased(NativeMouseEvent arg0) {
startPoint = System.currentTimeMillis();
}
@Override
public void nativeMouseDragged(NativeMouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void nativeMouseMoved(NativeMouseEvent arg0) {
// TODO Auto-generated method stub
}
}
可以在eclipse里右键点java 项目,在export...里选择Java目录下的Runnable Jar File
假如你保存的jar文件叫mousehook.jar. 可以直接使用java -jar mousehook.jar启动就可以使用了。