вот мой код для тестирования ловушки, но метод обратного вызова никогда не вызывается. Я попытался создать класс MSGSTRUCT, расширяющий структуру (все еще не работает), но я обнаружил, что у jna уже есть класс MSG, поэтому я использовал его вместо этого.
Может кто-нибудь сказать мне правильный способ сделать это?
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.User32;
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.HOOKPROC;
import com.sun.jna.platform.win32.WinUser.MSG;
public class GetMsgHookTest {
public static final int WH_GETMESSAGE = 3;
static HHOOK msgHook;
static HOOKPROC msgProc;
public static void main(String[] args) {
msgProc = new GetMsgProc() {
@Override
public LRESULT callback(int nCode, WPARAM wParam, MSG lParam) {
System.out.println("get msg");
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);
}
}