• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:JOURNALRECORD 猫パンチでノックアウト)

JOURNALRECORD 猫パンチでノックアウト

このQ&Aのポイント
  • 親プログラムのメニューを押下するとDLLのStartRecord()に来ます(1) その中でSetWindowsHookEx()を呼びますが、戻り値のhHookがNULLになってしまいます(2) エラー情報を表示させると『アクセスが拒否されました』となります
  • SetWindowsHookEx()のアクセス拒否の原因をネットで調べてみましたが何処にも記載が見つかりません もう3日も嵌まり込んでいます、教えてください、お願いします
  • コードは親プログラム・DLLともにマルチバイトを指定しております

質問者が選んだベストアンサー

  • ベストアンサー
  • public_sa
  • ベストアンサー率52% (13/25)
回答No.1

グローバルフックしてるんなら hHookを共有領域に置かないといけないんじゃない? pragma data_seg とか .defファイルとかで調べればわかると思うよ。

sato-may
質問者

お礼

ご指導ありがとうございます (1) わたしもその辺りと思ってフックを共有領域に設定し初期化しました(******の所) #include <windows.h> #include "hook04x.h" #define MAX_RECORD 2000 HINSTANCE hInst; //共有領域   *************** #pragma data_seg(".sharedata") HHOOK hHook=0; #pragma data_seg() HWND hWnd; BOOL bHook = FALSE; //フック中 BOOL bRecord = FALSE; //記録済かどうか int n; EVENTMSG MyEvent[MAX_RECORD]; DWORD dwStart; DWORD dwAdjust; またDEFファイルを以下の内容で作り、hook04x.defとの名称でDLLソースと同じパスに入れました LIBRARY SECTIONS .sharedata READ WRITE SHARED コンパイルとリンクにはエラーがありません でも実行すると全く同じで『アクセスが拒否されました』となってしまいます (2) 猫でもわかるプログラミングにはJOURNALRECORDの参照章の前後に同様なグローバルフックのサンプルが掲載されていますが、フックを共有領域化していません なぜでしょうか??? 再度宜しくお願い申し上げます