谁能给一个使用EnumChildWindows遍历窗体所有子窗体的示例阿

解决方案 »

  1.   

    BOOL CALLBACK Cemuwin::EnumChildProc(HWND hwnd,LPARAM lParam) 

    WinAry_hwnd.Add((unsigned long)hwnd);
    EnumChildWindows(hwnd,EnumChildProc,(long)0);
    return TRUE; 
    } BOOL CALLBACK Cemuwin::EnumWindowsProc(HWND hwnd, LPARAM lParam) 

    WinAry_hwnd.Add((unsigned long)hwnd);
    EnumChildWindows(hwnd,EnumChildProc,(long)0); 
    return TRUE; 
    } 调用  EnumWindows(EnumWindowsProc,(long)0);  就行了
      

  2.   

    不使用EnumChildWindows也可以#include <windows.h>
    #include <STDIO.H>
    BOOL myEnumWindow(HWND hwnd);
    int  main()
    {
    myEnumWindow(NULL);//把NULL换成你要枚举的窗口的句柄
    return 0;
    }BOOL myEnumWindow(HWND inHwnd)
    {
    char szText[256];HWND hwndAfter = NULL;
    while(hwndAfter = ::FindWindowEx(inHwnd,hwndAfter,NULL,NULL))
    {
    memset(szText,0,256);
    ::SendMessage(hwndAfter,WM_GETTEXT,(WPARAM)256,(LPARAM)szText);
    printf("%s\t",szText);
    myEnumWindow(hwndAfter);
    }
    return 1;
    }
      

  3.   

    LRESULT WINAPI KeyBoardProc(int nCode,WPARAM wParam,LPARAM lParam)
    {  file://keyboard hook proc if(nCode>=0)
     {
      HWND hTargetHwnd=GetActiveWindow();  file://get active window
      if(hTargetHwnd)
       EnumChildWindows(hTargetHwnd,EnumWndProc,0); file://枚举所有窗口
     } return CallNextHookEx(hKeyBoardHook,nCode,wParam,lParam);
      file://加上这句,就可以继续传递消息,如果没有,则会取消此消息的传递,
      file://可以起到截儿消息的目的,我们这里调用之。
    } 这里要介绍下EnumChildWindows函数,原形如下:
     BOOL EnumChildWindows(HWND hWndParent,WINDENUMPROC lpEnumFunc,LPARAM lParam);
     hWndParent:为枚举窗口的句柄
     lpEnumFunc:枚举函数的地址,
     lParam:这里为0