如何跟踪前台应用程序处于活动状态的持续时间

时间:2012-02-13 11:23:00

标签: c# winapi

我使用GetForegroundWindow()函数在桌面上找到了前景窗口。我需要跟踪每个应用程序在前台花费多少时间,并在每次恢复到前台时在数据库中更新它。 是否有用于设置计数器的API或在窗口未对焦时查找?

2 个答案:

答案 0 :(得分:1)

WH_CBT支持SetWindowsHookEx挂钩类型,每次用户切换到另一个窗口或应用程序时都会触发。 How to install Windows hooks from C#

但是,如果您不需要完美的准确度,则每秒只调用GetForegroundWindow()一次并检查返回的HWND的数值是否已更改会更容易。对于像活动跟踪器应用程序这样的东西,它不需要注意半秒间隔,这种技术是更好的选择。

提示:

  • GetForegroundWindow()返回当前处于焦点的窗口的句柄(可以是桌面或任务栏或浮动窗口小部件,因此您可能需要对其进行过滤),如果当前没有窗口关注,则返回零句柄。
  • 速度超快,所以每秒呼叫数十次或数百次都没有害处。
  • 窗口句柄值是唯一的(至少在当前用户会话中),即使它们属于不同的应用程序也是不同的,并且它们的分配方式使得销毁的句柄几乎不会立即重新分配。

答案 1 :(得分:0)

如果您担心自己的应用程序,可以处理Activate / Focus / LostFocus / DeActivate事件。如果需要监视所有窗口,则需要使用Windows Hooks。一篇文章here