发送消息WM_SETTEXT不适用于 MFC 应用程序的另一个应用程序

SendMessage WM_SETTEXT does not work on another application from MFC application

本文关键字:应用程序 MFC 适用于 另一个 不适用 SETTEXT 消息 WM      更新时间:2023-10-16

我正在尝试从C++ MFC应用程序设置另一个应用程序的编辑控件中的文本。

如果另一个应用程序是记事本,我的代码工作正常,但它在我需要它处理的应用程序上不起作用。当我无法WM_SETTEXT工作时,我想可能是应用程序正在将消息过滤到控件,并且由于键盘输入有效,我尝试发送键盘消息。那也行不通。我通过在 Spy++ 中记录消息来验证窗口是否确实接收键盘输入。我做错了什么或错过了什么?

if (g_IPAdressHwnd != 0) // g_IPAdressHwnd is the handle to the Edit control
{
    CWnd *wnd = CWnd::FromHandle(g_IPAdressHwnd);
    wchar_t buff[256];
    wchar_t windowText[256];
    wchar_t className[256];
    BOOL b = IsWindowUnicode(wnd->GetSafeHwnd()); // returns true
    GetClassName(wnd->GetSafeHwnd(), className, 200); // returns "WindowsForms10.EDIT.app.0.378734a"
    wnd->GetWindowText(windowText, 256);    // does not work
    wnd->SendMessage(WM_GETTEXT, 256, (LPARAM)buff); // this works
    wcscpy_s(buff, L"Foo!");
    wnd->SendMessage(WM_SETTEXT, 256, (LPARAM)buff);    // does not work
    wnd->SendMessage(WM_CHAR, L'A', 0);  // does not work
}

我在SendMessage((之后调用了GetLastError((,即使SendMessage((返回0。最后一个错误是 5,访问被拒绝。由UIPI引起。

我的应用程序需要在更高的完整性级别运行。

事实证明,我只需要以管理员身份运行Visual Studio,这反过来又以管理员身份在调试模式下运行我的应用程序。这也意味着最终应用程序将始终需要在管理员模式下运行才能工作,但这很好。