Vista应用缩略图

时间:2009-06-02 10:12:41

标签: delphi windows-vista toolbar dwm

按照设计,当应用程序最小化时,Vista上的工具栏应用程序缩略图不会更新,因为最小化窗口本身不会重绘。对于我拥有的监控应用程序,在应用程序保持最小化时更新应用程序缩略图会很有用。我正在使用Delphi 2009。 有人可以为此建议一个好的解决方法吗?

HMcG

6 个答案:

答案 0 :(得分:3)

这是一个有趣的问题我想在某种程度上可以使用Windows API,我现在不在vista机器上,但我认为Windows Media Player在最小化时仍会播放视频。

我认为黑客将覆盖最小化按钮并将表单移离屏幕,然后检测表单再次变为活动状态并将其移回旧位置。这意味着表格不在视野范围内,但没有最小化。

答案 1 :(得分:2)

我发现something in a Microsoft development forum解决了这个问题。问题是关于提供自定义缩略图的一种方法,微软Leonardo Blanco对此做出了回应:

  

我们没有计划为应用创建一种方法   自定义替代缩略图表示,但我们会   提供一个API来选择退出正常的缩略图   一共....

看起来这些计划可能在此期间发生了变化,从MSDN中存在的Windows 7函数DwmSetIconicLivePreviewBitmapDwmSetIconicThumbnail来看,现在这些条目实际上并不包含任何解释,但他们的名字看起来很有希望。

有人指出,即使窗口最小化,Windows Media Player的缩略图也会显示移动视频。布兰科的解释:

  

WMP使用直接与之对话的新视频管道   [桌面窗口管理器]实现更流畅的播放   经验。这个管道依赖于[DirectX]而不是   取决于窗口可见性信息,所以缩略图   即使窗口最小化,也可以保持活着   应用程序继续提交框架。你可能会注意到,   但是,视频周围的用户界面不再有效   (这很难观察,因为视频周围的UI   通常不会更新)。有关此方法的更多信息,   请参阅DwmSetPresentParameters API。

恐怕我找不到更多关于此的内容了。 DWM函数的文档很少。

鉴于您的应用程序的性质,也许值得考虑在Windows边栏上使用gadget

答案 2 :(得分:1)

我不知道this workaround在Delphi 2009中是否仍然有效:覆盖CreateParams以将GetDesktopWindow设置为WndParent。

答案 3 :(得分:0)

我过去更改过Application.Title,在任务栏按钮中显示一些信息。我不认为这会导致重绘图标?

答案 4 :(得分:0)

在Delphi 2007中,如果设置

,则主窗体位于任务栏上
  Application.MainFormOnTaskbar := True;

要保持更新,您需要阻止应用程序最小化,而只是将其移到后面。您可以通过在表单上放置 TApplicationEvents 并为 OnMinimize 事件分配事件处理程序,然后在其中调用 Application.Restore 来完成此操作。您将需要跟踪自己的最小化状态,并确保隐藏所有其他形式(如果有的话)并且只显示主表单,但在“最小化”时处于最低Z顺序。

我认为Windows Vista不允许您将表单移出屏幕,或者您可以这样做。也许那里有一个黑客。

祝你好运!

答案 5 :(得分:0)