問題タブ [keyboard-hook]

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 投票する
4 に答える
1615 参照

c++ - グローバルフックなしでマウス/キーボードのアクティビティを通知する方法は?

一番上に透明なウィンドウ (WS_EX_TRANSPARENT) が浮かんでいます。

マウスの移動 (画面上の任意の場所) またはキーボード ストロークがある場合は常に、関連情報 (マウスの位置など) を表示する必要があります。

グローバルフックを使用せずにマウス/キーボードのアクティビティをキャプチャすることは可能ですか? ウイルス対策ソフトウェアは、ほとんどの場合、グローバル フックの使用に対して誤ったアラームをトリガーします。

どんなアイデアでも大歓迎です。

0 投票する
0 に答える
349 参照

delphi - appcommand_media_play、appcommand_media_stop などのグローバル フック

Delphi アプリケーションで appcommand_media_play、appcommand_media_stop、appcommand_media_nexttrack などをキャプチャしようとしています。

現在、私はコードを使用しています:

ただし、これはウィンドウにフォーカスがある場合にのみ機能します。

これを行う良い方法は、windows hook ex かもしれないと思います。しかし、これらの特別なキーをキャプチャする方法がわかりません。さらに、グローバルフックを作成するために必要なライブラリを作成したことはありません。

誰もこれを達成する方法を知っていますか?

返信をお待ちしております

そして私の英語を許してください

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

c++ - Windowsでコピーアクションをフックする方法

WindowsフックDLLを記述して使用し、ウィンドウメッセージなどをウィンドウにキャプチャする方法を知っています。私がする必要があるのは、任意のアプリケーションのシステムで実行されたコピー(Control + Cまたはその他の方法)をキャプチャすることです。Windowsフックを使用してこれを行う簡単な方法はありますか?

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

java - Ctrl + Bキーボードバインディングはどのように機能しますか?

Ctrl+ Binと他のWordショートカットは、使用している言語に関係なく同じように機能します-このバインディングはどのように行われますか?Javaで実行できますか?

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

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

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

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

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

c++ - 低レベルのキーボードフック:コールバックに到達していません

タブレットの「ホットキー」ボタンの1つから送信されたキーシーケンスをキャプチャし、その機能を再プログラムするための簡単なコードを作成しようとしています。ボタンを押すと、LWin + LCtrl+Tabが送信されます。

しばらく探し回った後、WH_KEYBOARD_LLフックを試してみることにしましたが、数時間経っても、実際の機能は言うまでもなく、フックを機能させることができません。

現在、私は次のものを持っています:

SetWindowsHookExによって返されるハンドルは間違いなくNULLではありませんが、何らかの理由で、押しようとしたキーの数に関係なく、KeyTrapがまったく呼び出されません。また、コールバックをDLLに入れて、実行時にLoadLibraryを使用しようとしましたが、これでもまったく同じ結果が得られます。

私はこのすべてのWin32プログラミングに慣れていないので、非常にばかげた間違いかもしれません。

どうもありがとう!

(PS:コードはWin7で実行されています。現時点では実際のキーボードにアクセスできませんが、オンスクリーンキーボード、リモート(RDP)入力、およびタブレットのハードウェアホットキーからキーストロークを生成しようとしました。これが問題でしょうか? )。

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 投票する
4 に答える
3274 参照

c# - グローバル キーボード フックがコンピューターの速度を低下させる

この記事のコードを使用しています:

少し変更しますが、キーストロークを数回押すのが速すぎると、コンピューターが少し「遅く」なり、「ラグ」が発生することがあります。

そのため、イベント HookCallback が非同期にヒットすると、少しラグが発生することがありますが、このメソッド「HookCallback」のコードがラグを発生させているのでしょうか、それともそれ自体をフックしているのでしょうか? "HookCallback" を入力するたびに新しいスレッドを作成するという考えがありましたが、それは役立つかもしれませんが、キーを押すたびに新しいスレッドを開始したいですか? 私はすでに非同期呼び出しを取得しているので、それ以外に別のスレッドを開始する必要があるかどうかわかりません。

私の質問は簡単です。どこで、なぜコンピューターの速度が低下するのですか? または、カスタム コードを別のスレッドに配置する必要がありますか?

そして、別の質問があります。いくつかのキーを押した後、イベントを「フック解除」したかのように「HookCallback」が呼び出されず、キーストロークがまったくキャプチャされないことがあります。手動で行わない限り、イベントをフック解除しないようにするにはどうすればよいですか?

ありがとうございました。

0 投票する
0 に答える
1542 参照

c# - しばらくすると、グローバル キーボード フックが応答しない

以下のコードを使用していますが、少し変更しています。

イベントを「フック解除」したかのように、数回キーを押した後、「hookProc」が呼び出されず、キーストロークがまったくキャプチャされないことがあります。手動で行わない限り、イベントをフック解除しないようにするにはどうすればよいですか? フックを購読し続けるにはどうすればよいですか?

ありがとうございました。

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

python - マクロ レコーダの Alt キーの問題

(PyHook に基づいて) マクロ レコーダーを作成していますが、#1 に Alt キーが含まれている場合、キーの組み合わせ #1 をフックした後、キーの組み合わせ #2 を押すことができません。修飾キーを押す以外に何をすればよいですか? (alt、ctrl、shift)? 以下に 2 つの主な機能を示します。