EnumWindows 奇怪的行为
Posted
技术标签:
【中文标题】EnumWindows 奇怪的行为【英文标题】:EnumWindows strange behaviour 【发布时间】:2012-10-18 15:08:52 【问题描述】:我正在尝试在 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],同样的故事。
谁能告诉我这是怎么回事?
【问题讨论】:
【参考方案1】:您对 GetWindowText() 的最后一个参数是不正确的。来自该论点的 MSDN 文章描述:
指定要复制到缓冲区的最大字符数,包括 NULL 字符。如果文本超出此限制,则会被截断。
传递txtlen+1
进行修复。
【讨论】:
谢谢,好像是这样,但是我的问题没有解决。我仍然收到 330 个空字符串。 实际上我现在正在获取窗口名称,但是在 330 个空字符串之后,不知道为什么我得到这么多空字符串。谢谢,现在解决了。 很多窗口没有文字。 EnumWindows 是一个消防水带,你可以看到一切,包括隐藏的窗口。 @user1040769:附带说明,由于您明确使用GetWindowTextLengthW()
而不是一般的GetWindowTextLength()
,因此您应该明确使用GetWindowTextW()
而不是一般的GetWindowText()
来匹配。以上是关于EnumWindows 奇怪的行为的主要内容,如果未能解决你的问题,请参考以下文章