【问题标题】:Application and active time申请及活动时间
【发布时间】:2011-09-29 10:32:24
【问题描述】:

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

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

我们需要找出以下几点:

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

我的做法是:

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

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

我的方法没问题还是我出错了?

【问题讨论】:

    标签: 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;
    

    【讨论】:

      猜你喜欢
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多