[delphi]保证程序只运行一个实例
许多时候我们希望程序只有一个实例在运行,而不是多个实例同时运行。 其实完成这一功能有很多种方法,我把自己知道的几种方法简单介绍一下。
在Delphi中建立一个应用程序,然后单击菜单“Project”,单击“View Source”,这样就在代码编辑器中打开了工程文件://
一 使用全局原子
program Project1;
uses
windows,
Forms,
Dialogs,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
const
myatom='我的全局原子方法';
begin
if GlobalFindAtom(myatom)=0 then
begin
GlobalAddAtom(myatom);
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
GlobalDeleteAtom(GlobalFindAtom(myatom));
end
else
showmessage('已经有一个实例在运行');
end.
二 使用互斥对象
var
mymutex: THandle;
begin
mymutex:=CreateMutex(nil,True,'我的互斥对象');
if GetLastError<>ERROR_ALREADY_EXISTS then
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end
else
showmessage('已经有一个实例在运行');
end.
三 使用FindWindow函数
var
myhandle: THandle;
begin
myhandle:=FindWindow(nil,'Form1');
if myhandle=0 then
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end
else
showmessage('已经有一个实例在运行');
end.
在上面介绍的几种方法中用到的 API函数GlobalFindAtom、GlobalAddAtom 、GlobalDeleteAtom、CreateMutex、GetLastError 、FindWindow 在msdn和delphi自带帮助的windows sdk中都有介绍。
转自:http://www.cnblogs.com/huhu0013/archive/2010/09/01/1814943.html