jtwc 发表于 2022-2-27 13:15

各位老师,c语言中已知父窗口标题,如何遍历获取所有子窗口句柄

本帖最后由 jtwc 于 2022-2-27 13:26 编辑

各位老师,c语言中已知父窗口标题,如何遍历父窗口下的所有子窗口,并获取所有子窗口的句柄呢?谢谢了
#include <windows.h>
#include <stdio.h>

int main()

{                        
            //1.通过父窗口标题获取父窗口句柄
                        HWNDhGameWnd1 = FindWindow(NULL, "窗口5.0");
                        if (hGameWnd1 == 0)
                        {
                              printf("没有找到该窗口.\n");
                              getchar();
                              return 0;
                        }

                        //2.通过父窗口句柄获取进程ID
                        unsigned long dwPID1 = 0;
                        GetWindowThreadProcessId(hGameWnd1, &dwPID1);

                        if (dwPID1 == 0)
                        {
                              printf("获取ID失败.\n");
                              getchar();
                              return 0;
                        }

                        printf("窗口5.0进程PID:%d\n", dwPID1);

                        //3.通过PID获取进程句柄
                        //打开进程
                        HANDLE hProcess1 = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID1);
                        if (hProcess1 == 0)
                        {
                              printf("打开进程失败.\n");
                              getchar();
                              return 0;
                        }
         
                getchar();
                return 0;
      }

bester 发表于 2022-2-27 15:47

EnumChildWindows 枚举父窗口下面的所有子窗口 但是这个好像效率不是很高,稳定性一般

jtwc 发表于 2022-2-27 17:43

bester 发表于 2022-2-27 15:47
EnumChildWindows 枚举父窗口下面的所有子窗口 但是这个好像效率不是很高,稳定性一般

老师,该如何写呢?谢谢了

unmask 发表于 2022-2-27 21:37

EnumChildWindows()函数的作用枚举子窗口(按顺序调用回调函数,并将子窗口的句柄传递给了回调函数)。函数原型:

BOOL WINAPI EnumChildWindows(
HWND hWndParent, //父窗口句柄
WNDENUMPROC lpEnumFunc, //回调函数
LPARAM lParam //自定义参数
);
回调函数的返回值将会影响到这个API函数的行为:如果回调函数返回true,则枚举继续直到枚举完成;如果返回false,则将会中止枚举
。函数原型如下:
BOOL CALLBACK EnumChildProc(
HWND hwndChild,//子窗口句柄
LPARAM lParam //参数
)

// 遍历每个子窗口,调用回调函数EnumChildProc
EnumChildWindows(hwnd, EnumChildProc, (LPARAM)&rcClient);

// 定义回调函数
BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam)
{
    // TODO 操作子窗口hwndChild
    return TRUE;
}

jtwc 发表于 2022-2-27 21:51

unmask 发表于 2022-2-27 21:37
EnumChildWindows()函数的作用枚举子窗口(按顺序调用回调函数,并将子窗口的句柄传递给了回调函数)。函数 ...

谢谢老师,不过写不正确

jtwc 发表于 2022-2-28 15:12

谢谢各位老师,已解决
页: [1]
查看完整版本: 各位老师,c语言中已知父窗口标题,如何遍历获取所有子窗口句柄