如何打开在重复打开程序时 自动退出 并且激活前一个程序
如何打开在重复打开程序时 自动退出 并且激活前一个程序
我在网上找到了以下代码:
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; 这段程序的意思是如果找到一个类名相同的窗口,则向该窗口发送一个消息,并退出,而本例中原窗口收到该消息后会自动激活或从图标还原,从而达到了避免二次运行且能自动调出前一例程的目的。