1.使用全局atom
program Project1;
uses
windows,
Forms,
Dialogs,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
const
myatom='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.
2. 使用互斥对象
var
mymutex: THandle;
begin
mymutex:=CreateMutex(nil,True,'MyMutx');
if GetLastError<>ERROR_ALREADY_EXISTS then
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end
else
showmessage('程序已经运行');
end.
3. 使用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.
program Project1;
uses
windows,
Forms,
Dialogs,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
const
myatom='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.
2. 使用互斥对象
var
mymutex: THandle;
begin
mymutex:=CreateMutex(nil,True,'MyMutx');
if GetLastError<>ERROR_ALREADY_EXISTS then
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end
else
showmessage('程序已经运行');
end.
3. 使用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.