【请教】各位老师,在下有一个关于获取窗口句柄的问题

小木头V 2014-07-28 05:22:27
首先,我说明一下这个问题产生的过程。
过程:
我本来的目的是想要监控一个外部软件里面label的text,如果这个label.text="信息:需要清理",那么我做的软件就会向CCleaner要求清理。
我的思路是这样的:
1、通过进程名获取进程pid(因为对象窗口的标题会变,所以不通过窗口标题操作)
2、根据进程pid获取窗口句柄(正在苦恼的)
3、遍历窗口里面的控件,如果object.text存在“信息”,那么我就会监控这个控件的text(利用timer)。(以前没试过,准备尝试)
4、如果text="信息:需要清理",那么我就重复1、2的步骤,然后遍历控件,找到一个控件的text="运行清理器(R)",然后点击他。
思路路上(有些操作以前没有尝试过,所以思路上有可能出现问题)

接着,我说一下我的查找资料的经历
经历:
一开始,我通过百度进行搜寻相关的资料,找到一些。我把那些资料上的内容迁移到我的代码里面去,并且进行修改和调试,但是依然是失败的。几番折磨,耐心大损。

最后,希望各位老师能帮助一下,在下不胜感激!(b(^o^)d)
...全文
213 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
小木头V 2014-07-30
  • 打赏
  • 举报
回复
引用 10 楼 SYGKT 的回复:
[quote=引用 9 楼 ldmxyzldm 的回复:] [quote=引用 8 楼 Runnerchin 的回复:] 你现在卡在哪一步?思路没什么问题。
我现在卡在如何通过进程Pid获取窗口句柄[/quote] http://www.cnblogs.com/qiuyi21/articles/1302732.html http://support.microsoft.com/kb/242308/zh-cn 所以说这个东西是有api可以实现的,你网上随便找一下就有了。 还有不用api可以用process类,process实例有个属性叫mainwindow出来就是主窗口的handle[/quote] 谢谢,这个方法能行!
X-i-n 2014-07-29
  • 打赏
  • 举报
回复
你现在卡在哪一步?思路没什么问题。
SYGKT 2014-07-29
  • 打赏
  • 举报
回复
引用 9 楼 ldmxyzldm 的回复:
[quote=引用 8 楼 Runnerchin 的回复:] 你现在卡在哪一步?思路没什么问题。
我现在卡在如何通过进程Pid获取窗口句柄[/quote] http://www.cnblogs.com/qiuyi21/articles/1302732.html http://support.microsoft.com/kb/242308/zh-cn 所以说这个东西是有api可以实现的,你网上随便找一下就有了。 还有不用api可以用process类,process实例有个属性叫mainwindow出来就是主窗口的handle
害羞的大叔 2014-07-29
  • 打赏
  • 举报
回复
做过一个迅雷自动登录,说下自己的看法。可以考虑定位软件坐标截图识别文字,然后根据识别的文字,模拟点击软件界面处理按钮位置。当然最好的方法还是得到具体控件,仅供参考。
小木头V 2014-07-29
  • 打赏
  • 举报
回复
引用 8 楼 Runnerchin 的回复:
你现在卡在哪一步?思路没什么问题。
我现在卡在如何通过进程Pid获取窗口句柄
vbfool 2014-07-29
  • 打赏
  • 举报
回复
我去,还有邀请回答这回事么?话说我没做过这方面的功能,对WinAPI熟悉程度有限的很。
小木头V 2014-07-29
  • 打赏
  • 举报
回复
引用 3 楼 SYGKT 的回复:
你先用spy++看一下有没有这个句柄,类名叫什么 知道了进程句柄有api可以抓main window句柄的(不过我忘了是什么,你可以去找找) 还有process类自带这个功能
引用 4 楼 xxxxing 的回复:
[quote=引用 2 楼 ldmxyzldm 的回复:] [quote=引用 1 楼 bdmh 的回复:] 首先搞清楚你要监控的label是什么,不同开发 语言的label不一样,有的没有句柄,你怎么找,有的不是text属性是caption属性,你怎么知道
很明显的是,我的确不清楚对象软件是什么语言开发的,还有用的是text还是caption。 很感谢老师你的提醒。 如果这样说的话,很麻烦。所以我们就不去讨论这个label有没有句柄,直接默认他是有句柄的,而且属性用的是text。 那么这种情况下,我们应该怎么做呢? (PS:解决问题,我想一步一步解决,遇到的先解决,后来遇到的后来解决。如果这个label真的没有窗口,也就是没有句柄,那么我再想想其他方法。我想把有窗口的和没有窗口的、text和caption的解决方法都学一遍。) b(^o^)d[/quote] PS:对于程序问题,最好举出你现在遇到的,而又解决不了的,理论这东西!!! 看例子,讲解,通俗易懂![/quote] 谢谢两位,我去尝试一下。
平头哥哥 2014-07-28
  • 打赏
  • 举报
回复
引用 2 楼 ldmxyzldm 的回复:
[quote=引用 1 楼 bdmh 的回复:] 首先搞清楚你要监控的label是什么,不同开发 语言的label不一样,有的没有句柄,你怎么找,有的不是text属性是caption属性,你怎么知道
很明显的是,我的确不清楚对象软件是什么语言开发的,还有用的是text还是caption。 很感谢老师你的提醒。 如果这样说的话,很麻烦。所以我们就不去讨论这个label有没有句柄,直接默认他是有句柄的,而且属性用的是text。 那么这种情况下,我们应该怎么做呢? (PS:解决问题,我想一步一步解决,遇到的先解决,后来遇到的后来解决。如果这个label真的没有窗口,也就是没有句柄,那么我再想想其他方法。我想把有窗口的和没有窗口的、text和caption的解决方法都学一遍。) b(^o^)d[/quote] PS:对于程序问题,最好举出你现在遇到的,而又解决不了的,理论这东西!!! 看例子,讲解,通俗易懂!
SYGKT 2014-07-28
  • 打赏
  • 举报
回复
你先用spy++看一下有没有这个句柄,类名叫什么 知道了进程句柄有api可以抓main window句柄的(不过我忘了是什么,你可以去找找) 还有process类自带这个功能
小木头V 2014-07-28
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
首先搞清楚你要监控的label是什么,不同开发 语言的label不一样,有的没有句柄,你怎么找,有的不是text属性是caption属性,你怎么知道
很明显的是,我的确不清楚对象软件是什么语言开发的,还有用的是text还是caption。 很感谢老师你的提醒。 如果这样说的话,很麻烦。所以我们就不去讨论这个label有没有句柄,直接默认他是有句柄的,而且属性用的是text。 那么这种情况下,我们应该怎么做呢? (PS:解决问题,我想一步一步解决,遇到的先解决,后来遇到的后来解决。如果这个label真的没有窗口,也就是没有句柄,那么我再想想其他方法。我想把有窗口的和没有窗口的、text和caption的解决方法都学一遍。) b(^o^)d
bdmh 2014-07-28
  • 打赏
  • 举报
回复
首先搞清楚你要监控的label是什么,不同开发 语言的label不一样,有的没有句柄,你怎么找,有的不是text属性是caption属性,你怎么知道

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