怎么打开在重复打开程序时 自动退出 并且激活前一个程序
如何打开在重复打开程序时 自动退出 并且激活前一个程序
如何打开在重复打开程序时 自动退出 并且激活前一个程序
我在网上找到了以下代码:
但是并不能使用 第一步就不能使用 请大家帮忙 或者改改这个代码 谢谢了
------解决方案--------------------
在 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.
如何打开在重复打开程序时 自动退出 并且激活前一个程序
我在网上找到了以下代码:
- 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.