2011-07-06 80 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; 
相關問題