申请和活动时间

时间:2011-07-06 08:44:52

标签: winapi setwindowshookex

我正在尝试实现一个简单的CBT Hook:找出哪些应用程序有效多长时间? Active表示“用户正在与应用程序窗口进行交互”。

例如,用户在MSWORD上工作或用户在Youtube上在线浏览。

我们需要找出以下内容:

  1. 申请表。
  2. 文档或网址的名称(如果是IE / Chrome / FF等浏览器)。
  3. 应用程序窗口的活动时间。
  4. 我的方法是:

      {li> SetWindowsHookEx() WH_CBT
    1. 在我的回调函数CBTProcCallBack()中,我检查了代码HCBT_ACTIVATE。我得到了windows,应用程序和exe细节
    2. 记录时间。
    3. 但是,并非所有活动窗口都被捕获。

      我的方法是正确的还是我错了?

1 个答案:

答案 0 :(得分: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;