【问题标题】:Application and active time申请及活动时间
【发布时间】:2011-09-29 10:32:24
【问题描述】:
我正在尝试实现一个 CBT Hook 来做一件简单的事情:找出哪个应用程序处于活动状态多长时间? Active 表示“用户正在与应用程序窗口进行交互”。
例如,用户在 MSWORD 中处理提案或用户在 Youtube 上在线冲浪。
我们需要找出以下几点:
- 应用程序的名称。
- 文档或 URL 的名称(如果是 IE / Chrome / FF 等浏览器)。
- 应用程序窗口的活动时间。
我的做法是:
-
SetWindowsHookEx() 为WH_CBT
- 在我的回调函数
CBTProcCallBack() 中检查代码HCBT_ACTIVATE。我得到了窗口、应用程序和 exe 详细信息
- 记录时间。
但是,并非所有活动窗口都被捕获。
我的方法没问题还是我出错了?
【问题讨论】:
标签:
winapi
setwindowshookex
【解决方案1】:
这是一个简单的解决方案,可以找出用户打开的所有应用程序。比如说,如果当前前景窗口发生了变化,你将不得不在一个循环中检查。尝试在计时器事件中执行此操作,如果之前的窗口名称与当前窗口名称不同,您可以轻松计算出用户使用此应用程序的时间。
function ActiveCaption: string;
var
Handle: THandle;
Len: LongInt;
Title: string;
begin
result := '';
Handle := GetForegroundWindow;
if Handle <> 0 then
begin
Len := GetWindowTextLength(Handle) + 1;
SetLength(Title, Len);
GetWindowText(Handle, PChar(Title), Len);
ActiveCaption := TrimRight(Title);
end;
end;