一个小问题(100分)

  • 主题发起人 主题发起人 Allen
  • 开始时间 开始时间
A

Allen

Unregistered / Unconfirmed
GUEST, unregistred user!
在不启动第二个实例的程序中在第二次启动程序时为了让前一个实例的窗口获得焦点使用
了以下语句:

ShowWindos(hWnd,SW_RESTORE);
SetForGroundWindow(hWnd);

如果不用前一句则窗口最小化时不能恢复,如果用了则从此该窗体的最小化按钮失效
请问如何解决?
 
//如果用了则从此该窗体的最小化按钮失效
没有道理呀。

不过你可以先判断一下他是否最小化,再处理呀
 
判断了也要用ShowWindow(hWnd,SW_RESTORE)来恢复窗口啊还是会有同样的问题
 
那你发一个自定义消息过去,让它自己 Application.Restore 试一试吧。
 
我试了只有 Delphi 编的程序才会这样,大概跟 TApplication 那个隐藏的窗口有关,可
以这样:
var
Ahandle: THandle;
begin
Ahandle := FindWindow('TApplication', 目标程序的 Application 的 Title);
if Ahandle <> 0 then
begin
ShowWindow(Ahandle, SW_NORMAL);
SetForegroundWindow(Ahandle);
end;
end;
就是换用 Application 那个隐藏窗口的句柄,就可以了。
 
谢谢bbkxyj 和 beta
bbkxyj 的方法在FINDWINDOW前还需要将当前实例的APPLICATION.TITLE 改一下否则是
找不到前一个实例句柄的
 
后退
顶部