jna笔记备份
来源:互联网 发布:微信斗图软件 编辑:程序博客网 时间:2024/06/04 01:33
需要下载 jna.jar 和 platform.jar V4.1.0(参考http://my.oschina.net/penngo/blog/12356):
package jna_test;import com.sun.jna.platform.win32.*;import com.sun.jna.platform.win32.WinUser.*;import com.sun.jna.platform.win32.WinDef.HMODULE;import com.sun.jna.platform.win32.WinDef.LRESULT;import com.sun.jna.platform.win32.WinDef.WPARAM;import com.sun.jna.platform.win32.WinUser.HHOOK;import com.sun.jna.platform.win32.WinUser.KBDLLHOOKSTRUCT;import com.sun.jna.platform.win32.WinUser.LowLevelKeyboardProc;import com.sun.jna.win32.WinUser.Mouse.LowLevelMouseProc;import com.sun.jna.win32.WinUser.Mouse.MOUSEHOOKSTRUCT;public class MouseLLHook { // 鼠标钩子函数里判断按键类型的常数 public static final int WM_LBUTTONUP = 514; public static final int WM_LBUTTONDOWN = 513; public static final int WM_RBUTTONUP = 517; public static final int WM_RBUTTONDOWN = 516; public static final int WM_MOUSEHWHEEL = 526; public static final int WM_MOUSEWHEEL = 522; public static final int WM_MOUSEMOVE = 512; static HHOOK mouseHHK,keyboardHHK;//鼠标、键盘钩子的句柄 static LowLevelMouseProc mouseHook;//鼠标钩子函数 static LowLevelKeyboardProc keyboardHook;//键盘钩子函数 // 安装钩子 static void setHook() { HMODULE hMod = Kernel32.INSTANCE.GetModuleHandle(null); mouseHHK = User32.INSTANCE.SetWindowsHookEx(WinUser.WH_MOUSE_LL, mouseHook, hMod, 0); keyboardHHK = User32.INSTANCE.SetWindowsHookEx(WinUser.WH_KEYBOARD_LL, keyboardHook, hMod, 0); } //卸载钩子 static void unhook() { User32.INSTANCE.UnhookWindowsHookEx(keyboardHHK); User32.INSTANCE.UnhookWindowsHookEx(mouseHHK); } public static void main(String[] args) { keyboardHook = new LowLevelKeyboardProc() { @Override //该函数参数的意思参考:http://msdn.microsoft.com/en-us/library/windows/desktop/ms644985(v=vs.85).aspx public LRESULT callback(int nCode, WPARAM wParam, KBDLLHOOKSTRUCT lParam) { int w = wParam.intValue(); //按下alt键时w=.WM_SYSKEYDOWN; 按下其他大部分键时w=WinUser.WM_KEYDOWN if(w==WinUser.WM_KEYDOWN || w==WinUser.WM_SYSKEYDOWN) System.out.println("key down: vkCode = "+lParam.vkCode); else if(w==WinUser.WM_KEYUP || w==WinUser.WM_SYSKEYUP) System.out.println("key up: vkCode = "+lParam.vkCode); // 如果按下'q'退出程序,'q'的vkCode是81 if(lParam.vkCode==81) { unhook(); System.err.println("program terminated."); System.exit(0); } return User32.INSTANCE.CallNextHookEx(keyboardHHK, nCode, wParam, lParam.getPointer()); } }; mouseHook = new LowLevelMouseProc() { @Override //该函数参数的意思参考:http://msdn.microsoft.com/en-us/library/windows/desktop/ms644986(v=vs.85).aspx public LRESULT callback(int nCode, WPARAM wParam, MOUSEHOOKSTRUCT lParam) { switch (wParam.intValue()) { case WM_MOUSEMOVE: System.out.print("mouse moved:"); break; case WM_LBUTTONDOWN: System.out.print("mouse left button down:"); break; case WM_LBUTTONUP: System.out.print("mouse left button up"); break; case WM_RBUTTONUP: System.out.print("mouse right button up:"); break; case WM_RBUTTONDOWN: System.out.print("mouse right button down:"); break; case WM_MOUSEWHEEL: System.out.print("mouse wheel rotated:"); break; } System.out.println("("+lParam.pt.x+","+lParam.pt.y+")"); return User32.INSTANCE.CallNextHookEx(mouseHHK, nCode, wParam, lParam.getPointer()); } }; System.out.println("press 'q' to quit."); setHook(); int result; MSG msg = new MSG(); // 消息循环 // 实际上while循环一次都不执行,这些代码的作用我理解是让程序在GetMessage函数这里阻塞,不然程序就结束了。 while ((result = User32.INSTANCE.GetMessage(msg, null, 0, 0)) != 0) { if (result == -1) { System.err.println("error in GetMessage"); unhook(); break; } else { User32.INSTANCE.TranslateMessage(msg); User32.INSTANCE.DispatchMessage(msg); } } unhook(); } }
- 2.
import com.sun.jna.Structure;import com.sun.jna.platform.win32.BaseTSD.ULONG_PTR;import com.sun.jna.platform.win32.WinDef.HWND;import com.sun.jna.platform.win32.WinDef.LRESULT;import com.sun.jna.platform.win32.WinDef.WPARAM;import com.sun.jna.platform.win32.WinUser.HOOKPROC;import com.sun.jna.platform.win32.WinUser.POINT;interface LowLevelMouseProc extends HOOKPROC { LRESULT callback(int nCode, WPARAM wParam, MOUSEHOOKSTRUCT lParam);}class MOUSEHOOKSTRUCT extends Structure { public class ByReference extends MOUSEHOOKSTRUCT implements Structure.ByReference { }; public POINT pt; public HWND hwnd; public int wHitTestCode; public ULONG_PTR dwExtraInfo;}
阅读全文
0 0
- jna笔记备份
- JNA
- JNA
- jna
- JNA
- JNA
- JNA
- Jna
- jna
- JNA实战笔记汇总<一> 简单认识JNA|成功调用JNA
- JNA实战笔记汇总<二> JNA和C/C++的数据类型转换
- JAVA JNA
- JNA介绍
- 初学JNA
- 关于JNA
- Java JNA
- Android JNA
- JNA介绍
- Java 集合框架
- jfinal利用form表单同时上传图片和text
- JDBC:找回密码
- if exists用法
- 二周五次课
- jna笔记备份
- DFS 1253 解题报告
- GNU C语言 宏定义 #args ##args
- (继)pytorch中的pretrain模型网络结构修改
- 用UglifyJS2合并压缩混淆JS代码
- 那些年,React 踩过的坑
- android studio
- android_万能适配器
- Adobe Photoshop Lightroom CC 2017 Mac(LR CC)附激活工具 V1.0中文破解版