Winapi 这是一种奇怪的行为

Winapi 这是一种奇怪的行为,winapi,mfc,visual-studio-2012,Winapi,Mfc,Visual Studio 2012,我正在尝试将MFC与Windows 8上的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(

我正在尝试将MFC与Windows 8上的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);
BOOL回调EWP(HWND-HWND,LPARAM-LPARAM)
{
int txtlen=GetWindowTextLengthW(hwnd);
std::wsts环;
s、 储备(txtlen+1);
GetWindowText(hwnd,const_cast(s.c_str()),txtlen);
返回TRUE;
}
枚举窗口(EWP,0);
发生的情况是,第一个字符串显示为“Task Switchin”,其余字符串显示为“”。我有大约330根这样的弦。我也尝试过不使用这种奇怪的字符串方法,只使用charbuff[300],同样的故事


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

GetWindowText()的最后一个参数被关闭了一个。根据MSDN文章对该参数的描述:

指定要复制到缓冲区的最大字符数,包括空字符。如果文本超过此限制,它将被截断


传递
txtlen+1
以修复。

GetWindowText()的最后一个参数已关闭1。根据MSDN文章对该参数的描述:

指定要复制到缓冲区的最大字符数,包括空字符。如果文本超过此限制,它将被截断


通过
txtlen+1
进行修复。

谢谢,似乎是这样,但是我的问题没有修复。我仍然得到330个空字符串。实际上我现在得到了窗口名,但是在330个空字符串之后,我不知道为什么会得到这么多空字符串。谢谢,现在已经解决了。很多窗口没有文本。EnumWindows是一条消防水带,你可以看到所有东西,包括隐藏的窗口。@user1040769:另一方面,由于你使用的是
GetWindowTextLength()
explicitally而不是
GetWindowTextLength()
,一般来说,你应该使用
GetWindowTextW()
explicitally而不是
GetWindowText()
一般匹配。谢谢,似乎是这样,但是我的问题没有解决。我仍然得到330个空字符串。实际上我现在得到了窗口名,但是在330个空字符串之后,我不知道为什么会得到这么多空字符串。谢谢,现在已经解决了。很多窗口没有文本。EnumWindows是一条消防水带,你可以看到所有东西,包括隐藏的窗口。@user1040769:另一方面,由于你使用的是
GetWindowTextLength()
explicitally而不是
GetWindowTextLength()
,一般来说,你应该使用
GetWindowTextW()
explicitally而不是
GetWindowText()
一般匹配。