不是说窗口的问题
规化为有几个一样的application的问题
我这里写出一个当前运行实例的枚举,这个方法很多地方可都非常有用:
program Project1;
uses
Forms,
Unit2 in 'Unit2.pas';
{$R *.res}
begin
if hprevinst <> 0 then
begin
activatepreviousinstance;
halt;
end;
Application.Initialize;
//Application.CreateForm(TForm1, Form1);
Application.Run;
end.
function enumapps(wnd: hwnd; targetwindow : phwnd): bool;
var
classname : array[0..30] of char;
begin
result := true; // = -6 const GWW_HINSTANCE =-6;
if getwindowword(wnd,-6) = hprevinst then begin
getclassname(wnd,classname,30);
if stricomp(classname,'tapplication')=0 then begin
targetwindow^ := wnd;
result := false;
end;
end;
end;
procedure activatepreviousinstance;
var
previnstwnd : hwnd;
begin
previnstwnd := 0;
enumwindows(@enumapps,longint(@previnstwnd));
if previnstwnd <> 0 then
showwindow(previnstwnd,sw_restore)
else
//showmessage('sss');
bringwindowtotop(previnstwnd);