按照设计,当应用程序最小化时,Vista上的工具栏应用程序缩略图不会更新,因为最小化窗口本身不会重绘。对于我拥有的监控应用程序,在应用程序保持最小化时更新应用程序缩略图会很有用。我正在使用Delphi 2009。 有人可以为此建议一个好的解决方法吗?
HMcG
答案 0 :(得分:3)
这是一个有趣的问题我想在某种程度上可以使用Windows API,我现在不在vista机器上,但我认为Windows Media Player在最小化时仍会播放视频。
我认为黑客将覆盖最小化按钮并将表单移离屏幕,然后检测表单再次变为活动状态并将其移回旧位置。这意味着表格不在视野范围内,但没有最小化。
答案 1 :(得分:2)
我发现something in a Microsoft development forum解决了这个问题。问题是关于提供自定义缩略图的一种方法,微软Leonardo Blanco对此做出了回应:
我们没有计划为应用创建一种方法 自定义替代缩略图表示,但我们会 提供一个API来选择退出正常的缩略图 一共....
看起来这些计划可能在此期间发生了变化,从MSDN中存在的Windows 7函数DwmSetIconicLivePreviewBitmap
和DwmSetIconicThumbnail
来看,现在这些条目实际上并不包含任何解释,但他们的名字看起来很有希望。
有人指出,即使窗口最小化,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)