如何判断最小化并恢复(100分)

  • 主题发起人 主题发起人 LUJIAYU110
  • 开始时间 开始时间
L

LUJIAYU110

Unregistered / Unconfirmed
GUEST, unregistred user!
我在想判断程序是否运行,如运行最小化则恢复,后台则显示到前台,但有个问题,如在PROJECT中指定Application.Tile:='汉字字符',则程序最小化时 isiconic(wnd)反回值不为TRUE,不知如何解决。
var
wnd:hwnd;
wnd:=findwindow(nil,pchar('汉字字符'));
if wnd<>0 then
if isiconic(wnd) then
showwindow(wnd,sw_restore)
else
setforegroundwindow(wnd);
 
这个问题没有你想象的那么难
Uses Windows;
var
wnd:hwnd;

begin
wnd:=findwindow(nil,pchar('汉字字符'));
if wnd<>0 then
begin
{不必判断是否最小化,你的目的是让它出现}
showwindow(wnd,sw_restore);
setforegroundwindow(wnd);
end
else
begin
Application.Initialize;
Application.Title :='汉字字符';
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
 
对了,我的主窗口和程序标题是一样的,所以不行,但wnd:=findwindow(nil,pchar('汉字字符'))应该是程序的,楼上所说的我试过,这样主窗口最小化点击就不好用了。
主窗口和程序标题不一样可以,也看过以前DRW的贴子,但我想让它一致,该怎么办?
 
你不是说isiconic(wnd)不为TRUE
那你可以这样做
{当发现有自定义标志时,表示程序已启动,这可以显示窗口了}
if OpenMutex(MUTEX_ALL_ACCESS,false,'自定义标志')<>0 then
begin
wnd:=findwindow(nil,pchar('汉字字符'));
if wnd<>0 then
begin
showwindow(wnd,sw_restore);
setforegroundwindow(wnd);
end;
end
else begin
CreateMutex(nil,false,'自定义标志');
Application.Initialize;
Application.Title :='汉字字符';
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
 
我是了一下你说的,在delphi中一运行就退出程序,不知你说的是不是这个问题,如果是,则因为程序先发现了delphi中'汉字字符'窗口,所以终止了,退出delphi再试就不会有这个问题了!只是出现的最小化窗口,在也无法最小化了
 
其实我的意思是当主窗口和程序APPLICATION.TITLE一样时,findwindow发现的句柄应该是程序的,但isiconic判断时不为TRUE,因为我是业余学的,不深入,但总觉得应该是程序和主窗口标题的问题,让两者不一样时,显示很正常,我记得判断主窗口和程序的命令不一样,那在这里边findwindow发现的是谁的句柄,isiconic判断的又是谁的?是先查找程序再查找主窗口吗?
 
findwindow发现的当然是主窗口,isiconic判断的当然也是findwindow返回来的窗口句柄,听我说你不要用isiconic了,发现窗口就只接显示窗口就行了,我这样做一点问题也没有
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
916
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部