在Powerbuilder的帮助中,Handle函数之下有一段代码,用于控制一个PB应用程序只运行一个实例,但是该段程序不能在Win 32之下使用。
下面这段代码放在Application的Open事件之中:它首先检查应用程序是否运行,若已经运行,则退出,否则打开应用程序主窗口:
IF Handle(This, TRUE) > 0 THEN
MessageBox("应用程序多次运行", This.AppName + "已经运行,你不能多次启动!")
HALT CLOSE
ELSE
Open(w_main)
END IF
---------------------------------------------------------------------------------------------------------------------------
以上代码在Win 32环境不能正常运行,这不是PB的bug,是因为PB调用的一个API函数在Win16之中有,而在Win 32中没有了这个函数。在Win 32环境下使用以下代码可完成同梓的功能:
定义一个全局外部函数:
FUNCTION ulong FindWindowA(ulong classname,string windowname) LIBRARY "user32.dll"
Application的Open事件中的代码:
boolean rtn
ulong l_handle, lu_class
string ls_name
setnull(lu_class)
ls_name = "API Name" // 将API Name换了你的主窗口的标题title
l_handle = FindWindowA(lu_class, ls_name)
if l_handle > 0 then
MessageBox("应用程序多次运行", This.AppName + "已经运行,你不能多次启动!")
Halt Close
else
open(w_main)
end if
