jtwc 发表于 2022-2-27 20:24

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

各位老师,c语言中遍历获取已知父窗口下所有子窗口句柄出错,该如何改呢?谢谢了,源码如下:
#include <Windows.h>
#include <iostream>
#include <string.h>

using namespace std;

int main()
{
        HWND hd = FindWindow(NULL, "窗口5.0");      //得到父窗口
        hd = GetWindow(hd, GW_CHILD);      //得到父窗口上第一个子窗口
        char s = { 0 };
        int num = 1;
        while (hd != NULL)                  //循环得到所有的子窗口
        {
                memset(s, 0, 200);
                GetWindowText(hd, s, 200);
                cout << num++ << ": " << s << endl;
                hd = GetNextWindow(hd, GW_HWNDNEXT);
        }

        getchar();
        return 0;
}

jtwc 发表于 2022-2-27 20:28

出错如下图

zhiwoda 发表于 2022-2-27 20:45

本帖最后由 zhiwoda 于 2022-2-27 20:48 编辑


HWND hWnd = NULL;
      hWnd = ::FindWindow(_T("XXX"), NULL);
      
      if (hWnd)
      {
               
                HWND hChild = ::GetWindow(hWnd, GW_CHILD);
               

               
               
                while (hChild)
                {
                        char* buf1 = new char;

                        ::GetWindowsText(hChild, buf1, 512);

                        CString str1 = buf1;
                        
                        
                     
                        hChild = ::GetWindow(hChild, GW_HWNDNEXT);
                }
      }

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

zhiwoda 发表于 2022-2-27 20:45

HWND hWnd = NULL;
      hWnd = ::FindWindow(_T("XXX"), NULL);


谢谢老师,不过出错了

zhiwoda 发表于 2022-2-27 21:06

jtwc 发表于 2022-2-27 21:05
谢谢老师,不过出错了

你用的vs201几

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

zhiwoda 发表于 2022-2-27 21:06
你用的vs201几

老师,2015,谢谢了

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

本帖最后由 jtwc 于 2022-2-27 21:39 编辑

zhiwoda 发表于 2022-2-27 21:06
你用的vs201几
老师,改了一下,不报错了,但没有显示

#include <windows.h>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <sstream>
#include <stdio.h>
#include <tchar.h>
#include <string.h>

using namespace std;

int main()
{
      
      HWND hWnd = NULL;
         hWnd = ::FindWindow(_T("窗口5.0"), NULL);

      if (hWnd)
      {

                HWND hChild = ::GetWindow(hWnd, GW_CHILD);

               
                while (hChild)
                {
                //      char* buf1 = new char;
                        char buf1 = { 0 };
                        int num = 1;
                        memset(buf1, 0, 512);
                        ::GetWindowText(hChild, buf1, 512);
                        cout << num++ << ": " << buf1 << endl;
                //      CString str1 = buf1;



                        hChild = ::GetNextWindow(hChild, GW_HWNDNEXT);
                }
      }
      getchar();
      return 0;
}

zhiwoda 发表于 2022-2-27 21:40

jtwc 发表于 2022-2-27 21:09
老师,2015,谢谢了
#include <iostream>
#include <Windows.h>
#include <locale>

using namespace std;


int main()
{

      HWND hWnd = ::FindWindow(NULL, L"XXXX");

      if (hWnd)
      {
                HWND hChild = ::GetWindow(hWnd, GW_CHILD);

                while (hChild)
                {
                        char* buf = new char;

                        ::GetWindowText(hChild, LPWSTR(buf), 512);

                        hChild = ::GetWindow(hChild, GW_HWNDNEXT);



                        setlocale(LC_ALL, "chs");
                        wprintf(L"buf = %s\n", buf);
                }
      }
      else
      {
                printf("Hello,World!\n");
      }



      system("pause");


      return 0;
}

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

zhiwoda 发表于 2022-2-27 21:40
#include
#include
#include


谢谢老师,不过显示和我写的一样

zhiwoda 发表于 2022-2-27 21:52

jtwc 发表于 2022-2-27 21:50
谢谢老师,不过显示和我写的一样

有的是duilib写 的窗体,常规手段捕获不到,要用到钩子hook等手段
页: [1] 2
查看完整版本: 各位老师,c语言中遍历获取已知父窗口下所有子窗口句柄