CreateMutex 防止程序多次运行

 
CreateMutex 防止程序多次运行 
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; 
相关文章
相关标签/搜索