是否有“此应用程序需要注意”的Windows API挂钩?

时间:2008-12-16 00:19:48

标签: winapi windows-xp notifications

在Windows XP中,当程序需要用户注意时,它会将其任务栏按钮闪烁橙色。任何拥有IM程序的人都可能熟悉这种行为。但是,当我正在玩全屏模式游戏时,我没有看到,并且消息无法回答。

现在我正在编写自己的游戏引擎,我想对我的用户表示友好。是否有任何Windows API调用,我可以编写一个钩子,只要任何其他程序将其任务栏按钮设置为“橙色闪烁模式”,它将通知我的程序?这样,我可以在发生这种情况时通知用户。

如果没有,我会感到惊讶。我看到了一个Mac OS Classic屏幕保护程序,能够在90年代中期这样做。这就是我从中得到这个想法的地方。

编辑:这被标记为how-can-i-programmatically-determine-if-an-application-is-flashing-in-the-taskb的副本,但我重新打开它,因为这个答案更好,并鼓励更多人讨论可能的解决方案,如果有的话。

5 个答案:

答案 0 :(得分:3)

我认为不存在这样的事情。您可以使用API hooking来实现它,尽管我不确定Vista会允许您这样做。适用于XP。

然而,在这方面还有一些其他想法可能是“次佳”:

  • 不要对声音设备进行独占,因此可以听到其他节目的声音。我不确定这是怎么做的,但有些游戏会阻止其他声音,有些则没有;
  • 允许用户使用ALT-TAB和其他组合键切换游戏;
  • 如果另一个窗口试图变为活动状态,请允许它并优雅地最小化;

其他一般提示包括:

  • 尽量减少最小化/恢复时间。我对游戏编程一无所知,但对于某些游戏,这需要很长时间。
  • 最小化/恢复时正确恢复图片。有些游戏存在此问题。
  • 自动暂停最小化。如果它是一个网络游戏并且无法暂停,可能会向其他玩家发送消息,以便他们知道。
  • 有点无关,但我喜欢它,当游戏在某个地方显示时钟(真正的时钟,而不是一些游戏时间)。通过这种方式,我可以很容易地判断我是否应该在不减少程序的情况下上床睡觉。 :)

答案 1 :(得分:0)

以前在SO上问过这个问题:How can I programmatically determine if an application is flashing in the taskbar

简短回答:似乎不可能。

答案 2 :(得分:0)

当然有可能。 它甚至是Win32 FAQ(多年......) 见Adv。 api ng news://comp.os.ms-windows.programmer.win32

答案 3 :(得分:0)

这里有一些链接可以帮助您开始Api挂钩

www.internals.com/articles/apispy/apispy.htm www.wheaty.net /

除了事实上它不允许你挂钩受保护的进程之外,Vista一般没有API挂钩的问题。

答案 4 :(得分:-1)

完全可以做到。我在Windows 7上这样做,所以我很确定它也可以在Vista上完成。