SendMessage不适用于Word应用程序

时间:2013-05-03 16:07:12

标签: c++ winapi sendmessage

我正在做一点申请,我需要点击word文档中的某个位置。

我正在使用“sendMessage,虽然我也在使用”postMessage“获得相同的结果。

#include <Windows.h>


int _tmain(int argc, _TCHAR* argv[])
{
    HWND win_handle = FindWindow(L"OpusApp", NULL);
    if (win_handle != NULL)
    {
        POINT win_coords = {1310, 360};
        POINT ctrl_coords = win_coords;

        ScreenToClient(win_handle, &win_coords);
        WCHAR windowsText1[200];
        GetWindowText(win_handle, windowsText1, 200);
        //SetCapture(win_handle);
        LPARAM lParam = MAKELPARAM(win_coords.x, win_coords.y);
        LRESULT hr_d = SendMessage(win_handle, WM_LBUTTONDOWN, 0, lParam);
        LRESULT hr_u = SendMessage(win_handle, WM_LBUTTONUP, 0, lParam);
    }
    return 0;
}

有什么建议吗?

问候。

1 个答案:

答案 0 :(得分:4)

首先,不应使用SendMessage或PostMessage发送输入。它可能适用于某些程序,但直接发送或发布消息不会更新与输入相关联的内部状态,这可能会使奇怪的事情发生,例如不检测输入。

这就是函数SendInput存在的原因。这将输入注入与鼠标驱动程序使用的相同级别,因此Windows将正确维护其状态。当然,这是全球性的投入。如果无法确保窗口位于前台,您可能需要查看UI Automation.