2011-07-06 7 views
1

私はCBTフックを実装して、簡単なことをしようとしています。アクティブとは、ユーザーがアプリケーションウィンドウと対話していることを意味します。アプリケーションとアクティブ時間

たとえば、ユーザーはMSWORDのプロポーザルで作業しているか、またはユーザーでオンラインサーフィンしているユーザーです。アプリケーションの

  1. 名:

    は、我々は、次のうち見つける必要があります。

  2. ドキュメントまたはURLの名前(IE/Chrome/FFなどのブラウザの場合)。
  3. アプリケーションウィンドウのアクティブ時間。

私のアプローチでした:

  1. SetWindowsHookEx()WH_CBT
  2. のための私のコールバック関数CBTProcCallBack()で私はコードHCBT_ACTIVATEをチェックします。私は窓、アプリケーションとexeの詳細を得る
  3. 時間を記録する。

ただし、すべてのアクティブなウィンドウが取得されるわけではありません。

私のアプローチはOKですか、間違っていますか?

答えて

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; 
関連する問題