申请及活跃时间

发布于 2024-11-18 13:50:19 字数 495 浏览 3 评论 0原文

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

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

我们需要找出以下信息:

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

我的方法是:

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

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

我的方法可以吗还是我错了?

I am trying to implement a CBT Hook to do one simple thing: Find out what application is active for how long? Active means "user is interacting with the application window".

For instance user working on proposal in MSWORD OR user surfing online on Youtube.

We need to find out the following:

  1. Name of the application.
  2. Name of the document or URL (if it is IE / Chrome / FF etc browsers).
  3. Active time of the application windows.

My approach was:

  1. SetWindowsHookEx() for WH_CBT
  2. In my callback function CBTProcCallBack() I check for code HCBT_ACTIVATE. I get the windows, application and exe details
  3. Log the time.

However, not all the active windows get captured.

Is my approach ok OR am I going wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

半﹌身腐败 2024-11-25 13:50:19

这是一个简单的解决方案,用于找出用户打开的所有应用程序。例如,该方法是,您必须循环检查当前前景窗口是否已更改。尝试在计时器事件中执行此操作,如果先前的窗口名称与当前窗口名称不同,您可以轻松计算用户使用该应用程序的时间。

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;

Here is a simple solution to find out what all are the applications that user has opened. The approach is, say, you will have to check in a loop if the current foreground window has changed or not. try doing it in the timer event and if the previous window name is not same as current window name, you can easily calculate the time that user has used this application.

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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文