問題タブ [setwindowshookex]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1766 参照

c# - .NETアプリケーションで呼び出されていない低レベルのキーボードフック

C#でキーロガーを作成していますが、キーボードイベントからフックメソッドを呼び出すのに問題があります。私のコードは正しいように見えますが、何らかの理由でコールバックが発生していません。

関連するコードは次のとおりです。

呼び出しは本来のSetWindowsHookExハンドル(つまりnullではない)を返すので、それがインストールされていることを意味するはずですが、ブレークポイントをに入れると、HookCallback到達しません。

誰かが私が間違っているかもしれないことをアドバイスできますか?

0 投票する
2 に答える
4336 参照

.net - Global Hooks と Raw Input を同時に使用できますか?

SetWindowsHookExすべてのキーストロークを取得するためにGlobal Hooks を使用してみました。

問題は、グローバル フックと Raw Input を同時に使用できないことです。

Raw Inputs を有効にすると Global Hooks が自動的に無効になるため、ここに何らかの問題があるに違いないと考えています。

0 投票する
2 に答える
2102 参照

c++ - SetWindowsHookExがグーグルクロームで失敗します。エラーコード87無効なパラメータ

チュートリアルベースのプログラムを作成していますが、コードを特定のアプリにフックして、チュートリアルをアプリと相互作用させることができるようにしたいと考えています。

私のフックコードは、グーグルクロームを除くほとんどのアプリで機能します。コードを次のように削除したので、コードがうまくいかないことがわかります。

Main.cpp

Dllのテスト(mydll.dll)

定義ファイル

SetWindowsHookExまではすべて正常に機能し(processIdの取得、ライブラリとgetprocaddressのロードを含む)、エラーコード87(無効なパラメーター)でNULLを返します。

と私のコードは両方ともchrome.exe32ビットです。

これは他の誰かのために機能しますか、それとも誰かがそれが機能しないことを知っていますか?

ありがとう

0 投票する
1 に答える
1382 参照

winapi - DLLをAdobeReaderXに挿入する方法

スクロールバーに送信されたイベントを読み取るDLLをAdobeReaderXに挿入する必要があります(スクロールバーが非表示になっている場合でも)。ドキュメントのどのページを表示しているかを確認するには、これを行う必要があります。

win32フックAPIを使用してdllをフックしようとしました。デスクトップ上のすべてのプロセスにCBTフックを与え、Adobe Reader Xウィンドウの作成をリッスンしてから、このウィンドウをスクロールバーフックでフックします。

問題は、Adobe Reader Xにスクロールバーフックが配置されないことです。これらのウィンドウが作成されたときに、作成ウィンドウまたはウィンドウアクティブ化メッセージが表示されません。これらのメッセージを取得するにはどうすればよいですか?また、Adobe Reader Xに接続するにはどうすればよいですか?

必要に応じてヘッダーをここに表示します

0 投票する
1 に答える
3218 参照

delphi - CreateFile フック

CreateFile のフックを作成しようとしているので、プロセスがファイルを作成しようとすると、作成した hookdll がユーザーに「このプロセス xx.exe は xx.exe を作成しようとしています。続行しますか?」と通知します。

これまでのところ、私はここにいるので、このコードで変更する必要があるもの:

0 投票する
1 に答える
169 参照

winapi - アプリケーションとアクティブ時間

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

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

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

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

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

  1. SetWindowsHookEx()為にWH_CBT
  2. 私のコールバック関数CBTProcCallBack()では、 code をチェックしますHCBT_ACTIVATE。Windows、アプリケーション、および exe の詳細を取得します
  3. 時間を記録します。

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

私のアプローチは大丈夫ですか、それとも間違っていますか?

0 投票する
5 に答える
4742 参照

c# - 低レベルのキーボードフックがWindowsによって自動的に切断されたことを検出することは可能ですか?

キーボードフックを使用するプログラムに取り組んでいます。ただし、プログラムが実行されているPCがわずかに過負荷になると、Windowsがプログラムからフックを切断し、キーストロークに応答しなくなります。

これを防ぐ方法、またはさらに良い方法として、パイプラインを含む別のアーキテクチャを使用して、まったく同じ問題を解決する別の方法を提案する方法はありますか?

0 投票する
1 に答える
4540 参照

c# - SetWindowsHookEx で設定された低レベルのキーボード フックは、C# で関数の呼び出しを停止します

