枚举窗口的两种方法(自己实现 AND API)

#include 
#include 
// 枚举特定类窗口的所有子窗口,或者特定标题等等
void EnumWindows(HWND hParent,LPCSTR szTargetClassName)
{
	// 这种方法获得的窗口可能已经销毁了
	CHAR szClass[0x100];
	HWND hChild = GetWindow(hParent, GW_CHILD);
	if (hChild) {
		EnumWindows(hChild,szTargetClassName);
		while (hChild = GetWindow(hChild, GW_HWNDNEXT)) {
			EnumWindows(hChild, szTargetClassName);
		}
	}
	GetClassNameA(hParent, szClass, 0x100);
	if (strcmpi(szTargetClassName,szClass) == 0) {
		printf("%p\r\n",hParent);
	}
}
BOOL CALLBACK EnumWindowsProc(HWND hWnd,LPARAM lParam)
{
	//DO SOMETHING
	return TRUE;//继续枚举
	return FALSE;//结束
}
int main()
{
	// 微软说这种方法枚举的窗口更靠谱
	EnumWindowsEx(EnumWindowsProc,0);
	EnumWindows(GetDesktopWindow(),"XXXXX");
	getchar();
	getchar();
	return 0;
}


 

你可能感兴趣的:(基础知识,windows编程)