Delphi 防止程序多开

2019-01-18 1 条评论 160 次阅读 0 人点赞

在项目的源码中加入一个搜索标题的判断

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.
Anchep

Anchep

TyphonFinger

文章评论(1)

  • Anchep
    Anchep
    MIUI Browser 10.5.1 MIUI Browser 10.5.1 Android 8.1.0 Android 8.1.0

    程序名称一定要和自己软件的名字一样。

    2019-02-18
  • 你必须 登录 才能发表评论