Delphi 德尔福-拥有外部';s应用程序最小化以触发另一个应用程序最小化过程
我正在寻找一个解决方案,我的应用程序将跟随另一个外部应用程序的WindowsState 基本想法是,我将对下一个更改采取行动: 规范化外部应用程序时:将我的表单移动到特定坐标 当外部应用程序最大化时:将我的表单移动到特定坐标 最小化外部应用程序时:将我的表单最小化到任务栏 如上所述,我希望我的应用程序看起来和行为都像是某个外部应用程序的实际部分 到目前为止,我的情况如下: 我的外窗把手没问题。使用下一个函数案例,我得到如下结果:Delphi 德尔福-拥有外部';s应用程序最小化以触发另一个应用程序最小化过程,delphi,window,Delphi,Window,我正在寻找一个解决方案,我的应用程序将跟随另一个外部应用程序的WindowsState 基本想法是,我将对下一个更改采取行动: 规范化外部应用程序时:将我的表单移动到特定坐标 当外部应用程序最大化时:将我的表单移动到特定坐标 最小化外部应用程序时:将我的表单最小化到任务栏 如上所述,我希望我的应用程序看起来和行为都像是某个外部应用程序的实际部分 到目前为止,我的情况如下: 我的外窗把手没问题。使用下一个函数案例,我得到如下结果: case WindowPlacement.showCmd of
case WindowPlacement.showCmd of
SW_HIDE: Result := 0; // hidden
SW_SHOWNORMAL: Result := 1; // show normal
SW_SHOWMINIMIZED: Result := 2; // minimized
SW_SHOWMAXIMIZED: Result := 3; // maximized
end;
procedure TPre2.Timer1Timer(Sender: TObject);
var t: integer;
begin
t:= CheckWindowState(AvoHandle);
case t of
0: Application.Minimize;
1: Application.MainForm.WindowState:=wsNormal; // add position later
2: Application.Minimize;
3: Application.MainForm.WindowState:=wsNormal; // add position later
end;
这个很好用。但是,目前,我正在使用计时器事件每100mS触发一次,它将获得此函数结果,然后采取如下操作:
case WindowPlacement.showCmd of
SW_HIDE: Result := 0; // hidden
SW_SHOWNORMAL: Result := 1; // show normal
SW_SHOWMINIMIZED: Result := 2; // minimized
SW_SHOWMAXIMIZED: Result := 3; // maximized
end;
procedure TPre2.Timer1Timer(Sender: TObject);
var t: integer;
begin
t:= CheckWindowState(AvoHandle);
case t of
0: Application.Minimize;
1: Application.MainForm.WindowState:=wsNormal; // add position later
2: Application.Minimize;
3: Application.MainForm.WindowState:=wsNormal; // add position later
end;
这会让事情随机运行或不运行。有几次它会像应该的那样最小化和恢复,然后在外部应用最小化后的下一刻,我的应用保持可见而不是隐藏。但计时器仍在循环。
单击任务栏中的应用程序图标可使其立即最小化
有没有更好的方法来实现我的目标?或者,是否有任何合理的原因可能导致这种情况不总是有效
thx.这种任务可以使用CBT挂钩完成。要实现这种类型的钩子,请执行以下步骤
HCBT_MINMAX
代码LParam
将包含一个显示窗口值(SW_HIDE、SW_MAXIMIZE、SW_MINIMIZE等)LoadLibrary
方法加载带有全局钩子实现的dll(您可以从dll导出方法以启用或禁用钩子)或者,您可以改为使用接收特定线程的特定事件(
事件对象对象对象对象对象显示
/隐藏
,事件对象对象位置更改
,事件对象对象状态更改
,等等),该线程拥有您感兴趣的窗口。与全局CBT钩子相比,不需要DLL,过滤更少,开销更少。@RemyLebeau听起来应该是它自己的答案!小点:你在哪里调用SetWindowsHookEx并不重要。我第一次使用钩子来检查鼠标点击,所以我现在看起来很熟悉(是的…)。尽管如此,我还是没有弄清楚我应该在哪里设置我正在“收听”哪一个应用程序来进行MinMax活动。。。。?