delphi查找窗口句柄和类
delphi中怎么查找窗口的句柄啊,这个窗口的标题是变动的但是标题“abc”这3个字肯定含有。还有就是怎么查找一个窗口的类,我记得以前有个软件可以显示,不过忘了是什么软件...
delphi中怎么查找窗口的句柄啊,这个窗口的标题是变动的但是标题“abc”这3个字肯定含有。还有就是怎么查找一个窗口的类,我记得以前有个软件可以显示,不过忘了是什么软件了各位高手指点一下,谢谢了
展开
2个回答
展开全部
我是用VC的,delphi不是很懂,不过API还是一样的,说说我的意见。
Findwindow()的第一个参数是表示类名的字符串,第二个参数是表示窗口标题的字符串,你的第一个参数设置错了,QQ主窗口的类是对话框,应该用"#32770"表示,你可以用Spy 查看的。第二个参数也不对,如果设置成nil,那么任意标题的"#32770"类的窗口都会匹配,而它返回的只是找到的第一个窗口的句柄,不一定是QQ。QQ主窗口的标题是空字符串。
但实际上,你即使用FindWindow("#32770","")找到了相应的句柄,它也不一定是QQ的。因为参数里没有任何QQ特有的信息,而系统中存在大量"#32770"的对话框,它们的标题也各种各样,很可能就有空字符串,而它返回的是找到的第一个窗口的句柄,不能保证一定是QQ。所以这个办法很差。较为可行的方法是枚举系统当前的所有进程,从中查找模块名为"QQ"的进程,从进程中查找属于该进程的窗口,当然也不排除存在其他的名为QQ的进程,但这个可能性应该比较小。
我曾经做过针对QQ的一个插件,这是做的过程中的一些体会。
Findwindow()的第一个参数是表示类名的字符串,第二个参数是表示窗口标题的字符串,你的第一个参数设置错了,QQ主窗口的类是对话框,应该用"#32770"表示,你可以用Spy 查看的。第二个参数也不对,如果设置成nil,那么任意标题的"#32770"类的窗口都会匹配,而它返回的只是找到的第一个窗口的句柄,不一定是QQ。QQ主窗口的标题是空字符串。
但实际上,你即使用FindWindow("#32770","")找到了相应的句柄,它也不一定是QQ的。因为参数里没有任何QQ特有的信息,而系统中存在大量"#32770"的对话框,它们的标题也各种各样,很可能就有空字符串,而它返回的是找到的第一个窗口的句柄,不能保证一定是QQ。所以这个办法很差。较为可行的方法是枚举系统当前的所有进程,从中查找模块名为"QQ"的进程,从进程中查找属于该进程的窗口,当然也不排除存在其他的名为QQ的进程,但这个可能性应该比较小。
我曾经做过针对QQ的一个插件,这是做的过程中的一些体会。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询