Delphi 防止程序多开
在项目的源码中加入一个搜索标题的判断
uses
Winapi.Windows
var
Hwnd:THandle;
var
Hwnd:THandle;
begin
Hwnd := FindWindow('TFrmMain','软件标题');
if Hwnd = 0 then
begin
Application.Initialize; //原始代码
Application.MainFormOnTaskbar := True; //原始代码
Application.CreateForm(TFrmMain, FrmMain); //原始代码
Application.CreateForm(TFrmHelp, FrmHelp); //原始代码
Application.Run; //原始代码
end
else
begin
Application.MessageBox('程序已运行,请勿重复打开。' + #13#10#13#10 +
'若已关闭,请稍等再试,程序正在退出线程。', '程序已运行', MB_OK + MB_ICONSTOP);
end;
end.
另外一种是互斥对象的方式
program LoginV2;
uses
Vcl.Forms,windows,
uMain in 'uMain.pas' {FrmMain},
Vcl.Themes,
Vcl.Styles,
{$R *.res}
var
Mutex: THandle;
begin
Mutex := CreateMutex(NIL, True, 'SingleApp');
if GetLastError <> ERROR_ALREADY_EXISTS then//如果不存在另一实例
begin
//这里为原有文件
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TFrmMain, FrmMain);
Application.CreateForm(TFrmLogin, FrmLogin);
Application.CreateForm(TFrmUserInfo, FrmUserInfo);
Application.CreateForm(TFrmUpdate, FrmUpdate);
Application.Run;
end
else
begin
Application.MessageBox('程序已运行,请勿重复开启!', '提示', MB_OK + MB_ICONWARNING);
end;
ReleaseMutex(Mutex);
end.
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(1)
程序名称一定要和自己软件的名字一样。