Delphi 如何在激活Windows 7 Flip 3D的情况下使窗体始终位于顶部

Delphi 如何在激活Windows 7 Flip 3D的情况下使窗体始终位于顶部,delphi,delphi-xe2,aero,dwm,flip3d,Delphi,Delphi Xe2,Aero,Dwm,Flip3d,我正在构建一个需要始终在顶部显示特定表单的应用程序(这是一个客户请求),到目前为止,我使用的是HWND_TOPMOST值的功能,效果很好,但当Windows 7 Flip 3D功能激活时,我的应用程序不会保持在顶部 Windows 7 Flip 3D 问题是,即使激活了windows 7 Flip 3D,我的表单如何能够保持在所有其他窗口的顶部?我不久前使用函数modyfing属性和DWMFLIP3D_excludeUpper值来实现这一点 试试这个代码 uses Winapi.DwmAp

我正在构建一个需要始终在顶部显示特定表单的应用程序(这是一个客户请求),到目前为止,我使用的是HWND_TOPMOST值的功能,效果很好,但当Windows 7 Flip 3D功能激活时,我的应用程序不会保持在顶部

Windows 7 Flip 3D


问题是,即使激活了windows 7 Flip 3D,我的表单如何能够保持在所有其他窗口的顶部?

我不久前使用函数modyfing属性和DWMFLIP3D_excludeUpper值来实现这一点

试试这个代码

uses
  Winapi.DwmApi;

procedure TForm40.FormCreate(Sender: TObject);
var
  pvAttribute: Integer;
begin
  pvAttribute:= DWMFLIP3D_EXCLUDEABOVE;
  if DwmCompositionEnabled then
   DwmSetWindowAttribute(Handle, DWMWA_FLIP3D_POLICY, @pvAttribute, Sizeof(Integer));
end;
这就是结果


毫无疑问,你所做的任何黑客行为最终都会成为不该做的一个例子。你为什么要这样做?您想确保您的用户测试您的卸载程序吗?@DavidHeffernan这是一个客户请求,因为应用程序显示工业系统的实时数据,这些数据必须始终对用户可见。在这种情况下,杀死Flip3D之类的东西听起来是一种可行的方法。或者在信息亭模式下运行系统。@DavidHeffernan我向客户提供了这些选项,但他拒绝了这些建议。Raymond Chen会讨厌你的。