EnumWindows奇怪的行为

时间:2012-10-18 15:08:52

标签: winapi mfc visual-studio-2012

我正在尝试在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);

第一个字符串出现的情况是“任务切换”,其余字符串为“”。我得到了大约330个字符串。我已经尝试过不使用那种奇怪的字符串方法,只使用char buff [300],同样的故事。

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

1 个答案:

答案 0 :(得分:3)

GetWindowText()的最后一个参数是一个接一个的。来自MSDN文章对该参数的描述:

  

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

通过txtlen+1修复。