首页 > 系统相关 >windows下C++获取其它窗口中组件的信息

windows下C++获取其它窗口中组件的信息

时间:2023-08-17 10:14:09浏览次数:40  
标签:控件 hChildWnd 窗口 pt windows C++ 获取 窗体 其它窗口

抄自:https://pythonjishu.com/xfqbhrlejawmdfh/

C++获得其他程序窗体控件中信息是一个比较常见的需求,例如在自动化测试、窗口助手等场景下都有可能用到。下面我们就介绍一下C++获得其他程序窗体控件中信息的方法。

安装Visual Studio

获得其他程序窗体控件中信息,在Windows下通过Win32 API是最常用的方法。而在Win32 API的基础上,可以利用Visual Studio提供的MFC等框架进行二次封装,简化获得其他程序窗体控件中信息的工作。因此,在进行其他程序窗体控件信息获取之前,我们需要安装Visual Studio。

查找窗体控件

在C++中获取其他程序中窗口控件的信息,需要通过Win32 API提供的一些函数来实现。其中,FindWindowFindWindowExEnumWindowsEnumChildWindows等函数是实现这个目的的常用函数。

以下是一段查找窗体和控件的代码示例:

HWND hMainWnd = FindWindow(nullptr, _T("窗口标题"));//找到主窗口
HWND hChildWnd = FindWindowEx(hMainWnd, nullptr, _T("控件类名"), _T("控件标题"));//找到子窗口控件
if (hChildWnd)
{
   TCHAR szText[100];
   GetWindowText(hChildWnd, szText, 100);//获取控件文本
}
  • FindWindow函数用于根据窗口标题查找窗口句柄;
  • FindWindowEx函数用于根据父窗口句柄、子控件类名、子控件标题查找子控件句柄;
  • GetWindowText函数用于获取控件文本。

在实际使用中,可以使用Windows Spy等工具来获取窗口标题、控件类名、控件标题等信息来修改代码,使代码更加准确地获取目标窗口及控件信息。

操作窗体控件

通过获取其他程序窗体控件的句柄,就可以对其进行一些操作。以下是一段演示如何模拟鼠标点击的代码示例:

HWND hMainWnd = FindWindow(nullptr, _T("窗口标题"));//找到主窗口
HWND hChildWnd = FindWindowEx(hMainWnd, nullptr, _T("控件类名"), _T("控件标题"));//找到子窗口控件
if (hChildWnd)
{
   POINT pt; 
   pt.x = 50; 
   pt.y = 50; 
   ClientToScreen(hChildWnd, &pt);

   PostMessage(hChildWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(pt.x,pt.y));
   PostMessage(hChildWnd, WM_LBUTTONUP,   0,            MAKELPARAM(pt.x,pt.y));
}
  • ClientToScreen函数用于将控件内部的坐标转换为屏幕坐标;
  • PostMessage函数用于向指定的窗口或控件发送消息。

在实际使用时,可以结合Windows Spy等工具获取需要模拟的鼠标消息,在代码中进行适当的修改,以实现模拟鼠标点击等操作。

Python技术站热门推荐: PDF电子发票识别软件,一键识别电子发票并导入到Excel中! 10大顶级数据挖掘软件! 人工智能的十大作用!

 

总结

以上就是C++获得其他程序窗体控件中信息的方法的详细攻略。掌握了这些方法,就可以实现窗口助手、自动化测试等高级应用。也需要注意,获得其他程序窗体控件中信息这个功能受到Windows的安全限制,有一定的局限性,如果窗口的控件句柄不可用,则无法获取其信息。因此,需要在应用中对这些相应的限制进行处理。

 

标签:控件,hChildWnd,窗口,pt,windows,C++,获取,窗体,其它窗口
From: https://www.cnblogs.com/yyybill/p/17636847.html

相关文章

  • C++11的新特性
    2.1.1longlong类型除字符和布尔类型外,其他整形用于表示不同尺寸的整形,一个longlong至少和一个long一样大,其中,数据类型longlong是在C++11中新定义的2.2.1列表初始化 ......
  • 漫谈 C++ 的各种检查
    原文:《漫谈C++的各种检查》为什么代码中需要各种检查?在C++中调用一个函数、使用一个类、实例化一个模板时,对传入的参数、使用的时机,往往会有很多 限制 (constraint/restriction)(例如,数值参数不能传入负数、对象的访问不是线程安全的、函数调用不能重入);而处理限制的方法有很......
  • C# MemCached学习笔记(一)-Windows安装MemCached
      直接采用菜鸟教程的安装教程即可;原文地址:https://www.runoob.com/memcached/window-install-memcached.htmlWindows下安装Memcached官网上并未提供Memcached的Windows平台安装包,我们可以使用以下链接来下载,你需要根据自己的系统平台及需要的版本号点击对应的链接下载......
  • c++的线程初探-2
    (目录)一、条件变量条件变量是一种线程同步机制。当条件不满足时,相关线程被一直阻塞,直到某种条件出现,这些线程才会被唤醒。C++11的条件变量提供了两个类:condition_variable:只支持与普通mutex搭配,效率更高。condition_variable_any:是一种通用的条件变量,可以与任意mutex搭配(包......
  • windows 打不开github
    配置github访问环境解决国内github.com打不开的最最最准确方法_杨大脸I的博客-CSDN博客 本地下载githubcode如何使用git下载GitHub代码-知乎(zhihu.com)......
  • 一个可将执行文件打包成Windows服务的.Net开源工具
    Windows服务一种在后台持续运行的程序,它可以在系统启动时自动启动,并在后台执行特定的任务,例如监视文件系统、管理硬件设备、执行定时任务等。今天推荐一个可将执行文件打包成Windows服务的工具,方便我们封装第三个的软件。项目简介winsw一个基于.Net开发的开源项目,可以帮助开发......
  • C++ Constructor And Destructor
    ifyouhaveproblemswithconstructorsanddestructors,youcaninsertsuchprintstatementsinconstructorsforyourrealclassestoseethattheyworkasintended.Forlargerprograms,thisexactkindoftracingbecomestedious,butsimilartechniquesa......
  • 【转载】c++调用win32API控制打印机打印
    原文:https://blog.csdn.net/cheng448208985/article/details/55510687win32实现将原始数据发送给打印机1、调用OpenPrinter()打开打印机,获取打印机句柄。2、初始化DOCINFO打印机结构体。3、调用StartDocPrinter()表明应用程序准备发送文档数据给打印机。4、调用StartPagePrin......
  • C++ Cast And Go Cast
    C++Astatic_castcanbeusedtoexplicitlyconvertbetweenrelatedpointertypes,suchasvoid*anddouble*reinterpret_castcancastbetweenunrelatedtypes,suchasintanddouble*.const_castcan“castawayconst.”Forexample:int*pi=static_ca......
  • Windows10下Notepad++详细安装过程
     1、下载安装包官网地址:DownloadNotepad++-free-latestversion(softonic.com)  2、执行安装包         找txt或者sql、html后缀文件,右键即可看到 代表安装成功......