Java 스윙 응용 프로그램에서 USB 장치 도착 및 장치 제거 완료 이벤트에 대한 알림을 등록하려고합니다.JNA 호출 RegisterDeviceNotification이 오류 1066으로 실패 함
나는 성공적으로 리스너를 등록 할
SetWindowLong(hWnd, MyUser32.GWLP_WNDPROC, listener);
라고하고 난 형
WM_DEVICECHANGE
의 통지를 받고 있습니다. 여태까지는 그런대로 잘됐다.
이제 RegisterDeviceNotification을 호출하여 장치 도착을 알리고 완료 이벤트를 제거하려고합니다. 여기에 내가 시도 것입니다 :
HWND hWnd = new HWND();
hWnd.setPointer(Native.getWindowPointer(frame));
DEV_BROADCAST_DEVICEINTERFACE filter = new DEV_BROADCAST_DEVICEINTERFACE();
filter.dbcc_classguid = GUID_DEVINTERFACE_USB_DEVICE;
filter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
filter.dbcc_name = new char[1];
filter.dbcc_reserved = new DWORD(0);
filter.dbcc_size = new DWORD(filter.size());
filter.dbcc_size = new DWORD(filter.size());
long retVal = MyUser32.MYINSTANCE.RegisterDeviceNotification(new HANDLE(hWnd.getPointer()), filter.getPointer(), DEVICE_NOTIFY_WINDOW_HANDLE);
if (retVal != 0) {
System.out.println("Error registering for usb: " + Native.getLastError());
}
내 JNA 선언은 다음과 같습니다 : 난 항상 오류 1066 어떤 도움을 주시면 감사하겠습니다을 수신하고
public long RegisterDeviceNotification(HANDLE hRecipient, Pointer NotificationFilter, DWORD Flags);
public static class DEV_BROADCAST_DEVICEINTERFACE extends Structure {
public DWORD dbcc_size;
public DWORD dbcc_devicetype;
public DWORD dbcc_reserved;
public GUID dbcc_classguid;
public char[] dbcc_name;
}
public static final GUID GUID_DEVINTERFACE_USB_DEVICE = new GUID(new byte[] {
(byte)0xA5, (byte)0xDC, (byte)0xBF, 0x10, 0x65, 0x30, 0x11, (byte)0xD2, (byte)0x90, 0x1F, 0x00, (byte)0xC0, 0x4F, (byte)0xB9, 0x51, (byte)0xED
});
. 더 많은 정보가 필요하다면 알려주십시오.