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)