VC++.子窗口遍历

#include <vector>
BOOL TraversalChildWnd(OUT std::vector<HWND> &vec, IN HWND hParent)
{
	vec.clear();
	try
	{
		HWND hEnumWnd = GetWindow(hParent, GW_CHILD);
		while (hEnumWnd)
		{
			vec.push_back(hEnumWnd);
			hEnumWnd = GetNextWindow(hEnumWnd, GW_HWNDNEXT);
		}
	}
	catch (...)
	{
		OutputDebugStringA(__FUNCTION__);
	}
	return vec.size() > 0;
}

int main()
{
	std::vector<HWND> vec;
	std::cout << TraversalChildWnd(vec, (HWND)0x003605A4) << 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 19:21  N.everever  阅读(468)  评论(0)    收藏  举报