問題タブ [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.
winapi - Windows フックを使用してキーを無効にする
低レベルのキーボードフックを使用して、キーボードの文字「a」を完全に無効にしようとしています。問題は、keyboardproc から 0 を返すとキーが無効にならず、1 を返すと無効になることです。CallNextHookEx を呼び出さずに keyboardproc から戻ると、メッセージがブロックされると思いました。0 を返すことと 1 を返すことに違いはありますか。
windows - アプリで Windows メッセージの送信者を見つけるにはどうすればよいですか?
ライブラリでキーボード フック プロシージャを使用するアプリがあります。1 つのメッセージのフックの wParam は 255 で、これは "(reserved / OEMClear)" と考えられます。アプリケーションがライブラリでクラッシュする原因となるため、このメッセージの原因を突き止めたいと思います。発生してはならないことを考えると、それを特定するのは良いことです。メッセージは、私たちが持っている 1 台の PC だけに繰り返し届きます。他のコンピューターにはメッセージがまったく表示されません。
では、ウィンドウに送信されたメッセージの送信元を追跡する方法、またはシステム上のすべてのメッセージを追跡する方法はありますか?
c# - C#を使用してショートカットキーをブロックする
以下のコードを使用して、Alt + Tab、Alt + Esc、Ctrl + Esc、およびWindowsキーを無効にしていますが、どういうわけか機能していません。私がそれを修正するのを手伝ってください。
macos - OS Xで、あるキーボードの修飾キーを別のキーボードのキープレスに適用する
フット ペダルを使用してキーを押したいのですが、OS X は 2 つの異なるデバイス間で修飾キーを関連付けません。synergy+ などの仮想キーボードを作成するアプリケーションをいくつか見つけたので、2 つのデバイスからイベントをキャプチャし、それらが 1 つのデバイスからのものであるかのようにマージできる必要があることを知っています。これを実現する方法についてのアイデアはありますか?
vb.net - キーの組み合わせをアプリケーションにバインドする
vb.net アプリケーションにキーの組み合わせをバインドするにはどうすればよいですか? 私はそれがレジストリと関係があることを知っていますが、これを行うには何をどのように行うべきかについて地上で考えていません. アプリが開いているときにユーザーがこれらのキーを押して機能を実行できるようにしたいのですが、アプリが閉じているときはできません。
助けてくれてありがとう!
windows - Vista 以降のシステム全体のキーボード フック
私が作成したシステム全体のキーボード フック DLL は、Windows XP で何年も正常に動作しています。
ただし、特定の新しいバージョンの Windows (Vista Home Premium と Windows 7 など) では、フックがまったく機能しないか、インストールしたアプリケーション内でローカルにのみ機能するようです。
インターネット上のいくつかの場所で、SetWindowsHookEx の呼び出しで WH-KEYBOARD を WH-KEYBOARD-LL に変更するよう提案されているのを見たことがありますが、試してみたところ、これは役に立たないようです。フックタイプを WH-KEYBOARD-LL に変更する以外に何か変更する必要はありますか?
(PS: Delphi では定義されていないため、WH-KEYBOARD-LL を 13 と定義する必要がありました。これは正確であると想定しています。)
windows - キーボード フックの ToAscii/ToUnicode はデッド キーを破棄します
ToAscii()
グローバルな WH_KEYBOARD_LL フックでorを呼び出すToUnicode()
と、デッドキーが押されると「破棄」されるようです。
たとえば、Windows で入力言語をスペイン語に設定していて、プログラムでアクセント付き文字áを入力したいとします。通常、一重引用符キー (デッド キー) を押してから文字 "a" を押すと、期待どおり、アクセント付きのáが画面に表示されます。
ToAscii()
ただし、またはToUnicode()
を低レベルのキーボード フック関数で呼び出した場合、これは機能しません。デッドキーが破壊されたようで、アクセント付きの文字áが画面に表示されません。上記の関数の呼び出しを削除すると問題は解決します...しかし、残念ながら、これらの関数を呼び出せるようにする必要があります。
私はしばらくグーグルで調べましたが、多くの人がこの問題を抱えているように見えましたが、良い解決策は提供されませんでした.
どんな助けでも大歓迎です!
編集: LowLevelKeyboardProcToAscii()
フック関数で受け取った仮想キー コードとスキャン コードを、ユーザーの画面に表示される結果の文字に変換するために呼び出しています。
を試しMapVirtualKey(kbHookData->vkCode, 2)
ましたが、これは のように「完全な」機能ではありませんToAscii()
。たとえば、Shift + 2 を押すと、'@' ではなく '2' が返されます (または、ユーザーのキーボード レイアウト/言語に対して Shift + 2 が生成するもの)。
ToAscii()
完璧です...デッドキーが押されるまで。
EDIT2:関係のない情報が削除されたフック関数は次のとおりです。
c# - 自分の目的に合わせてキーボードフックコードを変更しています...どこから始めればよいですか?
システムトレイにあるプログラムを書いています。開いているアプリケーションで、入力されたすべての入力にキーボードフックがあります。入力された入力をインターセプトし、その入力でコードを実行してから、入力する新しい「正しい」文字を送信する必要があります。この新しいキャラクターは、フォーカスのあるアプリに表示されるものになります。
StackOverflow に関する別の質問でこのコードを見つけましたが、良さそうです。 http://blogs.msdn.com/toub/archive/2006/05/03/589423.aspx
ソリューションにクラスとして追加し、Form1 コンストラクターで新しいインスタンスを作成すると、コンパイルされます。任意のアプリへの型指定された入力は、一度に 1 文字ずつ Visual Studio の出力ペインに表示されます。
問題は、このコードが私の頭をはるかに超えていることです。これが、キーボード フックにこの非常に簡潔なコードを使用することの欠点です。使用方法を教えてくれる試行錯誤がありませんでした。
このプログラムが次のように機能することを想定しました。
このコードは、この一連のイベントにどのように適合しますか? 入力する前に入力文字を読み取る必要があります。では、入力を分析して正しい入力をライブで決定するコードはどこにあるのでしょうか? 最後に、フォーカスのあるアプリに文字を送信するために呼び出す正しい「sendInput()」タイプのコマンドは何ですか?
参照用の完全なコードは次のとおりです。
アドバイスありがとうございます!または、これについてもっと良い方法はありますか?
ありがとう!
アップデート
私の HookCallback メソッドは次のようになります。
シュート...追加Marshal.StructureToPtr
は近いですが、A first chance exception of type 'System.ArgumentException' occurred in foobar.exe
エラーになります。
アンセーフ コード、マーシャリングなしなどのバージョン (まだ「Z」は出力されません!)
c# - 低レベルのキーボードフックを使用してキーボード文字を変更する
カスタムキーボードレイアウトを作成しています。最初のステップとして、ユーザーにキーを押してもらい、キーボードフックにそれをインターセプトさせて、選択した別のキーを出力させたいと思います。
私はこのキーボードフックコードを見つけました。これは私の目的のために少し変更しようとしています:http: //blogs.msdn.com/toub/archive/2006/05/03/589423.aspx
関連する方法を次のように変更しました。
新しいKBD構造体オブジェクトを宣言し、キーボードフックによって提供されたKBD構造体をコピーし、オブジェクトのvkCodeを変更して別の文字を使用してから、提供されたオブジェクトを変更したバージョンで上書きします。これにより、異なる文字を書き込むという事実を除いて、すべてが同じに保たれることが期待されます。
残念ながら、それは機能していません。元のキーボード文字が入力されます。VisualStudioの出力ペインにもA first chance exception of type 'System.ArgumentException' occurred in MirrorBoard.exe
エラーが発生します。
キーボードフックをインターセプトして、選択したキャラクターに置き換えるには、ここで何ができますか?
ありがとう!