只让程序运行一个实例,怎么实现已经运行的实例获得焦点并正常显示
只让程序运行一个实例,如何实现已经运行的实例获得焦点并正常显示 ?
已经实现只让程序运行一个实例,但我想再次双击这程序时能正常显示该程序
在下代码中,发送ShowWindow(iHandle,SW_SHOWMAXIMIZED),这可以再次显示程序,但这是最大化显示,我想实现的是正常显示
而且我试过其他参数,如SW_NORMAL 之类的都不行
请问要如何修改才能实现我的要求呢 ? 谢谢
program Project1;
uses
Forms,Windows,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
const
iAtom='MyApplication';
var
iHandle:THandle;
begin
if GlobalFindAtom(iAtom)=0 then
begin
GlobalAddAtom(iAtom);
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
GlobalDeleteAtom(GlobalFindAtom(iAtom));
end
else if Application.MessageBox('程序已经在运行! ','提示',MB_YESNO+MB_ICONASTERISK)=IDYES then
begin
iHandle:=FindWindow(nil,'Form1');
if iHandle <> 0 then
ShowWindow(iHandle,SW_SHOWMAXIMIZED);
end;
end.
------解决方案--------------------
看我的:
http://blog.csdn.net/linzhengqun/archive/2005/12/29/564646.aspx
已经实现只让程序运行一个实例,但我想再次双击这程序时能正常显示该程序
在下代码中,发送ShowWindow(iHandle,SW_SHOWMAXIMIZED),这可以再次显示程序,但这是最大化显示,我想实现的是正常显示
而且我试过其他参数,如SW_NORMAL 之类的都不行
请问要如何修改才能实现我的要求呢 ? 谢谢
program Project1;
uses
Forms,Windows,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
const
iAtom='MyApplication';
var
iHandle:THandle;
begin
if GlobalFindAtom(iAtom)=0 then
begin
GlobalAddAtom(iAtom);
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
GlobalDeleteAtom(GlobalFindAtom(iAtom));
end
else if Application.MessageBox('程序已经在运行! ','提示',MB_YESNO+MB_ICONASTERISK)=IDYES then
begin
iHandle:=FindWindow(nil,'Form1');
if iHandle <> 0 then
ShowWindow(iHandle,SW_SHOWMAXIMIZED);
end;
end.
------解决方案--------------------
看我的:
http://blog.csdn.net/linzhengqun/archive/2005/12/29/564646.aspx