現在実行中のフォアグラウンド ウィンドウ アプリケーションのタイトルと exe 名を取得する方法は知っていますが、a を使用して、TTimer
いつ変更されるかを確認します。
Alt+Tab、タスクバー アプリケーションの選択、または新しいプログラムの開始によってトリガーされるイベントを検出する方法はありますか?
Delphi 2006 と Windows 7 64 ビットを使用しています。
現在実行中のフォアグラウンド ウィンドウ アプリケーションのタイトルと exe 名を取得する方法は知っていますが、a を使用して、TTimer
いつ変更されるかを確認します。
Alt+Tab、タスクバー アプリケーションの選択、または新しいプログラムの開始によってトリガーされるイベントを検出する方法はありますか?
Delphi 2006 と Windows 7 64 ビットを使用しています。
1 つのオプションは、グローバル フックをインストールすることです。CBT フックを使用すると、システムはウィンドウがアクティブ化されるたびに (とりわけ) フック プロシージャを呼び出します。グローバル フック コールバックは、プロセスのアドレス空間にロードされる dll に配置されるため、同じ「ビット」を持つプロセスのみにマップできます (Delphi 2006 を使用すると、コールバックは 32 ビットによってのみ呼び出されます)。プロセス)。さらに、より高い権限で作成されたプロセス (つまり、フックをインストールするプロセスが管理者として実行されていない場合に管理者として実行されるアプリケーション) のアドレス空間にマップすることはできません。また、コールバックは他のアプリケーションで実行されるため、何らかのプロセス間通信メカニズムを考案する必要があります。SetWindowsHookEx
グローバルフックをインストールするために使用します。
もう 1 つのオプションは、イベント フックを使用することSetWinEventHook
です。in-contextとout-of-context の2 種類があります。前者は、グローバル フックのように、他のプロセスのアドレス空間にマップされるように dll に配置されるため、同じ欠点に苦しむことになります。文脈から外れたイベントは、最もリラックスしたものです。それらは、通知時にグローバル フックやコンテキスト内イベントとしては迅速ではありませんが、それでもタイマーよりは優れていると思います。コンテキストでフックするイベントの欠点の 1 つは、コールバックでもう少しコーディングする必要があることです。子ウィンドウでもウィンドウ フォーカス通知を受け取り、どのアプリケーションに属しているかを解決する必要があります。 .