如何防止应用程序多重起动?(100分)

  • 主题发起人 主题发起人 takou
  • 开始时间 开始时间
T

takou

Unregistered / Unconfirmed
GUEST, unregistred user!
如何防止应用程序多重起动?
 
这是最简单,最常见的问题,搜索一下有一大堆
 
话虽如此,但是没有搜倒。
 
主要用API函数CreateMutex()再工程文件中;Exapmle:
CreateMutex(nil,True,PChar(ExtractFileName(Application.ExeName)));
if GetLastError = ERROR_ALREADY_EXISTS then
begin
Application.MessageBox(Handle, '程序已经运行,不能在运行....', '错误', MB_OK or MB_ICONERROR);
Halt;
end;
 
d5开发人员指南有个演示单元,你在use里加入就行。或者是用lmd控件包里的one instance
控件,在soft.jx163.com有下。
 
将你的项目文件这样设置就OK了哦!
program 应用程序;
uses
Forms,
{$R *.RES}
var
MutexHandle: THandle;
//定义互斥句柄
//防止二次运行
begin
//whether existed
MutexHandle := CreateMutex(nil, TRUE, 'XXXX管理系统');
if MutexHandle <> 0 then
begin
if GetLastError = ERROR_ALREADY_EXISTS then
begin
MessageBox(0, '程序已经运行...',
'警告', mb_IconHand);
CloseHandle(MutexHandle);
Halt;
// 'Halt' Is stop running the actual application.
end;
end;
Application.Initialize;
{
.......
}
Application.Run;
end.
 
在工程文件初始化後即可調用
CreateMutex(nil,True,'takou');
至於其中的IpName(第三個參數)你可以隨便取名字
if GetLastError = ERROR_ALREADY_EXISTS then

begin
Application.MessageBox('This program is runnig','Information',MB_OK+MB_ICONINFORMATION);
Application.Terminate;
exit;
end;
 
谢谢。本人已经找到在vc++下的方法。
即用API ::FindWindow函数
对出力的朋友全部给分。
 
后退
顶部