VC++.顶层窗口遍历

#include <vector>
BOOL TraversalTopWnd(OUT std::vector<HWND> &vec)
{
	vec.clear();
	try
	{
		HWND hEnumWnd = GetTopWindow(0);
		while (hEnumWnd)
		{
			if (GetParent(hEnumWnd)== 0)
			{
				vec.push_back(hEnumWnd);
			}
			hEnumWnd = GetWindow(hEnumWnd, GW_HWNDNEXT);
		}
	}
	catch (...)
	{
		OutputDebugStringA(__FUNCTION__);
	}
	return vec.size() > 0;
}

int main()
{
	std::vector<HWND> vec;
	std::cout << TraversalTopWnd(vec) << endl;
	TCHAR sz[MAX_PATH] = { 0 };
	DWORD dwPid = 0;
	for each (HWND var in vec)
	{
		printf("窗口%08X", var);
		GetWindowThreadProcessId(var, &dwPid);
		printf(" 进程%08X|%d", dwPid, dwPid);
		::GetWindowText(var, sz, MAX_PATH * sizeof(TCHAR) - sizeof(TCHAR));
		printf(" 标题%S", sz);
		memset(sz, 0, MAX_PATH * sizeof(TCHAR));
		::GetClassName(var, sz, MAX_PATH * sizeof(TCHAR) - sizeof(TCHAR));		
		printf(" 类名%S", sz);
		printf("\r\n");
	}

	return 0;
}
posted @ 2020-03-11 08:35  N.everever  阅读(450)  评论(0)    收藏  举报