問題タブ [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 投票する
7 に答える
9336 参照

c# - Windows が低レベル (グローバル) キーボード フックをアンフックする原因は何ですか?

SetWindowsHookExwithを介してインストールされたいくつかのグローバル キーボード フックWH_KEYBOARD_LLがあり、Windows によってランダムにフック解除されるようです。

UnhookWindowsHookExハンドルを呼び出すと が返されるため、フックがアタッチされなくなったことを確認しましたfalsetrue(正常に動いていた時に戻ることも確認済み)

一貫した再現性はないようです。タイムアウトや例外がスローされたためにフックが外れる可能性があると聞きましたが、処理メソッドのブレークポイントに1分以上置くだけで両方を試しました.ランダムな例外 (C#) をスローするだけでなく、それでも動作しているように見えます。

コールバックでは、すぐに別のスレッドに投稿するので、おそらく問題にはなりません。Windows 7は明らかにタイムアウトについてより積極的であるため、レジストリでタイムアウトをより高く設定するためのWindows 7のソリューションについて読みました(ここではすべてWin7を実行しているため、これが他のOSで発生するかどうかはわかりません)が、そうではありません理想的な解決策とは思えません。

バックグラウンド スレッドを実行してフックを時々更新することを検討しましたが、これはハックですが、それを行うことによる実際の悪影響については知りません。Windows のグローバル レジストリ設定を変更するよりも優れているようです。 .

他の提案や解決策はありますか? フックを設定するクラスとそれらがアタッチされているデリゲートはどちらも静的であるため、GC を取得するべきではありません。

編集:GC.Collect();それらがまだ機能していることを呼び出して検証したため、ガベージ収集されていません。

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

c# - WinForms:テキストボックスがaltキーを処理してフォーカスを失うのを防ぐには?

設定構成のキーボード ショートカットをキャプチャするために使用するこのテキスト ボックスがあります。低レベルのキーボード フックを使用してキーをキャプチャし、それらが Windows キーなどのアクションを実行できないようにしますが、Alt キーは引き続き入力され、テキスト ボックスのフォーカスが失われます。

Alt キーをブロックして、フォーカスがテキストボックスに変更されないようにするにはどうすればよいですか?

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

python - Pythonでのマウスとキーボードの組み合わせイベントの生成

たとえば、キーの押下とマウスのクリックを同時に実行できるようにしたいControl+LeftClick

現時点では、Controlを実行してから、次のコードで左クリックすることができます。

これは、キーボードのコントロールを押してからクリックすることです。コントロールを長く押し続け、コードの実行を続行するために押したまま戻るには、これが必要です。キーを押してから、コードの後半で、マウスの動作のようにキーを持ち上げるように指示する、より低いレベルの言い方はありますか?

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

c# - C# でイベントが発生した後に何かを行うにはどうすればよいですか?

次のプロジェクトを使用して、C# アプリケーションでグローバルなキーボードとマウスのフックを処理しています。

このプロジェクトは基本的に、WH_MOUSE_LL または WH_KEYBOARD_LL 定数を使用した Win API 呼び出し SetWindowsHookEx のラッパーです。また、特定の状態を管理し、通常、この種のフッキングをかなり簡単にします。

私が取り組んでいるマウスジェスチャー認識ソフトウェアにこれを使用しています。基本的には、グローバル ホットキー (CTRL など) が押されたことを検出し、ユーザーが定義済みのジェスチャの形でマウスを動かしてから、グローバル ホットキーを離すようにセットアップしました。

KeyDown のイベントが処理され、プログラムが KeyUp イベントを受け取るまでマウスの位置の記録を開始するように指示します。これは正常に機能しており、ユーザーがマウス ジェスチャ モードに簡単に入ることができます。KeyUp イベントが発生し、適切なジェスチャが検出されると、ユーザーが描画した特定のジェスチャに対して定義したアクティブ ウィンドウに特定のキーストロークが送信されると想定されます。

SendKeys.Send/SendWait メソッドを使用して、出力を現在のウィンドウに送信しています。

私の問題は次のとおりです。ユーザーがグローバル ホットキー (CTRL など) を離すと、KeyUp イベントが発生します。私のプログラムは、記録されたマウス ポイントを取得し、関連するジェスチャを検出し、SendKeys を介して正しい入力を送信しようとします。

ただし、これはすべて KeyUp イベントにあるため、そのグローバル ホットキーの処理は完了していません。したがって、たとえば、検出されたときにキー「A」を送信するジェスチャを定義し、グローバル ホットキーが CTRL である場合、検出されたときに SendKeys は「A」を送信しますが、CTRL はまだ「ダウン」しています。つまり、単に A を送信する代わりに、CTRL-A を取得しています。したがって、この例では、単一の文字「A」を物理的に送信する代わりに、CTRL-A ショートカットを使用してすべてを選択しています。ユーザーが CTRL (グローバル ホットキー) を離しても、システムはまだダウンしていると見なしています。

KeyUp イベントが発生したら、グローバル ホットキーがシステムによって登録されなくなり、SendKeys を介して正しい入力が送信されるように、プログラムを一定時間または特定のイベントの間待機させるにはどうすればよいでしょうか?

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

vb6 - タスクマネージャーが行う前にCtrl+Shift+Escをキャプチャする

Windows API(SetWindowsHookEx)を使用してキーボードイベントをキャプチャしています。Ctrl + Shift + Escの組み合わせをアプリケーションに渡して処理したいのですが、タスクマネージャーの表示を抑制します。

残念ながら、3つのキーの組み合わせは、私のキーボードフックルーチンまでは到達しないようです。私は今までに2つのキーしか取得しません。

アプリケーションのためだけに、タスクマネージャーをグローバルに抑制したくありません。

これを行う方法はありますか?

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

macos - Mac OS X でグローバル キーボード フックをどのように実装しますか?

これは Windows で実行XGrabKeyでき、X11 で使用できることはわかっていますが、Mac OS X ではど​​うでしょうか? アプリケーション ウィンドウがアクティブでない場合でも呼び出すことができるショートカット キーを設定できるクラスを作成したいと考えています。

0 投票する
3 に答える
6749 参照

c# - Winkey+L を使用した低レベルのキーボード フック/SendInput は可能ですか? (ワークステーションのロックアウトは Vista 以降で傍受されます)

私は、Windows ユーザーが Apple の Bluetooth キーボードを使用できるようにするUAWKS (Unofficial Apple Wireless Keyboard Support) というプロジェクトに取り組んでいます。UAWKS の主な目標の 1 つは、Cmdキー ( WinkeyWindows のように動作する) をに交換してCtrl、ユーザーがCmd+Cでコピー、Cmd+Tで新しいタブなどを実行できるようにすることです。

現在、 AutoHotkeyを使用して開発されており、これは Windows XP で非常にうまく機能しました。ただし、Vista および Windows 7 では、Cmd+Lは問題を引き起こします。

  • 低レベルのキーボード フックに関係なく、Win+Lは常に Windows によって傍受され、通常はワークステーションをロックします...
  • このレジストリ ハックでワークステーションのロックを無効にすることはできますが、AHK でWin+を押しLてもリバウンドすることはできません。
  • Win+を押すとL、次の (追加の) Winkey Up まで Winkey は Keydown 状態のままになります。Keyup イベントのシミュレーションもうまくいかないようです!

Win+Lは他のすべてを台無しにする特別なコードのようです。

AHK のソース コードを調べたところSendKey()、keyboard_mouse.cpp (v1.0.48.05 の 883 行目付近) でこの問題に対処しようとしましたが、うまくいきません。C# で独自の低レベルのキーボード フック アプリケーションを作成しましたが、同じ問題が発生します。

他の誰かがこれに遭遇しましたか?回避策はありますか?

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

winapi - ウィンドウへのキーストロークを傍受する

ウィンドウに送信されたキーストローク (および文字) を傍受することは可能ですか? インターセプトとは、ウィンドウにフックするだけでなく、中間者をプレイすることを意味します。

ウィンドウへのキーストロークをフィルター処理 (つまり、いくつかのキーストロークを排除) したいと考えています。

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

java - Windows の JNA キーボード フック

Windows にキーボード フックをインストールするための JNA コードをまとめました (JNA の例を使用)。コードはすべてコンパイルされ、フックがインストールされます (フックへのハンドルが正常に取得されます)。また、フックを正常にアンインストールできます。ただし、キーボードのキーを押してもコールバックは呼び出されません。これが私のコードです(ほとんどはJNAの例から取得した型定義です。私の部分では「メイン」に直接移動してください)

過去に C++ と C# の両方を使用して、キーボード/マウス フックを数回実行しました。これは Java での初めての試みであり、ライブラリを正しくインポートしてマップしたかどうかはわかりません。何か案は?

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

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

c# - オートライターの検出(keboard-hooks)

テキスト入力がキーボードまたはオートライターツール(キーボードフックを使用してキーボードをシミュレートするアプリ)によって処理されたかどうかを検出する必要があります。何かアイデアはありますか、それとも不可能ですか?ありがとう