手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>delphi>列表

如何控制其他程序窗体上的窗口控件:下

来源:互联网 作者:西部数码 时间:2008-04-09
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
实在不好意思,写了上,中后,由于一直忙于项目,就没有完成最关键的工作。导致很多网友给我发邮件询问答案。同时对某些人发表的评论感觉到很伤心,本来就申明了文章写的很浅薄无知,很罗里八嗦的,并且将自己的心得发布给大家看,我自己不但没有好处,还浪费时间,凭什么发表了东西要被人骂?所以就一直不想继续写了。 现在看我写的上,中,可真是够细的了。其实,几句话就搞定,但是我那时可没有理解什么回调之类的东西,所以罗嗦很久了。 要得到其他程序上的控件句柄,首先给一个假定:其他程序的UI是不会变化的,比如,我们打开QQ,那么只要不升级,那么上午打开QQ,和下午打开QQ,其上的菜单,按纽之类的不会突然没有或者突然增加了。如果有变化,我这个方法不适用。 得到其他程序上的控件句柄,简单来说,基本流程是这样的。 首先运行要控制的窗口程序。 然后得到主窗口的句柄,上已经搞定。 然后有主窗口句柄得到该窗口上所有的控件句柄,中已经搞定。 有了上两步的基础,我们可以在正式编写程序控制其他程序窗口控件之前,再写一个辅助工具,用这个工具来帮助我们来确定我们要控制的控件句柄。方法如下: 通过 function EnumChildWindows(hWndParent: HWND; lpEnumFunc: TFNWndEnumProc; lParam: LPARAM): BOOL; stdcall; function EnumChildWndProc(AhWnd:LongInt; AlParam:lParam):boolean;stdcall; 在EnumChildWndProc我们得到窗口中所有的控件句柄,每得到一个句柄,我们给这个控件发送一个SetWindowText消息,写上一个序号,从0开始,一直写完。 然后呢?我们看看我们想控制的程序的窗口,控件上的文字是不是变成了数字?对于不能显示文字的,我们就采用其他方法,只要能在这个过程中能找到控件的序号就可以了。 现在我们知道了需要控制的控件在原主窗口中被列举时的序号了。现在知道该怎么做了吧? 对,现在正式写控制程序了。同样的,我们在function EnumChildWndProc(AhWnd:LongInt; AlParam:lParam):boolean;stdcall; 中用一个计数器,得到当前句柄序号,与需要控制的句柄序号对比,就确定下来需要控制的控件句柄了。 其他就好办了。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!