我尝试使用基于此鼠标挂钩示例(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);
}
}