1

我正在尝试实现一个 CBT Hook 来做一件简单的事情:找出哪个应用程序处于活动状态多长时间?活动意味着“用户正在与应用程序窗口进行交互”。

例如,用户在 MSWORD 中处理提案或用户在 Youtube 上在线冲浪。

我们需要了解以下内容:

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

我的方法是:

  1. SetWindowsHookEx()为了WH_CBT
  2. 在我的回调函数CBTProcCallBack()中,我检查代码HCBT_ACTIVATE。我得到了窗口、应用程序和 exe 的详细信息
  3. 记录时间。

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

我的方法好吗还是我错了?

4

1 回答 1

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;
于 2012-03-05T17:25:01.083 回答