正文

如何利用FindWindow()函数查找程序2007-03-03 11:03:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/wolfelite/23614.html

分享到:

假设我想运行的外部程序是ABC.EXE,在VB中应如何利用FindWindow()函数查找该程序是否仍在运行?

要使用API,评选建立一个.BAS模块,然后从winapi32.txtk 中Copy如下的FIndWindow()函数的声明:

Declare Function FindWindow Lib "user32" Alias "FindWindowA"(ByVal LpClassName as String,Byval lpWindowName as Stirng ) as Long

这个函数有两个基本点参数,第一个是要找的窗口的类,第二个是要找的窗口的标题.在搜索的时候一定两者都知道,但至少要知道其中的一个.有的窗口的标题的比较容易得到的,如"计算器":,所以搜索时就使用标题进行搜索.但有的软件的标题不是固定的,如"记事本",如果打开的文件不同,窗口标题也不同,这时使用窗口类搜索就比较方便.如果找到了满足条件的窗口,这个函数返回该窗口的句柄,否则返回0.

前面提到的VB的FindWindow()函数的声明将两个基本点参数都定义为String类型,而在实际使用过程中,如果我们忽略某个参数就将该参数的定义又As StriNG书库As Any.这里的As Any 相当于C语言中的强制类型转换.例如,如果我们忽略窗口的类,就将定义修改如下:

Declare Function FIndWindow lib "user32" alias "findwoindowA"(ByVal lpClassName as Any,ByVal lpWIndowName as String) as Long

然后,在调用使用如下语句:

:hwndCalc=FindWIndow(0&,"计算器")

这里的0&就表示忽略类名.需要注意的是FindWindow(0&,"计算器"),和FindWindow("","计算器")在两种完全不同的含义前者表示忽略窗口的类,后者表示窗口的类是个空串.类似的,我们也可以忽略标题而搜索指定的类.

从上面的讨论中可以看出,如果说要搜索的外部程序的窗口标题比较容易的话,怎么问题是比较简单的.可如果窗口的标题不固定的或者根本就没有标题,怎么得到窗口的类吧?如果你安装了Visual C++,你可以攻玉使用其中之一的Spy++(v如果没有VC++,在VB的盘上也可以找到spy),在spy++中有一个FIndWindow工具,它允许你使用鼠标选择窗口,然后Spy++会显示这个窗口的类.

在Win32API中还有一个FindwindowEx,它非常适合寻找子窗口.

阅读(3701) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册