科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件限制应用程序只运行一次

限制应用程序只运行一次

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

32位操作系统中,可以用两种方法实现限制应用程序只运行一次

作者:51cto.com整理 来源:51cto.com 2007年9月15日

关键字: 应用程序 运行 软件

  • 评论
  • 分享微博
  • 分享邮件

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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章