Win32 枚举所有子窗口二种方法

    技术2022-05-19  21

    方法一通过API GetWindow 递归枚举:

    VOID OutputWindow(HWND hWnd){TCHAR szTitle[256] = {0};GetWindowText(hWnd, szTitle, sizeof(szTitle) / sizeof(TCHAR));TCHAR szBuffer[MAX_PATH] = {0};_sntprintf(szBuffer, sizeof(szBuffer) / sizeof(TCHAR) - 1, _T("HWND(%x), Title(%s)/n"), (UINT)hWnd, szTitle);OutputDebugString(szBuffer);}void EnumChild(HWND hParent){if(hParent != NULL){HWND hChild = GetWindow(hParent, GW_CHILD);while(hChild != NULL){EnumChild(hChild);OutputWindow(hChild);hChild = GetWindow(hChild, GW_HWNDNEXT);}}}

     

    方法二 通过API EnumChildWindows

    BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam){ if(IsWindowVisible(hwnd)) {  char sName[128]={0};  GetClassName(hwnd, sName, 128);  if(stricmp(sName, "xx")==0)  {   *(HWND*)lParam=hwnd;  } } return TRUE;}

    EnumChildWindows(hwnd, EnumChildProc, (LPARAM)&parentwnd);

     

    强烈推荐使用方法二!


    最新回复(0)