如何用C语言写一个获取窗口句柄和其他信息的小程序.

博主分享了作为一个SDK编程初学者,如何利用C语言编写一个小程序来获取窗口句柄、ClassName和WindowText。通过EnumWindows、EnumChildWindows、GetClassName和GetWindowText四个API实现了遍历并显示所有窗口及其子窗口的信息。代码已上传至Github,欢迎指正。
摘要由CSDN通过智能技术生成

博主是一个SDK编程的初学者,始终坚持学技术要任务驱动的观念,在学习了有关Windows进程,内核对象,进程管理和控制的知识之后,就迫不及待地想要设计一个内存修改器练练手,然而在获取当前运行的各窗口的句柄这一步就卡住了,经过一番查阅和钻研,终于写出了如下的CUI小程序,解决了获取窗口及子窗口句柄,获取ClassName,获取WindowText的问题。
不知道这个小程序能不能替代SPY++的部分功能……

//CUI:相对于GUI(Graphical User Interface)图形用户界面而言的Command User Interface命令行用户界面。

PS:博主才疏学浅,程序中如有错误,欢迎各位指正!

该程序基于下列四个API实现
EnumWindows()

EnumWindows()
//BOOL EnumWindows(WNDENUMPROC,LPARAM)
//WNDENUMPROC 为回调函数的地址
//LPARAM为你自已定义的参数,将会传递给回调函数.

EnumChildWindows()

函数原型: 

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

GetClassName()

GetClassName(hwnd,classname,256);
//GetClassName();hwnd是需要传入的句柄/classname是需要传入的LPTSTR缓冲区,用于接收类名/256是int,指定classname的大小,单位字节.
//获取成功将返回返回值为拷贝到指定缓冲区的字符个数,如果函数失败,返回值为0.

GetWindowText()

//与GetClassName参数完全一致,不再赘述。

//关于它们的参数列表和解释会在下面的代码注释中体现,想要了解以上四个函数的使用方法的话也可以作为参考。

基本思路比较简单,先调用EnumWindows,遍历所有父窗体,在遍历时再调用EnumChildWindows,在每一个父窗体下遍历其子窗体,如果有的话即输出。

以下为源码:

/*
程序名称: 简易Windows窗体查看器
程序功能: 查看当前状态下所有窗体的classname,windowtext,hwnd(窗体句柄).
程序类别: CUI WIN32应用程序 
作者:     北赤道逆流 
联系方式: zhangjunshuo_sdu@outlook.com 
注意:     本程序编译环境为 WindowsXP x86 Dev-C++ 5.4.2
        
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值