我是靠谱客的博主 调皮时光,最近开发中收集的这篇文章主要介绍Delphi CreateMutex 防止程序多次运行,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

转载于网易博客:http://jiafeng26.blog.163.com/blog/static/1754251920100140134147/

windows是个多用户多任务的操作系统,支持多个程序同时运行,如果你的程序不想让用户同时运行一个以上,

那应该怎样做呢? 本文将介绍避免用户同时运行多个程序的例子。

需要用到的函数CreateMutex ,CreateMutex 函数是windows中一个并不常用的函数,

该函数对象在系统中只能存在一个实例且是互斥体,所以利用这种特性就很简单的实现了我们的要求。

【函数原声明】:

function CreateMutex(lpMutexAttributes: PSecurityAttributes; bInitialOwner: BOOL; lpName: PChar): THandle; 

function CreateMutex(lpMutexAttributes: PSecurityAttributes; bInitialOwner: BOOL; lpName: PChar): THandle;<br/>

【参数说明】:

lpMutexAttributes 是一个SECURITY_ATTRIBUTES 结构类型的指针,可以设置为NULL。

bInitialOwner 是否初始化互斥体。

lpName 互斥体对象的名称。

函数返回一个互斥体句柄。

当程序运行时创建对象,如果对象已经存在就表明程序已经被运行了。。

【实现过程如下】:

新建一个工程,窗体明明为Form1.

添加一个Button按钮命名为Button1.

双击按钮添加代码

procedure TForm1.Button1Click(Sender: TObject); 

var 

  hw : HWND; 

  gt : Integer; 

begin 

  Application.Initialize; 

  Application.Title := 'runmyfile'; 

  hw := CreateMutex(nil,False,'runmyfile'); {创建互斥体对象} 

  gt := GetLastError; 

  if gt <> Error_ALREADY_EXISTS then     {如果没有发现互斥体对象} 

  begin 

    Application.CreateForm(TForm1,Form1); {创建窗体} 

    Application.Run; 

  end 

  else 

  begin 

    Application.MessageBox('程序已经运行','提示',MB_OK); 

    Application.Terminate; 

    ReleaseMutex(hw);{释放互斥体} 

 end;     

 end;

转载于:https://www.cnblogs.com/taomaomao/archive/2012/02/28/2371612.html

最后

以上就是调皮时光为你收集整理的Delphi CreateMutex 防止程序多次运行的全部内容,希望文章能够帮你解决Delphi CreateMutex 防止程序多次运行所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部