我想获取qq查找窗口下某一个控件的句柄,但不知道它具体的Classname怎么解决

wsj19860218 2009-12-27 07:53:37
我想获取QQ查找窗口下某一个控件的句柄,我已用FindWindowEx()得到了该查找窗口的句柄,我还想利用FindWindowEx()得到此窗口下某一个控件的句柄,但不知道它的第三个参数即Classname,怎么解决?
...全文
405 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wsj19860218 2009-12-29
  • 打赏
  • 举报
回复
谢谢各位!我用spy++已经解决了!!!!
mingcsharp 2009-12-28
  • 打赏
  • 举报
回复
同意,Spy++就是干这个的
windowformpoint
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yulinlover 的回复:]
用Spy++去查一下,或者EnumWindows
[/Quote]

同意,Spy++就是干这个的
Jave.Lin 2009-12-27
  • 打赏
  • 举报
回复
Passing
Mark
Study
Up
mngzilin 2009-12-27
  • 打赏
  • 举报
回复
用C++写过,没用C#写过
yulinlover 2009-12-27
  • 打赏
  • 举报
回复
用Spy++去查一下,或者EnumWindows
lijunwsp 2009-12-27
  • 打赏
  • 举报
回复
加上上面脚本文件中的标题,方便理解
序号,备注,操作,对象,值1,值2,超时,保存结果,异常操作,异常值,对象值
1,启动计算器,Run,,calc.exe,,,Auto,FailureSkipStep,0,
2,Sleep,Sleep,,1000,,,Auto,FailNext,0,
3,点击按钮1,Click,But_One,,,2,Auto,FailureSkipStep,0,SciCalc(text=计算器)Button(text=1)
4,点击按钮+,Click,But_Add,,,2,Auto,FailureSkipStep,0,SciCalc(text=计算器)Button(text=+)
5,点击按钮2,Click,But_Two,,,2,Auto,FailureSkipStep,0,SciCalc(text=计算器)Button(text=2)
6,点击按钮=,Click,But_Equal,,,2,Auto,FailureSkipStep,0,SciCalc(text=计算器)Button(text==)
7,比较错误结果,Get,Txt_Result,text,55. ,2,Auto,FailNext,,SciCalc(text=计算器)Edit()
8,比较正确结果,Get,Txt_Result,text,3. ,2,Auto,FailNext,,SciCalc(text=计算器)Edit()
9,关闭计算器,Close,CalcWindow,,,2,Auto,FailureSkipStep,0,SciCalc(text=计算器)
10,杀掉计算器进程,Kill,,calc.exe,,,Auto,FailNext,,
lijunwsp 2009-12-27
  • 打赏
  • 举报
回复
我最近在这这方面的研究,比如你想定位一个控件,如登录窗体的登录按钮,那么你首先得知道登录窗体的句柄,知道了登录窗体的句柄再去找登录按钮就比较容易了
下面是我写的脚本文件中的内容,用C#去解析然后执行

3,点击按钮1,Click,But_One,,,2,Auto,FailureSkipStep,0,SciCalc(text=计算器)Button(text=1)
...
9,关闭计算器,Close,CalcWindow,,,2,Auto,FailureSkipStep,0,SciCalc(text=计算器)
10,杀掉计算器进程,Kill,,calc.exe,,,Auto,FailNext,,

我拿第3步来举例,即我点击计算器中的按钮1,我知道了计算器的类名是“SciCalc”,首先获取所有顶级窗口的句柄,判断类名是“SciCalc”则再比较该句柄的标题是不是“计算器”,如果是的话再查找按钮1,比如计算器的句柄是“123456”,那么获取“123456”下所有的子句柄,从子句柄子一个一个比较,查找类名是“Button”且标题是“1”的就行了
这上面只是一个小例子,当然很多时间你要标识一个对象得用多个属性,比如控件的标题是1,但是readonly是true、相对于父亲窗体的x、y坐标等,可以标识多个属性然后进行比较,至于怎么获取所有顶级窗口?怎么获取所有的子窗体?百度或Google一下有很多了
wuyq11 2009-12-27
  • 打赏
  • 举报
回复
string lpszClass = "EditComponent"; //需要查找的子窗口的类名,也就是输入框
FindWindowEx(ParenthWnd,EdithWnd,lpszClass,"");
在spy++里看看

110,572

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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