1

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

たとえば、MSWORD で提案に取り組んでいるユーザー、または Youtube でオンライン サーフィンをしているユーザーなどです。

次のことを確認する必要があります。

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

私のアプローチは次のとおりです。

  1. SetWindowsHookEx()為にWH_CBT
  2. 私のコールバック関数CBTProcCallBack()では、 code をチェックしますHCBT_ACTIVATE。Windows、アプリケーション、および 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 に答える