システムフックの方法

[戻る]
ポルト 2006/06/30(金) 11:39:58
こんにちは。 

システムフックをDLLで作成したのですがうまくいきません。 
ローカルフックとしてEXEで作成したときは動いたのですが・・・。 
フックタイプ、フックプロシージャは問題がないので、 
あとはハンドルかスレッド識別子だとおもうのですが、 
以下のソースではだめなのでしょうか? 
どなたかわかる方がいたら教えてください。 


m_hHook = ::SetWindowsHookEx( WH_KEYBOARD, 
 (HOOKPROC)CKeyboardHook::KeyboardProc, 
(HINSTANCE)AfxGetResourceHandle, 
AfxGetApp()->m_nThreadID ); 


環境 
OS:XP 
Visual Studio 2003 .NetFramework 1.1 
vc++

Blue 2006/06/30(金) 11:48:58
回答ではありません。

> .NetFramework 1.1 
本当にそのプログラムは .NET Framework(Managed C++) をつかったものでしょうか?
# 普通 .NetFramework 1.1 と記述されると、このライブラリを使っています = MC++
# と捕らえますよね?

> AfxGetApp
MFCですよね?

できれば、プロジェクトの種類
(「MFC ApplicationのSDI」とか「Windowsフォームアプリケーション」)
の情報も付加してもらいたいです。

以上、回答でなくてスミマセンでした。

三草 2006/06/30(金) 12:26:30
三草です

第3引数に()付いてないのが気になりましたが、
> (HINSTANCE)AfxGetResourceHandle, 
その前に、AfxGetResourceHandle関数で、自分自身(今回はDLL)のハンドルって取れまし
たっけ?
GetModuleHandle()やDllMain()の第1引数のHINSTANCEではどうでしょう。
#取れてたらごめんなさい


例えば)
static HINSTANCE g_hDllInst;

DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
    g_hDllInst = hInstance;
    ...

Blue 2006/06/30(金) 13:05:54
マルチですね。

件名:システムフックについて教えてください。 -@IT会議室 -
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=31727&forum=7&1

発言される前に「使用上の注意」を必ずお読み下さい。
> ■ マルチポストについて
>
> マルチポストとは、「同じ内容の質問などを複数の掲示板等に書き込むこと」です。
> この行為は
> マナー違反として嫌われています。マルチポストは行わないで下さい。
>
> 誤ってマルチポストしてしまった場合には、必ず全ての掲示板にどのように
                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 解決したかを記述し、かつお礼を書き込んで下さい。
  ~~~~~~~~~~~~~~~~

三草 2006/06/30(金) 13:21:57
件名:システムフックについて教えてください。 -@IT会議室 -
囚人さん 投稿日時: 2006-06-30 12:46
> #インスタンスハンドルは AfxGetResourceHandle() で良いかも
ぉぉぅ、AfxGetResourceHandle()でいいらしいですね。
失礼しました。

マルチはいけませんね。。。

はじめの一歩:マルチポストはやめましょう
http://www.ippo.ne.jp/g/53.html

dairygoods 2006/06/30(金) 13:28:50
> (HOOKPROC)CKeyboardHook::KeyboardProc, 

この関数が HOOKPROC と互換性があるか疑問。


> (HINSTANCE)AfxGetResourceHandle, 

写し間違いでなければ、関数ポインタを渡しているので誤り。

ポルト 2006/06/30(金) 13:30:39
みなさん、ご指摘ありがとうございました。
掲示板初心者なものでマナーも知らずすみません。

解決しましたら必ずすべての掲示板で解決方法を掲載させていただきます。
ごめんなさい。

ポルト 2006/06/30(金) 13:39:55
[[解決]]
AfxGetResourceHandle()で解決しました。
単純なミスでした。

みなさんのおかげです。ありがとうございます。
マナー違反をしてしまいましたが、以後気をつけますので
今後ともご指導よろしくお願いします。

古いスレッドには追加発言できません。