JNA User32.SendMessageTimeout不工作

时间:2016-01-14 14:42:30

标签: java dll jna sendmessage user32

我尝试了很多选项来使用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);

0 个答案:

没有答案