请教如何限制重复运行同一个PB程序

请教如何限制重复运行同一个PB程序,第1张

通过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_name

long   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_name

long   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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12511835.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存