我尝试了很多选项来使用JNA发送击键但没有效果,我无法使用JNA使用User32.dll的方法SendMessageTimeout 。 (jna-4.2.1.jar,jna-platform-4.2.1.jar)
该方法似乎没有做任何事情,没有发现错误,但也没有发送任何字符。
User32.dll库工作正常,GetForegroundWindow和SetForegroundWindow方法就像魅力一样。
但SendMessageTimeout根本不起作用。
我认为问题在于我向函数发送了不好的参数。可能是其中一个或两个:
long lParamSend = 0;
int fuFlagsSend = 0x0000;
但我不知道如何正确地做到这一点。
我通过API多次搜索过: https://msdn.microsoft.com/en-us/library/windows/desktop/ms644952(v=vs.85).aspx 。但是有些东西我不知道。
任何帮助都会很好,这是我测试的完整代码:
final User32 lib = User32.INSTANCE;
System.out.println("Choose ForegroundWindow to test.");
Thread.sleep(3000);
// hWnd [in]
HWND hnwdSend = lib.GetForegroundWindow();
System.out.println("Pause");
Thread.sleep(2000);
lib.SetForegroundWindow(hnwdSend);
System.out.println("Test send message.");
int msgSend = 0x0100; // Press
long wParamSend = 0x53; // Letter s.
long lParamSend = 0;
int fuFlagsSend = 0x0000;
int uTimeoutSend = 5000;
DWORDByReference lpdwResult = null;
long result = lib.SendMessageTimeout(hnwdSend, msgSend, wParamSend, lParamSend, fuFlagsSend, uTimeoutSend,
lpdwResult);
System.out.println(result);
System.out.println(lpdwResult);
final Kernel32 kernel32 = Kernel32.INSTANCE;
int lastError = kernel32.GetLastError();
System.out.println(lastError);
msgSend = 0x0101; // Release
lib.SendMessageTimeout(hnwdSend, msgSend, wParamSend, lParamSend, fuFlagsSend, uTimeoutSend, lpdwResult);