扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
32位操作系统中,可以用两种方法实现:
1.首先在global external functions声明外部函数如下:
FUNCTION long FindWindowA( ulong Winhandle, string wintitle ) Library ″user32″
然后在application的 Open 事件中加入如下代码:
ulong l_handle, lu_class
string ls_name
ls_name = ″我的系统″ // 此处ls_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
这种方法是PowerBuilder联机帮助中的一个例子,是以系统主窗口的标题Title作为判别依据,若有其它与此Title同名应用程序在运行,再想启动此程序也会报应用程序已经运行。你可以将Title设为“计算器”,然后启动Windows附件中计算器程序,再运行你的PB应用程序试试。
2.声明外部函数:
function ulong CreateMutexA (ulong lpMutexAttributes, int bInitialOwner, ref string lpName) library ″kernel32.dll″
function ulong GetLastError () library ″kernel32.dll″
然后在application的 Open 事件中加入如下代码:
ulong ll_mutex, ll_err
string ls_mutex_name
if handle (GetApplication (), false) <> 0 then
ls_mutex_name = this.AppName + char (0)
ll_mutex = CreateMutexA (0, 0, ls_mutex_name)
ll_err = GetLastError ()
if ll_err = 183 then
// 程序已经运行
MessageBox (″提示信息″, ″程序已经运行了!″)
Halt close
else
// 程序未运行
open(w_main)
end if
else //开发模式
open(w_main)
end if
这种方法必须在应用程序编译成可执行文件.exe后才有效.
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者