public class MouseHook extends JFrame {
private static final long serialVersionUID = 1L;
public static final int WM_MOUSEMOVE = 512;
public static final int WM_LBUTTONDOWN = 513;
public static final int WM_LBUTTONUP = 514;
public static final int WM_RBUTTONDOWN = 516;
public static final int WM_RBUTTONUP = 517;
public static final int WM_MBUTTONDOWN = 519;
public static final int WM_MBUTTONUP = 520;
private static HHOOK hhk;
private static LowLevelMouseProc mouseHook;
private JLabel labelX;
private JLabel labelY;
private JPanel contentPane;
public static void main(String[] args) {
final MouseHook frame = new MouseHook();
frame.setVisible(true);
final User32 lib = User32.INSTANCE;
HMODULE hMod = Kernel32.INSTANCE.GetModuleHandle(null);
mouseHook = new LowLevelMouseProc() {
public LRESULT callback(int nCode, WPARAM wParam,
MOUSEHOOKSTRUCT info) {
if (nCode >= 0) {
switch (wParam.intValue()) {
case MouseHook.WM_MOUSEMOVE:
System.err.println("in callback, x=" + info.pt.x
+ " y=" + info.pt.y);
frame.getLabelX().setText(String.valueOf(info.pt.x));
frame.getLabelY().setText(String.valueOf(info.pt.y));
}
}
return lib
.CallNextHookEx(hhk, nCode, wParam, info.getPointer());
}
};
hhk = lib.SetWindowsHookEx(User32.WH_MOUSE_LL, mouseHook, hMod, 0);
int result;
MSG msg = new MSG();
while ((result = lib.GetMessage(msg, null, 0, 0)) != 0) {
if (result == -1) {
System.err.println("error in get message");
break;
} else {
System.err.println("got message");
lib.TranslateMessage(msg);
lib.DispatchMessage(msg);
}
}
lib.UnhookWindowsHookEx(hhk);
}
public MouseHook() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel lblX = new JLabel("X:");
lblX.setFont(new Font("宋体", Font.PLAIN, 14));
lblX.setBounds(46, 33, 22, 27);
contentPane.add(lblX);
JLabel lblY = new JLabel("Y:");
lblY.setFont(new Font("宋体", Font.PLAIN, 14));
lblY.setBounds(144, 39, 17, 15);
contentPane.add(lblY);
labelX = new JLabel("");
labelX.setBounds(65, 39, 54, 15);
contentPane.add(labelX);
labelY = new JLabel("");
labelY.setBounds(160, 39, 54, 15);
contentPane.add(labelY);
}
public JLabel getLabelX() {
return labelX;
}
public void setLabelX(JLabel labelX) {
this.labelX = labelX;
}
public JLabel getLabelY() {
return labelY;
}
public void setLabelY(JLabel labelY) {
this.labelY = labelY;
}
public interface LowLevelMouseProc extends HOOKPROC {
LRESULT callback(int nCode, WPARAM wParam, MOUSEHOOKSTRUCT lParam);
}
public class Point extends Structure {
public class ByReference extends Point implements Structure.ByReference {
};
public com.sun.jna.NativeLong x;
public com.sun.jna.NativeLong y;
}
public static class MOUSEHOOKSTRUCT extends Structure {
public static class ByReference extends MOUSEHOOKSTRUCT implements
Structure.ByReference {
};
public User32.POINT pt;
public User32.HWND hwnd;
public int wHitTestCode;
public User32.ULONG_PTR dwExtraInfo;
}
}
分享到:
相关推荐
java 控制鼠标*键盘的 jna 库32位
java 使用JNA读取ddl文件,亲测有效!
Java JNA使用参考手册.pdf
Java实现获取窗口句柄并操作窗口 JNA Java实现获取窗口句柄并操作窗口 JNA
java使用jna开启关闭第三方应用程序,附简单的例子,打开一个记事本,朋友们也可以改为自己需要打开的应用程序
java开发源码,模拟鼠标、键盘操作,获取鼠标X Y坐标等功能,可以实现前台鼠标控制游戏窗口等功能
java通过jna调用c返回结构体例子,就是解决c语言返回结构体,java用类对象接收,包含jar包,java文件,c文件,操作步骤文档,在linux下完美通过
jna-***.jar中文文档.zip,java,jna-***.jar,net.java.dev.jna,jna,***,com.sun.jna,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 ...
jna-***.jar中文文档.zip,java,jna-***.jar,net.java.dev.jna,jna,***,com.sun.jna,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 ...
现成的java调用jna项目其中包括jna.jar 注意:先将jna.jar导入工程再执行程序。
java调用C#封装的dll(jna,com)java调用C#封装的dll(jna,com)java调用C#封装的dll(jna,com)
JNA(Java Native Access )提供一组Java工具类用于在运行期动态访问系统本地库(native library...开发人员只要在一个java接口中描述目标native library的函数与结构,JNA将自动实现Java接口到native function的映射。
jna-***.jar中文文档.zip,java,jna-***.jar,net.java.dev.jna,jna,***,com.sun.jna,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 ...
jna-4.5.1 , jna-4.5.1-sources , jna-platform-4.5.1 jar包 JNA全称Java Native Access,是一个...开发人员只要在一个java接口中描述目标native library的函数与结构,JNA将自动实现Java接口到native function的映射。
fuse-jna, 没有废话,实际上使用Java绑定来使用JNA进行 dope拿着它git clone git://github.com/EtiennePerot/fuse-jna.git运行它fuse-jna/examples/hellofs.sh ~/hellof
仅用JAVA实现全局键盘钩子的功能,很好很强大,学习下
NULL 博文链接:https://suigara.iteye.com/blog/1955217
java使用(jna)调用c/c++第三方动态库 dll文件 所用jar包
java调取窗口句柄所需要的JNA包,就当回报社会了。
MyEclipse 6.5 导入就可测试 绝对能跑起来 实现 java 通过 jna 包 调用dll