发信人: xiaqiang()
整理人: leitiger(2002-06-05 23:49:05), 站内信件
|
pb中API调用之三-判断应用程序是否打开
应用程序通常需要查询其他运行于主机上打开的应用程序,并要判断是否另一个 应用程序需要先被打开。
可以用两种方法完成这项工作。
1。findwindow()API函数:
申明如下:
//WIN31
FUNCTION uint findwindow(string szclass,string szname) library "user .exe"
//win32
FUNCTION uint findwindow(string szclass,string szname) library "user32 .dll"
上面的两个参数可以是NULL,这时函数要匹配所有的类和标题,如果能找到的话 ,函数将返回窗口的窗口句柄,反之,返回0。
如:若要查看windows calculator应用程序是否已打开,代码如下:
unit hwnd
hwnd=g_app.externals.uf_finwindo(scicalc","calculator")
if hwnd=0 then
run("calc")
else
g_app.externals.uf_setfocus(hwnd)
end if
注意:setfocus(),可以把已打开的窗口带到前景。setfocus()函数要求一个win dows句柄为参数,在pb内定义如下:
//win31:
function uint setfocus(uint hwnd) library "user.exe"
//win32
function uint setfocus(uint hwnd) library "user32.dll"
若要知道dos提示窗口是否已打开,需要把类名参数设置为tty,若要查找特定的d os提示符窗口,可以查找名 为ms-dos prompt的窗口,大小写,空格,以及 字符 必须完全与该窗口的匹配。
2。只用于win16
两个函数:getmodulehandle()和getmoduleusage()
getmodulehandle()将返回lpszmodulename指定的模块的句柄,否则将返回null.
int getmoduleusage()(hinstance hinst);
getmoduleusage()将返回由hinst指定的模块使用数目,windows操作系统每当应 用程序加载时都将梯增模块的引用数,每当程序关闭时,递减该数。申明如下:
//win31
function uint getmodulehandle(string szmoudlename)library "krnl386.exe "
function uint getmoduleusage(uinthend) library "krnl386.exe"
如检查已经运行的word是否存在的代码如下;
uin t uimodule
integer nusage
uimodule=getmodulehandle("winword.exe")
nusage=getmoduleusage(uimodule)
if nusage=0 then
run(winword.exe")
end if
利用handle()函数的可选参数可以查看同一个可执行文件的另一个pb应用程序的 存在,如下:
if handle(this,true)>0 then
//already running
halt close
end if
如有问题请在pb论坛中留言--->>pb论坛。
http://czsoft.yeah.net
email: [email protected]
欢迎访问我的主页
---------------------------------------------------------------------- ----------
-- pb爱好者
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.102.203.16]
|
|