0

我正在尝试在 Windows 8 上将 MFC 与 Visual Studio 2012 一起使用。我有以下代码:

BOOL CALLBACK EWP(HWND hwnd, LPARAM lParam)
{
    int txtlen = GetWindowTextLengthW(hwnd);
    std::wstring s;
    s.reserve(txtlen + 1);
    GetWindowText(hwnd, const_cast<wchar_t*>(s.c_str()), txtlen);

    return TRUE;
}

EnumWindows(EWP, 0);

发生的情况是第一个字符串以“Task Switchin”的形式出现,其余的以“”形式出现。我得到了大约 330 个这样的字符串。我也尝试过不使用那种奇怪的字符串方法,只使用 char buff[300],同样的故事。

有人可以告诉我发生了什么吗?

4

1 回答 1

3

您对 GetWindowText() 的最后一个论点是错误的。从该论点的 MSDN 文章描述中:

指定要复制到缓冲区的最大字符数,包括 NULL 字符。如果文本超出此限制,则将其截断。

通过txtlen+1修复。

于 2012-10-18T15:18:29.587 回答