Delphi 2010 还原最小化的应用程序
如果我再次尝试执行应用程序,我需要恢复并将其置于前台。我使用下一个代码来防止两次执行并恢复它。关于这个问题,我已经尝试了在stackoverflow上找到的所有方法,但都没有成功。我打开应用程序并最小化它。然后我尝试再次执行该应用程序,它在任务栏上闪烁,但它既没有被带到前面,也没有被还原Delphi 2010 还原最小化的应用程序,delphi-2010,Delphi 2010,如果我再次尝试执行应用程序,我需要恢复并将其置于前台。我使用下一个代码来防止两次执行并恢复它。关于这个问题,我已经尝试了在stackoverflow上找到的所有方法,但都没有成功。我打开应用程序并最小化它。然后我尝试再次执行该应用程序,它在任务栏上闪烁,但它既没有被带到前面,也没有被还原 program MyApplication; uses Forms, Windows, Unit_Form1 in 'Unit_Form1.pas' {Form1}; {$R *.res} v
program MyApplication;
uses
Forms,
Windows,
Unit_Form1 in 'Unit_Form1.pas' {Form1};
{$R *.res}
var
RvHandle : Hwnd;
begin
RvHandle := FindWindow(PWideChar('MyApplication'), NIL);
if RvHandle > 0 then
begin
PostMessage(RvHandle, CM_RESTORE, 0, 0);
Exit;
end;
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.Title := 'My Application';
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
表格一:
unit Unit_Form1;
interface
uses ....
const
CM_RESTORE = WM_USER + $1000;
type
TForm1 = class(TForm)
....
private
procedure ShowTheApplication;
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure RestoreRequest(var message: TMessage); message CM_RESTORE;
public
end;
...
implementation
...
procedure TForm1.ShowTheApplication;
var k: integer;
begin
// iterate backward to ensure that the correct Z-order is preserved
for k := Screen.FormCount - 1 downto 0 do begin
Screen.Forms[k].Show;
end;
end;
procedure TForm1.RestoreRequest(var message: TMessage);
begin
if IsIconic(Application.Handle) = TRUE then ShowTheApplication;
Application.MainForm.Visible := True;
ShowWindow(Application.Handle, SW_RESTORE) ;
Application.MainForm.WindowState := wsNormal; // Override minimized state
Application.BringToFront;
Application.Restore;
SetActiveWindow(Application.Handle) ;
SetForegroundWindow(Application.Handle) ;
end;
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.WinClassName := 'MyApplication';
end;
end.
使用JVCL中的组件
或者查看来源并获得灵感。它就像一个符咒。谢谢