【发布时间】:2019-02-03 18:33:52
【问题描述】:
我正在尝试在 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找出失败的原因。 -
是什么让您认为窗口类
WindowsForms10.EDIT.app.0.378734a可以识别WM_SETTEXT 消息? -
SendMessage 的返回值为 0。我认为这意味着没有错误。
-
它与我测试过的其他应用程序相同的窗口类可以识别 WM_TEXT。所以是的,这是一种假设,但我对 WM_CHAR 也有同样的问题。当我在 Spy++ 中记录消息时,我验证键盘输入发送 WM_CHAR 并输入文本。当我尝试使用 SendMessage 时它不起作用
-
控件是否只接受IP地址格式?如果是,您为什么要尝试寄信?