Я пытаюсь получить уведомление WM_DEVICECHANGE, используя хуки Windows, основанные на этом примере хука мыши (http://www.javawebdevelop.com/3205624/), но метод, содержащий эту константу, никогда не вызывается, и когда я вставляю 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);
}
}