delphi – 我如何知道我的程序的另一个实例是否已经运行?

前端之家收集整理的这篇文章主要介绍了delphi – 我如何知道我的程序的另一个实例是否已经运行?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何知道我的程序的一个实例是否正在运行?
我想我可以做一个数据文件,但它只是乱七八糟:

我想这样做,因为我只想要一个实例一次打开。

解决方法

你可以创建一个Semaphore …并停止执行(将代码放入你的* .dpr文件),让你运行的应用程序到屏幕上。
var
   Semafor     : THandle;

begin
     // Don't start twice ... if already running bring this instance to front
     Semafor := CreateSemaphore(nil,1,'MY_APPLICATION_IS_RUNNING');
     if ((Semafor <> 0) and // application is already running
         (GetLastError = ERROR_ALREADY_EXISTS))
        then begin
             RestoreWindow('TMyApplication');
             CloseHandle(Semafor);
             Halt;
             end;

     Application.CreateForm(....);    
     Application.Initialize;

     Application.Run;
     CloseHandle(Semafor);
end;

EDIT(添加了RestoreWindow方法):

aFormName是应用程序中您的主表单类的名称

procedure RestoreWindow(aFormName : string);
var
   Wnd,App : HWND;

begin
     Wnd := FindWindow(PChar(aFormName),nil);
     if (Wnd <> 0)
        then begin // Set Window to foreground
             App := GetWindowLong(Wnd,GWL_HWNDPARENT);
             if IsIconic(App)
                then ShowWindow(App,SW_RESTORE);

             SetForegroundwindow(App);
             end;
end;

猜你在找的Delphi相关文章