問題タブ [mouse-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.
.net - アプリケーションを .NET でフックしてダブルクリック イベントをキャプチャする
マウスがアプリケーション内でダブルクリックされたときを知ることができるように、アプリケーションをフックするにはどうすればよいですか?
これは .NET で実行できますか?
気をつけることはありますか?(たとえば、他のアプリケーションのクラッシュ)
visual-studio-2010 - アプリケーションのメイン ループの前に、選択した入力を抑制することはできますか?
私の Visual Studio ユーティリティ アドインSamToolsの一部として、 Ctrl+MouseWheel をキャッチし、ページアップ/ページダウン コマンドをアクティブなテキスト ウィンドウに送信するマウス入力ルーチンがあります。Visual Studio 2010 では、ズームイン/ズームアウト (バーフ) にそのジェスチャを使用する新しい "機能" が追加されました。現在、アドインはスクロール コマンドを送信しますが、入力を食べていないため、Visual Studio は依然としてフォント サイズを変更します。
への呼び出しでフックを設定しましたSetWindowsHookEx
。コールバック コードは次のとおりです。私の質問は、Visual Studio が Ctrl+MouseWheel 入力をズーム コマンドとして処理して、Ctrl キーを押した状態でマウス ホイール イベントを取得したときに単に呼び出さないようにする最善の方法ですか?CallNextHookEx
(これは私の古いコードであることを覚えておいてください。):)
MouseWheel
イベントに応答して実行されるコードは次のとおりです。
PS: SamTools はオープン ソース (GPL) です。リンクからダウンロードでき、ソースはインストーラーにあります。
PSS: ズームには Ctrl+[+] と Ctrl+[-] が適しています。Ctrl+MouseWheel をスクロールさせます (非常に一般的に使用されるコマンド)。
c++ - MouseProcフックとWM_LBUTTONDBLCLK
開発したプラグインでマウスイベントを取得するためのフック設定があります。を取得する必要がありWM_LBUTTONDBLCLK
、メッセージフローは次のようになると思います。
WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK
最初のフックを処理するときに次のフックを呼び出すとWM_LBUTTONDOWN
、フローは期待どおりです。ただし、自分の結果を返すと、予想されるダブルクリックはマウスダウンメッセージとして表示されます。なぜこれが起こっているのか考えていますか?メッセージを処理した後で停止し、次のフックに渡さないようにする必要があります。
c++ - SetWindowsHook はしばらくすると動作を停止します
しばらくの間完全に機能する WM_MOUSE のグローバル フックを定義しました。マウスが動くたびに特定のウィンドウにメッセージを投稿します。
ランダムな時間の後、フックはメッセージの送信を停止します。フックを登録解除して登録すると、再び機能します。Windows で発生している特定のことが原因でフックが停止していると思われますが、原因がわかりません。
何か案は ?
編集:フックがアクティブでなくなったときにデバッガを他のプロセスにアタッチしましたが、dllがロードされていないことがわかりました。
フック dll がアンロードされる原因は何ですか?
Edit2 : MouseHookProc でクラッシュすると、任意のプロセスの dll が、ロードされているすべてのプロセスからフック dll をアンロードすることがわかりました。コードでクラッシュの原因を見つけることができません。競合状態か何かでしょうか?フック dll コードは次のとおりです。
.net - .NETおよびWindowsフォームでのマウスフックの奇妙な動作
ShowDialogではなく、visibleプロパティをtrueに設定することで表示されるフォームがあります。これは、ドロップダウンのように動作するためです。
フォームは、を使用してマウスフックをインストールしますSetWindowsHookEx(WH_MOUSE, ...)
。
ドロップダウンの外側でマウスがクリックされたかどうかを検出し、クリックされた場合は、HookProc
メソッドで1を返し、ドロップダウンを閉じます。
HookProc
奇妙なことに、ドロップダウンの外側をクリックしてテキストボックスに移動すると、ドロップダウンが閉じた後も、メソッドで処理されていても、テキストボックスはマウスクリックを受け取ります。
見知らぬ人になります...ラベルまたはボタンをクリックすると、ドロップダウンが閉じた後、期待どおりにマウスクリックが表示されません。
何が起こっているのか分かりますか?
ETA 2:
以下の私のコードはすべて無視してかまいません。さらに調査したところ、この動作は、ドロップダウンタイプのフォームを実装する少なくとも1つのフレームワークコントロールで示されていることがわかりました。
複製するには、フォームを作成し、プロパティグリッド、ボタン、テキストボックス、およびラベルを追加します。プロパティグリッドの選択したオブジェクトをフォントに設定します。
フォームを実行し、フォント名を選択します。ドロップダウンリストが表示されます。次に、フォームのテキストボックスをクリックします。テキストボックスのクリックイベントが発生します。ただし、ボタンやラベルについては同じことは起こりません。
どうしたの?
ETA 1:
Visual C#.NETでWindowsフックを設定して何が起こっているのかを示す方法の基本的なコードを次に示します。コンバーターを使用してコードをC#に変換し直しましたが、問題がないことを願っています。よくわかりませんが、に置き換える必要があるかもしれませConsole.WriteLine
んDebug.WriteLine
。
2つのフォームを作成Form1
しますDropDown
。
(1)VB.NET
にForm1
、ボタン、ラベル、テキストボックス、および次のコードを追加します。
ドロップダウンに、次のコードを配置します。
(2)C#
Form1に、ボタン、ラベル、テキストボックス、および次のコードを追加します。
ドロップダウンに、次のコードを配置します。
.net - マウス フックが最後のメッセージをいつ処理したかを判断する
非モーダルを表示する、ドロップダウンのように機能するフォームがあります。マウス フックをフォームに取り付けて、マウスがクリックされたタイミングを決定しますVisible = False
。
に最後のクリックを処理させたいのでHookProc
、イベント ハンドラーが HookProc に戻ったことを確認するまで、フックまたはドロップダウンを破棄できません。
説明するのは少し難しいですが、以下のコードが少し明確になることを願っています:-
winapi - マウスフックが設定されている場合、ウィンドウを閉じるのが遅くなる
低レベルのマウス フックを設定するとWH_MOUSE_LL
、[x]
(閉じる) ボタン
をクリックすると、ウィンドウが 500 ミリ秒遅れて消えます。
遅延の原因を知っていますか?そして、それを修正する方法はありますか?
(ウィンドウとフックは、C++ で win32 API を直接呼び出して作成されます)
c# - C#:マウスの左/右ボタンが押されたときにマウスの座標を取得するにはどうすればよいですか?
マウスの左/右ボタンが押されたときにマウスの座標を取得するにはどうすればよいですか?
低レベルのマウスフックを使用していて、カーソルの現在の位置を取得できますが、マウスボタンが押されたときに位置を取得できるようにしたいと考えています。
これどうやってするの?
c# - PInvokeStackImbalance - HookCallback からのアンマネージ コードの呼び出し
私の目標
左クリックを右クリックに変換したい
私のアプローチ
- SetWindowsHookEx (user32.dll) を介して低レベルのフックを登録します
- マウスの左クリックをフィルタリングする
- その特定のクリックを翻訳するかどうかを確認します
- 私が本当にしたい場合に備えて
- メッセージを伝えないでください
- mouse_event を介して新しい mouseclick を作成します (user32.dll も)
問題
私がそのようなことをするとき:
mouse_event の呼び出しは PInvokeStackImbalance-Exception で失敗します。これは気にする必要があると思います。
DllImports
通常、インポート署名が正しくないために PInvokeStackImbalance が発生するため、ここに私のものを示します。
出現
その場合、問題を特定するための私の通常のアプローチは失敗します。これは、それ自体の mouse_event-call が機能し、左クリックの破棄も機能するためです。構造が部分の総和よりも大きいのは嫌いです...
c# - C#を使用してシステム全体でマウスクリックイベントを無効にするにはどうすればよいですか?
私は非常に敏感なタッチパッドを備えたラップトップを持っており、紙などを入力しているときにマウス入力をブロックできる小さなプログラムをコーディングしたいと考えていました。
低レベルのフックで見たすべてのことを考えると、それが難しいとは思いませんでしたが、間違っていました (驚くべきことですよね?)。
いくつかの例を見ましたが、私が見た例では、キーボードとマウスの両方をブロックするか、マウスを非表示にするだけでした。
これに関するどんな助けも素晴らしいでしょう。