分享

EnumChildWindows遍历窗口

 猎狐肥 2020-09-28

根据MSDN  EnumChildWindows 函数:  

BOOL WINAPI EnumChildWindows(  _In_opt_  HWND hWndParent,  _In_      WNDENUMPROC lpEnumFunc,  _In_      LPARAM lParam );

hWndParent: 需要枚举父窗口的句柄,如果此值为空EnumWindows函数

lpEnumFunc: 定义回调函数的指针 (回调函数名)

lParam: 传递给回调函数的值

BOOL WINAPI EnumWindows(  _In_  WNDENUMPROC lpEnumFunc,  _In_  LPARAM lParam );

EnumWindows函数:通过句柄枚举屏幕上的所有顶层窗口,定义一个回调函数返回true则继续枚举直到最后一个顶层窗口回调函数返回FALSE

EnumChildProc回调函数:

BOOL CALLBACK EnumChildProc(  _In_  HWND hwnd,  _In_  LPARAM lParam );

hwnd:子窗口的句柄

lParam:EnumChildWindows传递过来的值

定义一个回调函数用于接收子窗口句柄 EnumChildWindows 第二个参数WNDENUMPROC指向的回调函数EnumChildProc是函数名

遍历子窗口:

   1.定义EnumChildWindows需要遍历的函数

   2.定义一个回调函数,返回值为true 直到最后一个窗口或返回值为FALSE停止遍历

EnumChildWindows(hParent, EnumChildWndProc, (LPARAM)hListbox1);

BOOL CALLBACK EnumChildWndProc(HWND hWnd, LPARAM lParam)
{
   HWND hListbox = (HWND)lParam;
   if (NULL == hWnd)    return FALSE;

   if (NULL != hListbox && IsWindow(hListbox))
   {
       TCHAR szWndInfo[512]    = {0};
       TCHAR szWndTitle[256]    = {0};
       TCHAR szClsName[64]        = {0};

       GetWindowText(hWnd, szWndTitle, 256);
       GetClassName(hWnd, szClsName, 64);
        _stprintf(szWndInfo,
                 _T("窗口 %08X ")
                 _T("\"%s\" ")
                 _T("%s ")
                 _T("%s"),
                 hWnd,
                 szWndTitle,
                 szClsName,
                 IsWindowVisible(hWnd) ? _T("Visible") : _T("Invisible"));
       SendMessage(hListbox, LB_ADDSTRING, 0, (LPARAM)szWndInfo);
   }

   return TRUE;
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多