在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
[1]
|