如何用JNA创建一个全局钩子usb设备?

时间:2014-08-11 14:59:57

标签: java usb hook jna

我尝试使用基于此鼠标挂钩示例(http://www.javawebdevelop.com/3205624/)的Windows挂钩获取WM_DEVICECHANGE通知,但是从不调用包含此常量的方法,并且当将usb设备放入我的机器时我得不到任何通知。真诚地,我不知道如何解决。欢迎任何建议!

我正在使用NetBeansIDE,这是我现在尝试的代码:

package testusbnotification; public class TESTUSBNOTIFICATION { public static void messagem(String s) { JOptionPane.showMessageDialog(null, s); } public static final int WH_GETMESSAGE = 3; static HHOOK msgHook; static HOOKPROC msgProc; public interface MyWinUser extends WinUser { public static final int WM_DEVICECHANGE = 0x0219; } /** * @param args the command line arguments */ public static void main(String[] args) { msgProc = new GetMsgProc() { @Override public LRESULT callback(int nCode, WPARAM wParam, MSG lParam) { if (nCode >= 0) { switch(wParam.intValue()) { case MyWinUser.WM_DEVICECHANGE: messagem("A Usb device was detected!"); break; } } return User32.INSTANCE.CallNextHookEx(msgHook, nCode, wParam, lParam.getPointer()); } }; HMODULE hMod = Kernel32.INSTANCE.GetModuleHandle(null); msgHook = User32.INSTANCE.SetWindowsHookEx(WH_GETMESSAGE, msgProc, hMod, 0); MSG msg = new MSG(); while (User32.INSTANCE.GetMessage(msg, null, 0, 0) != 0) { User32.INSTANCE.TranslateMessage(msg); User32.INSTANCE.DispatchMessage(msg); } User32.INSTANCE.UnhookWindowsHookEx(msgHook); } public static interface GetMsgProc extends HOOKPROC { LRESULT callback(int nCode, WPARAM wParam, MSG lParam); } }

0 个答案:

没有答案