問題タブ [setwindowshookex]
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.
setwindowshookex - SetWindowsHookExを使用して読み取った後、OS/アプリケーションにデータが入るのを停止したい
OSからキーストロークを読み取る簡単なアプリケーションを1つ開発しています。API「SetWindowsHookEx」を使用してキーストロークデータを読み取りました。
現在、データはフックによって読み取られ、OSまたはアプリケーションに送信されます。
このデータがOSや他のアプリケーションに入るのを止めたいです。「SetWindowsHookEx」を使用してデータを読み取った後、Windows 7 OSにデータが入るのを停止する方法はありますか?
c++ - フック dll の読み込みを防止する
プロセスのセキュリティ権限を設定する方法や、Windows がグローバル ウィンドウ フック DLL を読み込まないようにする方法はありますか? SetWindowsHookEx を無効にしたくありません。フック dll がプロセスに読み込まれないようにしたいだけです。
c# - CallWndProc フックがすべてのメッセージを受信しない
私は Displayfusion のような小さなツールを作成しています。Windows が move/activate/etc のときにメッセージを受信するためにいくつかのフックが必要ですが、行き詰まっています..
CallWndProc フックにこのプロジェクトを使用しています: http://www.codeproject.com/KB/system/WilsonSystemGlobalHooks.aspx
ほぼすべてのウィンドウ (x86 および x64) で問題なく動作しますが、一部のウィンドウではフック DLL を挿入できないようです。現在、Adobe Reader X に問題があります。そのウィンドウからメッセージが受信されていません。サンドボックスと何か関係があると思いますか?誰かが私に正しい方向へのプッシュを与えることができますか?
フックの初期化コード:
c# - 外部のSetWindowsHookExおよびGetModuleHandleを呼び出す際のPInvokeエラー
プログラムのWindowsフックを外部EXEに設定しようとしています。これは、ウィンドウのサイズ変更/最小化を監視するために使用されるため、ウィンドウにドッキングして、プログラムのサイズを同様に変更できます。
以下のエラーコード1428および126を回避するにはどうすればよいですか?
nullのhModを使用してSetWindowsHookExを呼び出すと、このエラーが発生していました。(IntPtr.Zeroの代わりに)現在のモジュールを渡すと同じエラーが発生しますが、これは正しく取得されているようです。
1428 =モジュールハンドルなしで非ローカルフックを設定することはできません
また、 GetModuleHandleを使用して、モジュールとしてフックしている外部プログラムを取得しようとしました。
ただし、エラーは次のように設定されます。
126 =指定されたモジュールが見つかりませんでした。
次のPInvokeステートメントを使用しています。
これが問題を抱えている手順です:
windows - 水平スクロールが機能しないmouse_event(MOUSEEVENTF_HWHEEL)
Windows7のDelphi3でこのメソッドを呼び出すと、水平スクロールがありません。
垂直スクロールはMOUSEEVENTF_WHEEL
うまく機能します。結果はと同じでSendInput
、戻り値は成功を示します。私の現在のマウスは水平傾斜をサポートしていますが、水平スクローラーはありません。
使用するには何が必要MOUSEEVENTF_HWHEEL
ですか?
SDKドキュメント: http: //bit.ly/mouse_event
マウスフック
Windows 7で2番目の32ビットexeプログラムを作成したのは、水平ホイールをスクロールしたときにマウスがメッセージを送信するかどうかを確認するためだけです。このフックはVSCROLLを受信しますが、HSCROLLメッセージは受信しません。
google-chrome - Chrome でページ読み込みイベントの通知を受け取るにはどうすればよいですか?
Windows PC で実行されているブラウザーで、ナビゲーション イベント (ページの読み込みやアクティブなタブの切り替えなど) を監視できる必要があります。これまでのところ、これを IE と Firefox で動作させるには、SetWindowsHookEx を呼び出して実行中のすべてのアプリに DLL をロードし、アプリケーションから IHTMLDocument2 (IE の場合) または nsIWebProgress (Firefox の場合) インターフェイスを要求します。適切なインターフェイスを使用して、対象のイベントが発生したときにアプリケーションからコールバックを要求できます。
Chromeでこれを行う方法はありますか? Chrome 拡張機能について少し読んだことがありますが、IE の COM や Firefox の XPCOM に類似した、Chrome で公開されている API に関するドキュメントは見つかりませんでした。同様のアプローチが機能しますか、それともまったく異なることを行う必要がありますか? (私は C++ で作業しています。)
誰かが少なくとも私を正しい方向に向けることができれば幸いです。
ありがとう。
winapi - フック内で HWND から HMENU を取得する
アプリケーション内にフックをインストールして、標準の EDIT コンテキスト メニュー (元に戻す/コピー/編集/貼り付けなど) を取得します。アプリケーションに新しいメニュー項目を挿入する必要があります。
Windows フックを設定しましたが、コンテキスト メニューの HMENU を取得できないようです。これは私がフックを設定した場所です:
ここに私のコールバック関数があります:
また、WH_CALLWNDPROCRET を使用してフックを設定しようとしましたが、これはメニューの WM_CREATE メッセージをキャプチャすることさえできません。
この特定の状況で HMENU を取得する方法を知っている人はいますか?
ありがとう、ケビン
winapi - SetWindowsHook Global あまりグローバルではない
私は SetWindowsHookEx をいじっています。具体的には、マウスまたはキーボードを介して、アクティブ化された (デスクトップ上の) ウィンドウを見つけられるようにしたいと考えています。
SetWindowsHookEx の MSDN ドキュメントを読むと、WH_CBT タイプがその仕事をするように見えます。私はdllを作成し、そこにすべてのコードを入れました.GUIアプリから制御します(フック解除も処理します)。
しかし、GUIアプリをアクティブ化したときにのみアクティベーションコードを取得しているように見えますが、アクティブ化した他のアプリは無視されます。
私のdllには、次のようなセットアップコードとCBTProcがあります。
すべて非常に単純なもので、セットアップをdllから移動しようとしましたが、それでも同じ効果が得られます。
dll が他のプロセスにロードされているように見えます。取得している DLL_PROCESS_ATTACH の数を数えており、その増加を確認できます (あまり科学的ではありません。
これは 32 ビット OS - win2k3 で実行される 32 ビット コードであることに注意してください。
フッキングメカニズムに対する私の期待は間違っていますか? アプリのアクティベーションのみを取得する必要がありますか、それとも別のタイプのフックが必要ですか?
編集: トレース機能はファイルに書き込み、アクティベーションの送信元を通知します
ティア。
windows - SetWindowsHookEx() とフックに関する質問
背景情報を少し紹介します。私は、AppInit_DLLs
レジストリ エントリを介して dll インジェクション手法で使用されている dll を置き換えることに取り組んでいます。その目的は、すべてのプロセスに存在し、GDI32.dll にフックを設定して、印刷に関する情報を収集することでした。これは、私たちが望むものを手に入れるための一種のファンキーな方法です。.dll 自体は 10 年以上前のもの (Visual Studio 97 で記述) であり、挿入された dll よりも少し侵襲性の低いものに置き換えたいと考えています。
おそらく私たちがSetWindowsHookEx()
探しているもののようです。私はそれでいくつかの問題を抱えていましたが、このツリーが吠える価値があるかどうかについて同僚と話し合ったこともあります. 以下は、特定できなかったいくつかの質問です。
たとえば
StartDoc()
GDI32.dll などの DLL からルーチンをフックすると、他のプロセスがその DLL からそのルーチンを使用するたびに通知を受け取るのでしょうか? これは、注入された .dll で取得していた機能の一種であり、今後も同じ機能が必要です。フックがトリガーされると、フック処理手順は、実際の呼び出しを開始したプロセスのプロセス空間で実行されますか?それとも、フックをセットアップしたプロセスのプロセス空間で実行されますか? 私の意見では、ルーチンを呼び出したプロセスのプロセス空間で実行する必要があります。たとえば、プログラムが呼び出す場合
StartDoc()
GDI32.dll から、フック処理プロシージャ コードがそのスペースに「注入」され、実行されます。それ以外の場合は、呼び出しプロセスとフックをセットアップするプロセスとの間で自動的にセットアップされるプロセス間通信が必要になりますが、そうではないと思います。また、このフック処理ルーチンが呼び出しプロセスのプロセス空間で実行される必要があるのは、それが知る必要があることの 1 つはその呼び出しプロセスの名前であるためです。実際にはそのプロセスで実行されていませんでした。フック処理ルーチンが .NET 管理環境を使用して記述されている場合、.NET 管理環境を利用していないプロセスにフックされると壊れますか? ここで C++ から離れて C# を使用したいのですが、管理されていないプロセスからフックが呼び出されたらどうなるでしょうか? 前に述べたように、フック処理手順は、フックされたルーチンを最初に呼び出したプロセスで実行されると思います。しかし、これが本当なら、このプロセスが .NET ランタイム環境を使用していないのに、着信フック処理コードが使用していると問題が発生すると思います。
hook - Win32は、「任意のCPU」に対して構築されたアプリケーションへのDLLインジェクションをフックします
すべてのユーザー インタラクションをキャプチャするプロジェクトに取り組んでいます。MSDN は (これ)を伝えます
SetWindowsHookEx を使用して、DLL を別のプロセスに挿入できます。32 ビット DLL を 64 ビット プロセスに挿入することはできず、64 ビット DLL を 32 ビット プロセスに挿入することもできません。アプリケーションが他のプロセスでフックを使用する必要がある場合、32 ビット アプリケーションは SetWindowsHookEx を呼び出して 32 ビット DLL を 32 ビット プロセスに挿入し、64 ビット アプリケーションは SetWindowsHookEx を呼び出して 64 ビット DLL を挿入する必要があります。 DLL を 64 ビット プロセスに変換します。
私の質問は、アプリケーションが に対して構築された場合はどうなるかということですAny CPU
。SetWindowsHookEx
に対してビルドされた DLLから呼び出す必要がありますかAny CPU
。
HookFunctions_32.dll (x86 の両方) をロードする HookLogger_32.exe と、HookFunctions_64.dll (x64 の両方) の設定WH_CBT
とWH_MOUSE
グローバル (特定のスレッドではない) をロードする HookLogger_64.exe を作成しました。
HookLogger_32.exe、HookLogger_64.exe、HookFunctions_32.dll、および HookFunctions_64.dll は C++ で記述されています。
に対してビルドされた .NET アプリケーションをクリックするとAny CPU
、これらの DLL が ( を介してSetWindowHookEx
) 挿入されます。Windows OS がハングアップし、マシンを強制的に再起動する必要があります。
同じ .NET アプリケーションが x86 または x64 に対してビルドされ、HookLoggers (32 ビットと 64 ビットの両方) が開始された後にアプリケーションをクリックすると、すべて正常に動作します。
この未定義の動作の理由。
私が作業しているプラットフォームは 64 ビット マシンです。