2011-07-06 49 views
1

我想实现一个CBT Hook来做一件简单的事情:找出哪些应用程序活动了多久?主动意味着“用户正在与应用程序窗口进行交互”。应用程序和活动时间

例如用户正在MSWORD上提出建议或在Youtube上在线上网用户。

我们需要找出以下几点:

  1. 的应用程序名称。
  2. 文档或URL的名称(如果它是IE/Chrome/FF等浏览器)。
  3. 应用程序窗口的活动时间。

我的做法是:

  1. SetWindowsHookEx()WH_CBT
  2. 在我的回调函数CBTProcCallBack()我检查代码HCBT_ACTIVATE。我得到的窗口,应用程序和EXE细节
  3. 记录时间。

但是,并非所有活动窗口都被捕获。

我的方法没问题,或者我错了吗?

回答

0

以下是一个简单的解决方案,可以找出用户打开的所有应用程序。比如说,如果当前前景窗口已经改变,你将不得不检查一个循环。尝试在计时器事件中执行此操作,并且如果上一个窗口名称与当前窗口名称不同,则可以轻松计算出用户使用此应用程序的时间。

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; 
相关问题