問題タブ [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.
delphi - Windows グローバル キーボード フック - Delphi
インターネットで見つけたソース コードを使用して、グローバル キーボード フック DLL を作成しました。最良の部分は、ブラウザを除いて、見事に機能します。
ブラウザがフォーカスを取得すると、押された最初のキーが失われるように見えることを除いて、ブラウザのすべてのキーを取得します。これを IE と Firefox でテストしたところ、どちらも同じようです。
たとえば、IE を開いて www と入力すると、、帰るしかないww。ブラウザ ウィンドウがフォーカスされたままであれば、それ以上キーが失われることはありません。ブラウザーがフォーカスを失い、フォーカスを取り戻すとすぐに、最初のキーが再び失われます。
WH_KEYPRESS / WH_KEYUP の代わりに WH_KEYDOWN のみを使用しているためでしょうか? 誰でもこれに光を当てることができますか?
ありがとうございました
PS: フック関数自体は以下のとおりです: DLL にはメモ ボックスとアプリ ハンドルが送信され、DLL はメッセージとユーザー メッセージを送信します。
c++ - Windows 7 で Windows キーを傍受するにはどうすればよいですか?
ご挨拶、
here で説明されているように、低レベルのキーボード フックを実装しました。これは WinXP で問題なく動作します。問題は、Windows 7 では左右の Windows キーが傍受されなくなったことです。
Windows 7 でこれらのキーを再取得する方法についての提案は大歓迎です!
乾杯、
ロニー
c - なぜこの機能が失敗するのですか?
いくつかのキーボード フックを作成して、Windows フックを理解しようとしています。私は機能を持っています:
...ここから電話をかけようとしましたが、ほとんどの場合失敗します。なんで?
c# - C#グローバルホットキー(通常使用されるグローバルフックなし)
私は、いくつかのホットキーに反応しなければならない個人的な使用のためのプログラムを作成しています。たとえば、ctrl + win + zを押すと、特定のアクションを実行する必要があります。現在、user32.dllのGetKeyState()を使用してキーが押されたことを検出できますが、アクティブなアプリケーションに渡されるのを止めることはできません。ctrl + win + zの場合、実行したいアクションが発生しますが、たとえばエクスプローラーを使用している場合、エクスプローラーはそれを「元に戻す」としても読み取ります。
明らかな解決策は「SetWindowsHookEx()」(これもuser32.dllから)を使用することですが、それを含む解決策(このサイトのサンプルコードに類似したもの)を試すたびに、最初に使用するときに大幅な速度低下が発生しますホットキー。これは受け入れられません。
誰かが助けてくれることを願っています。必要に応じて、より多くの情報を提供できます。
vb6 - Windows7でVB6を使用してvbAcceleratorキーボードフックDLLをインストールできません
私のVB6プロジェクトでは、MDIフォームのツールバーコントロールにキーボードショートカットが必要です。このために、vbAcceleratorフックにあるvbalHook6.dllでvbAcceleratorキーボードフックを使用しました(この提案をしてくれたAlex Kに感謝します)。ランタイムエラー「429」が発生します。つまり、ActiveXオブジェクトを作成できません。プロジェクトで必要なDLLを参照し、レジストリサーバーユーティリティ(zippy32)を使用してWindowsにdllを登録しようとしましたが、エラーコード0x80004005で登録できません。ActiveXがオブジェクトを作成できない-vbAcceleratorを見ましたこれは、このタイプのエラーの理由とその解決策を具体的に説明していますが、私にはうまくいきませんでした。Keyboard Hook DLLで提供されるプロジェクトは、私のコンピューターでは正常に実行されますが、私のプロジェクトでは実行されません。手伝ってください...............:-| ありがとう..........
[アップデート]
再びAlexKの助けを借りて、必要なすべてのDLLを正常に登録しました。
しかし、何かが再びうまくいかなかった…。
IWindowsHook_HookProc
これは、アプリケーションでショートカットとして必要なキーの組み合わせを取得するためのメソッドのコードです。いずれかのキーが押された場合にアプリと一緒にVBをクラッシュさせる以下のコードの何が問題になっていますか?
保存(Ctrl + s)と開く(Ctrl + O)のショートカットも含めたいのですが、特定のキーの組み合わせを識別するために連鎖状態を形成するにはどうすればよいですか...?
終了機能
c++ - C++のグローバルキーボードフック
フックに関するチュートリアルや記事はすでにたくさん見ましたが、よくわかりません。主な理由は、すべての例で異なるソリューションが使用されているためです。
私はフックを生かし続ける何かを実装しなければならないことを知っています。通常、それはある種のwhileサイクルです。Q1:このループがコールバックのあるクラスにあった場合、スレッドはそれらを実行できなくなりますか?
しばらく時間がかかることは承知していますが、グローバルキーボードフックのよく説明された例をいただければ幸いです。または、バイナリを使用した実際の例にリンクしてください。(私を信じてください、私はそれを最後の数時間グーグルしようとしてきました)。
ありがとうございました
vb6 - vbAccelarator Win32 フックを使用すると、VB IDE と共にアプリケーションがクラッシュする
ツールバー コントロールのボタンのキーボード ショートカットが必要な VB6 プロジェクトに取り組んでいます。これを実現するために、 vbAccelerator のWin32 Hooks ライブラリを使用しました。これは、IWindowsHook_HookProc
キーストロークを取得し、押されたショートカットに基づいてアクションを実行するために使用する関数です ( Ctrl+Nは新規、Ctrl+O は開く、Ctrl+Sは保存) が、アプリケーションをクラッシュさせるコードの何が問題なのかわかりませんVB6 IDE とともに。Ctrlこの機能をテストするために+Nキーの組み合わせを特定しようとしたため、機能は現在不完全です。私を助けてください.... :-|
.net - キーボードフックはキーの動作を変更します
キーボードフックをインストールしてすべてのキーをキャプチャし、それらに関連するテキストを表示するプログラムを作成しています。
しかし、私は引っ掛かりにぶつかりました、そしてそれはフックがインストールされるときいくつかのキーが振る舞いを変えることです。
小さいながらも完全なテストプログラムを投稿する方法については説明しますが、ここでは問題について説明します。
この問題は、C#プログラムである.NET4.0のWindows764ビットで発生します。私はこれは問題ではないと思います。
私のフックはそれ自体を経由してインストールSetWindowsHookEx
し、システムで処理されるすべてのキーを処理します。
フックメソッドが単に戻るか、キーの最小限の処理を実行する場合(動作を変更するものをすぐに投稿します)、キーボードはプログラムで期待どおりに機能します。
ただし、User32.dllからこの関数を呼び出しToAscii
て、キーボードのOemTildeまたは同様のキーが実際にどのキーであるかを判断すると、「次のキーをオーバーレイする」キーは機能しなくなります。そのようなキーの正しい名前はわかりませんが、2つのアポストロフィタイプである「」と「, as well as
´〜¨ and
」は機能を停止します。
たとえば、を押してからを押す~
とN
、次のように表示されます。
- キーボードフックが取り付けられていない場合:ñ
- キーボードフックが取り付けられている場合:n(上記のno〜に注意してください)
なぜこれが起こるのか、そしてどうすればこの問題を解決できるのか誰かが知っていますか?
今のところ、他のプログラムでキーを正しく処理するだけで解決します。それは、自分のプログラムで正しいキーシーケンスを正しく検出できないことを意味します。
いくつかの詳細情報:
ToAscii
フックメソッドの一部として関数を呼び出すと、別の問題が発生します。のようなキー¨
は2回処理されます。¨
一度押すと、メモ帳は2¨¨
文字を受け取り、N
今押すと。が追加されますN
。
ただし、BeginInvoke
別のスレッドでキーを処理するために使用する場合、キーボードフックメソッドから戻った後、最初の問題が発生します。
私のプログラムはおそらくその点で少し特別です:
- キーボードの状態を使用していません(つまり、渡す「キーの状態」の256バイト配列は0でいっぱいです)
- 私はデッドキーを気にしません(私のプログラムがそれらを処理しないという意味で、私は自分のプログラムがそれらをシステムの他の部分に役に立たなくすることを望まないようにそれらを十分に気にします)
そのため、私のコードは次のようになりました。
c#-4.0 - 32ビットマシンで.NET4.0フレームワーク用にコンパイルすると、SetWindowsHookExは0を返します。
アプリケーションにフォーカスがない場合でも、押された3つのキーを取得するように低レベルのWindowsキーボードフックを設定しようとしています。これを行うために、私はSetWindowsHookExを次のように呼び出しています
これは、.NET Framework 3.5を使用する32ビットおよび64ビットマシンで機能していましたが、.NET Framework 4.0にアップグレードした後、32ビットマシンでは機能しなくなりました。
4.0 Frameworkを使用して、32ビットマシンと64ビットマシンの両方でこれを機能させるために、これを解決する方法を知っている人はいますか?
.net - .NET と Delphi の複数のキーボード フック
.NET コンポーネントと Delphi コンポーネントの両方を含むアプリケーションがあり、両方のコンポーネントで (SetWindowsHookEx を使用して) キーボード フックに登録します。最初に .NET に登録し、後で Delphi に登録します。
問題は、Delphi のフック デリゲートが .NET のフック デリゲートの前に呼び出されることです。
MSDN によると、フック チェーンは単なるリストであり、私が理解しているように、登録の順序に従ってデリゲートを呼び出す必要があります。
ここで何が起こっているのか誰にも分かりますか?前もって感謝します!