怎么打开在重复打开程序时 自动退出 并且激活前一个程序

如何打开在重复打开程序时 自动退出 并且激活前一个程序
如何打开在重复打开程序时 自动退出 并且激活前一个程序
我在网上找到了以下代码:
Delphi(Pascal) code

1、对主窗口程序的改动:   
    
    在主窗口(即程序创建的第一个窗口)中interface节加入   
    const   
    CM_RESTORE = WM_USER + $1000; {自定义的“恢复”消息}   
    MYAPPNAME = 'My Delphi Program';   
    并在Form的定义的public节中加入   
    procedure CreateParams(var Params: TCreateParams); override;   
    Procedure RestoreRequest(var message: TMessage); message CM_RESTORE;   
    在implementation节中加入   
    {指定窗口名称}   
    procedure TForm1.CreateParams(var Params: TCreateParams);   
    begin   
    inherited CreateParams(Params);   
    Params.WinClassName := MYAPPNAME;   
    end;   
    
    {处理“恢复”消息}   
    procedure TForm1.RestoreRequest(var message: TMessage);   
    begin   
    if IsIconic(Application.Handle) = TRUE then   
    Application.Restore   
    else   
    Application.BringToFront;   
    end;   
    
    经过以上修改,程序的主窗口的类名已经被指定了,这是进行判断的基础。一般在程序刚开始运行的时候进行判

断,所以还要对DPR文件进行修改。   
    
    2、对DPR文件的改动   
    
    在 uses 节中添加 windows、messages这两个单元加入下列语句,注意两个文件中常量CM_RESTORE和MYAPPNAME

的定义必须一致   
    const   
    CM_RESTORE = WM_USER + $1000; {自定义的“恢复”消息}   
    MYAPPNAME = "My   Delphi Program";   
    var   
    RvHandle : hWnd;   
    
    将下列语句插到程序最前部(在Application.Initialize之前)   
    
    RvHandle := FindWindow(MYAPPNAME, NIL);   
    if RvHandle > 0 then   
    begin   
    PostMessage(RvHandle, CM_RESTORE, 0, 0);   
    Exit;   
    end;   
    这段程序的意思是如果找到一个类名相同的窗口,则向该窗口发送一个消息,并退出,而本例中原窗口收到该消

息后会自动激活或从图标还原,从而达到了避免二次运行且能自动调出前一例程的目的。 




但是并不能使用 第一步就不能使用 请大家帮忙 或者改改这个代码 谢谢了

------解决方案--------------------
在 uses 节中添加 windows、messages这两个单元加入下列语句,注意两个文件中常量CM_RESTORE和MYAPPNAME

的定义必须一致
const
CM_RESTORE = WM_USER + $1000; {自定义的“恢复”消息}
MYAPPNAME = "My Delphi Program";
-----------------------------------------------
把这个删掉就可以了。


再把这里改一下:
procedure TmainForm.RestoreRequest(var message: TMessage);
begin
if IsIconic(Application.Handle) then
ShowApplication
// Application.Restore
else
Application.BringToFront;
end;

------解决方案--------------------
在工程文件中

var
MutexHandle: Thandle;

begin

//这里增加的防止程序二次运行
MutexHandle := windows.CreateMutex(nil, true, 'Form1');
if MutexHandle <> 0 then
begin
if getlasterror = windows.ERROR_ALREADY_EXISTS then
begin
ShowMessage('');
Closehandle(MutexHandle);
Halt;
end;
end;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
------解决方案--------------------
工程文件源码
program Project3;

uses
Forms,
Windows,
Unit3 in 'Unit3.pas' {Form1};

{$R *.res}
var
Handle : THandle; //窗口句柄
begin
Application.Initialize;
Handle:= FindWindow(nil,'我的程序');
Application.Title:='我的程序';
if Handle <> 0 then
begin
if IsIconic(Handle) then
ShowWindow(Handle, SW_RESTORE);
SetForegroundWindow(Handle);
SetActiveWindow(Handle);
end
else
begin
Application.CreateForm(TForm1, Form1);
end;
Application.Run;
end.