我试图用' Window"填充列表所有活动Windows的对象,但我无法找到在windowList中保存Window信息的方法。 windowList通过lParam参数传递给回调函数。
这是我目前的代码:
std::list <Window> windowList; //in center.h
//in center.cpp:
void Center :: detectWindows()
{
EnumWindows(detectWindowsProc, (LPARAM)&windowList);
}
BOOL CALLBACK detectWindowsProc(HWND hwnd, LPARAM inputList)
{
if (IsWindow(hwnd) && IsWindowEnabled(hwnd) && IsWindowVisible(hwnd))
{
TCHAR TCharTitle[100];
GetWindowText(hwnd, TCharTitle, 100);
std::string title = convertTCharToStr(TCharTitle);
Window * windowPtr;
windowPtr = (Window*)inputList;
Window newWindow((int)hwnd, title, true);
*windowPtr = newWindow;
std::cout << (int)hwnd << " - " << title << std::endl;
}
return true;
}
当我尝试通过for循环打印出windowList中的每个元素时,会弹出一条错误消息,说&#34; Debug Assertion失败!表达式:列表迭代器不兼容&#34;
这是for循环:
void Center::printWindowList()
{
for (std::list<Window>::iterator it = windowList.begin(); it != windowList.end(); ++it)
std::cout << ' ' << it->getTitle();
}
希望有人可以提供帮助
答案 0 :(得分:0)
在您的回调函数中,您将inputList
参数视为Window*
而不是list<Window>*
。试试这个:
BOOL CALLBACK detectWindowsProc(HWND hwnd, LPARAM inputList)
{
if (IsWindow(hwnd) && IsWindowEnabled(hwnd) && IsWindowVisible(hwnd))
{
TCHAR TCharTitle[100];
GetWindowText(hwnd, TCharTitle, 100);
std::string title = convertTCharToStr(TCharTitle);
auto windowPtr = reinterpret_cast<std::list<Window>*>(inputList);
windowPtr->push_back(Window((int)hwnd, title, true));
std::cout << (int)hwnd << " - " << title << std::endl;
}
return true;
}