通过CreateMutexA函数创建一个互斥体,然团圆后用GetLastError来获取返回值判断是否重复开启同一个应用。
外部函数声明塌渗塌
Function ulong CreateMutexA (ulong lpMutexAttributes, int bInitialOwner, ref string lpName) library 'kernel32.dll'Function ulong GetLastError () library 'kernel32.dll'
APP的open事件代码
string ls_mutex_namelong ll_mutex
long ll_err
if handle (GetApplication(),false) <> 0 then
ls_mutex_name = this.AppName
ll_mutex = CreateMutexA (0,0,ls_mutex_name)
ll_err 喊皮 = GetLastError ()
if ll_err = 183 then
messagebox("","程序重复开启")
Halt close
end if
end if
open(w_open)
通过CreateMutexA函数喊皮创建一个互斥体,然后用GetLastError来获取返塌渗塌回值判断是否重复开启同一个应用。
实现过程:
外部函数声明
Function ulong CreateMutexA (ulong lpMutexAttributes, int bInitialOwner, ref string lpName) library 'kernel32.dll'Function ulong GetLastError () library 团圆'kernel32.dll'
APP的open事件代码
string ls_mutex_namelong ll_mutex
long ll_err
if handle (GetApplication(),false) <> 0 then
ls_mutex_name = this.AppName
ll_mutex = CreateMutexA (0,0,ls_mutex_name)
ll_err = GetLastError ()
if ll_err = 183 then
messagebox("","程序重复开启")
Halt close
end if
end if
open(w_open)
位 *** 作系统中 可以用两种方法实现
首先在global external functions声明外部函数如下
FUNCTION long FindWindowA( ulong Winhandle string wintitle ) Library ″user ″
然后在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 >then
MessageBox(″提示信息″ ″应用程序″ + This AppName + ″已经运行 不能多次启动!″)
中圆 Halt Close
else
open(w_main) // 此处为系统主窗口
end if
这种方法是PowerBuilder联机帮助中的一个例子 是以系统主窗口的标题Title作为判别依据 若有其它与此Title同名应用程序在运行 再想启动此程序也会报应用程序已经运行 你可以将Title设为 计算器 然后启动Windows附卖卜塌件中计算器程序 再运行你的PB应用程序试试
声明外部函数
function ulong CreateMutexA (ulong lpMutexAttributes int bInitialOwner ref string lpName) library ″kernel dll″
function ulong GetLastError () library ″kernel dll″
然后在application的 Open 事件中加入如下代码
ulong ll_mutex ll_err
string ls_mutex_name
if handle (GetApplication () false) <>then
ls_mutex_name = this AppName + char ( )
ll_mutex = CreateMutexA ( ls_mutex_name)
ll_err = GetLastError ()
if ll_err = then
// 程序已经运行
MessageBox (″提示信息″ ″程序已经运行了!″)
Halt close
else
// 程序未运行
open(w_main)
end if
else //开发模式
open(w_main)
end if
这种方法必须在应用程序编译成可执行文件 exe后才有效
编辑推荐
ASP NET开发培训视频教程
lishixinzhi/Article/program/PB/201311/24617
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)