1. 程式人生 > >FindWindowEx 遍歷所有視窗

FindWindowEx 遍歷所有視窗

 

FindWindowEx  唯一麻煩是第2個引數的指定 .

Explore 下視窗是Z序的  , 實際上就是根據 第一個引數 和 第2個引數 來找 第2個引數後的一個視窗:

HWND child = 0;

child = FindWindowEx  ( NULL , child ,NULL,NULL);

這樣 , child 就是一個Explore ,

然後 , 通過迴圈能夠找到child 的下一個視窗

//遍歷所有子視窗的子視窗 , Z序遍歷
void print_window2(HWND parent , int level)
{
	HWND child = NULL;
	TCHAR buf[MAX_PATH];
	DWORD pid = 0, tid = 0;
	do{
		child = FindWindowEx(parent, child, NULL, NULL);
		int ret = GetWindowText(child, buf, MAX_PATH);
		buf[ret] = 0;
		tid = GetWindowThreadProcessId(child, &pid);
		for (int i = 0; i < level; ++i)
			_tprintf(L"\t");
		_tprintf(L"%s ,  pid:%d, tid:%d\n", buf, pid, tid);
		if (child)
			print_window2(child , level + 1);
	} while (child);
}

//遍歷所有 explore 下的視窗 , Z序遍歷
void print_window()
{
	HWND child = NULL;
	TCHAR buf[MAX_PATH];
	DWORD pid = 0, tid = 0;

	do{
        //查詢 Explore 下的一個視窗,如果能找到則根據 Explore 下的child 繼續找
		child = FindWindowEx(NULL, child, NULL, NULL);
		int ret = GetWindowText(child, buf, MAX_PATH);
		buf[ret] = 0;
		tid = GetWindowThreadProcessId(child, &pid);
		_tprintf(L"%s ,  pid:%d, tid:%d\n", buf, pid, tid);
        
        //遍歷子視窗們
		if (child)
			print_window2(child, 1);
	} while (child);
}