- - PR -
システムフックについて教えてください。
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-06-30 10:21
こんにちは。
システムフックをDLLで作成したのですがうまくいきません。 ローカルフックとしてEXEで作成したときは動いたのですが・・・。 フックタイプ、フックプロシージャは問題がないので、 あとはハンドルかスレッド識別子だとおもうのですが、 以下のソースではだめなのでしょうか? どなたかわかる方がいたら教えてください。 m_hHook = ::SetWindowsHookEx( WH_KEYBOARD, (HOOKPROC)CKeyboardHook::KeyboardProc, (HINSTANCE)AfxGetResourceHandle, AfxGetApp()->m_nThreadID ); 環境 OS:XP Visual Studio 2003 .NetFramework 1.1 |
|
投稿日時: 2006-06-30 12:46
もう忘れかけてて自信ありませんが。
ヘルプを見ましたか? インスタンスハンドルはグローバル変数でないといけないし、スレッドID には 0 を指定しないといけませんよ。 #インスタンスハンドルは AfxGetResourceHandle() で良いかも _________________ 囚人のジレンマな日々 |
|
投稿日時: 2006-06-30 13:21
とっちゃんです。
グローバルフックする場合は、フックDLLではMFCを使わないようにしないと 誤動作することがあります(別バージョンがロードされていることがあるため)。 その他にも二次配布可能なDLL(.NET Frameworkを含む)は利用しないようにしないと 環境によっては、悲惨なことになります。 あとは、スレッドIDを0(グローバル指定)にするとか フックプロシージャ間で共有するメモリーは共有エリアに置く ということくらいかな? このあたりはヘルプにも出てると思います(英語しかないかもしれませんが)。 _________________ // とっちゃん(高萩 俊行)@わんくま同盟 // とっちゃん’Blog // MS-MVP for Developer Tools - Visual C++ // WindowsInstallerの話題はhttp://www.freeml.com/msiまで |
|
投稿日時: 2006-06-30 13:25
囚人さん、回答ありがとうございます。
スレッドIDを0にして試してみましたがダメでした。 ハンドルは g_hInstance global を取得しているようなので問題ないとおもうのですが。 |
|
投稿日時: 2006-06-30 13:41
第3引数を
(HINSTANCE)AfxGetResourceHandle ↓ AfxGetResourceHandle() で解決しました。 単純なミスでした。 みなさまご協力ありがとうございました。 今後ともよろしくお願いします。 |
1