iTunesをグローバルに制御するためにキーの押下を監視するプログラムを作成しています。また、いくつかの WinForms (トラック情報を表示し、オプションを編集するため) もあります。

低レベルのキーボード フックは、しばらくの間はうまく機能します。プログラムを起動すると、キーボード フックが設定され、iTunes が開きます。次に、メモ帳を開くと、大量の情報を非常に高速に入力でき、すべてのストロークがキャプチャされ、最大で 30 ミリ秒がフック関数に費やされます (ほとんどの場合、10 ミリ秒未満)。フック関数は、別のスレッドによって処理されるキューにイベントを追加するだけです。独自の Application.Run() を使用して、独自の優先度の高いスレッドで実行されています。

ただし、iTunes 内 (プログラムでイベントを生成する再生/一時停止のクリックなど) またはプログラム内 (オプション ウィンドウを開くなど) を開始すると、フック関数が呼び出されなくなります。これは、キーボードをまったく使用していない場合でも発生する可能性があります (たとえば、iTunes で起動し、再生をクリックして一時停止し、キーを押した場合など)。

フックが呼び出されない原因は、フック関数で費やされた時間が長すぎるためではありません。

UnhookWindowsHookEx を呼び出すと、フック関数がまだ呼び出されているかどうかに関係なく、常に true が返されます。

では、何が原因でしょうか?

1 つの考え (証拠も解決策もありませんが) は、マネージ スレッドがもはや正しいネイティブ スレッドではないということです。私は自分のプログラムで多数の (マネージド) スレッドを使用しており、1 つのネイティブ スレッドで多数のマネージド スレッドを実行でき、マネージド スレッドが実行するネイティブ スレッドを変更できることを読みました。フックがまだメッセージを生成しているが、それらを間違ったスレッドに送信している可能性はありますか? この場合、どうすれば回避できますか?


編集:フックとコールバック

私のKeyMonitorのわずかに削除されたバージョン。わかりやすくするために削除されています。いくつかのユーティリティ (Key 列挙型のほとんどの値や、ToString() や FromString() などの Keys クラスの多くの関数など) といくつかのエラー処理を削除しました。

重要なもののほとんどは KeyMonitor クラスにあります。KeyMonitor.Start() はメッセージのスレッドを開始します。KeyMonitor.HookThread() はそのスレッドであり、メッセージ ループの Application.Run() と共にフックを作成します。KeyMonitor.KeyboardHookProc() はコールバック関数であり、KeyMonitor です。 HookEventDispatchThread() は、コールバックによって記録されたイベントをディスパッチするものです。

0 投票する
1 に答える
2880 参照

c# - SetWindowsHookEx がスレッド ID で機能しない

こんにちは、助けようとする人に前もって感謝します。CBT Windows フックを設定しようとしています。これは、グローバルに設定するとうまく機能しますが、単一のスレッドにアタッチしようとすると失敗します。私が知る限り、私は本ですべてをやっています: - アンマネージ dll からフック プロシージャを公開しました - 私のアプリケーション、dll、およびスレッドのプロセスはすべて 32 ビットです - 私が使用するスレッド ID は正しいです (spy++ で確認)

C++ コードからスレッドを 1 つだけフックしようとしたところ、なんとか成功しました...アンマネージ コードからスレッドを 1 つだけフックできますか?

とにかくここに私のコードがあります:

0 投票する
1 に答える
2039 参照

c# - C# の低レベルのマウス フックとフォーム イベントの処理

VS 2010 で生成された、開始と停止の 2 つのボタンを含む単純なフォームを使用しています。Start は SetWindowsHookEx を使用して WH_MOUSE_LL をトリガーし、stop はフックを停止します。フックは正常に機能し、マウスの中ボタンのクリックをダブルクリックに「置き換える」ことができます。唯一の問題は、フォームの最小化/最大化/閉じるボタンをクリックすることです.上記のボタンによって呼び出されるフックとイベント。これらのボタンのいずれかを押すと、アクションが完了する前にしばらくの間「押された」ままになるという事実を反映しています(フォームの最小化など)。フォームを右クリックしてこれらのアクションのいずれかを選択すると、すぐに応答します。フックを停止して上記のボタンのいずれかを押すと、同じことが起こります。誰かがそのような行動に遭遇しましたか?