VC++2005でグローバルフック – プログラミング – Home

VC++2005でグローバルフック
 
通知
すべてクリア

[解決済] VC++2005でグローバルフック


かりや
 かりや
(@かりや)
ゲスト
結合: 16年前
投稿: 4
Topic starter  

VC++2005環境でのグローバルフックについて質問です。
初めてグローバルフックを使用してみようといろいろ調べて参考にしてみましたが、どう
しても作成したEXEのウィンドウが動作した場合でしかコールバック関数に処理が飛んで
きません。
参考にしたソースはVC++6で書かれていましたが、VC++2005と何か違いがあるのでしょう
か?WH_WH_MOUSE_LLを指定した場合は、うまくいってるようですが、WH_CALLWNDPROCを指
定すると電卓などを起動しても、なにも反応しませんでした。
おおまかな処理は下記のとおりです。よろしくお願いします。

//////////DLL//////////
//共有領域
#pragma data_seg(.sharedata)
HHOOK hHookWnd=0;
#pragma data_seg()

HINSTANCE hdll;
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
if(ul_reason_for_call==DLL_PROCESS_ATTACH){
hdll=hModule; // DLLハンドルを保存
}
return TRUE;
}

LRESULT CALLBACK CallWndProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if(nCode==HC_ACTION){
if(((CWPSTRUCT *)lParam)->message==WM_CREATE){

}
}
return CallNextHookEx(hHookWnd, nCode, wParam, lParam); //次のフックを呼ぶ
}
//フックを組み込む
void CALLBACK starthook(void)
{
hHookWnd=SetWindowsHookEx(WH_CALLWNDPROC,CallWndProc, hdll, 0);
//hHookWnd=SetWindowsHookEx(WH_WH_MOUSE_LL,CallWndProc, hdll, 0);
}

//フックを解除する
void CALLBACK endhook(void)
{
UnhookWindowsHookEx(hHookWnd);
}

////////EXE/////////////
int APIENTRY _tWinMain(HINSTANCE hInstance,
            HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{

starthook(); //フックを組み込みます

// メイン メッセージ ループ:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
endhook(); //フックを解除します。

return (int) msg.wParam;
}

////////DEFファイル/////////////
LIBRARY
SECTIONS
.sharedata READ WRITE SHARED


引用未解決
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

セクション名(.sharedata)を、ピリオド込みで(必ずしもピリオドで始まる必要は
ありませんが)8文字以下にしてみるとどうでしょうか?


返信引用
ryo
 ryo
(@ryo)
ゲスト
結合: 23年前
投稿: 252
 

動作試験は、debugモードでやってますか?
それとも、Releaseでビルドして、単体起動でやってますか?


返信引用
かりや
 かりや
(@かりや)
ゲスト
結合: 16年前
投稿: 4
Topic starter  

ご回答ありがとうございます。
動作試験は、debugモードでやってます。


返信引用
かりや
 かりや
(@かりや)
ゲスト
結合: 16年前
投稿: 4
Topic starter  

セッション名を8文字以下にしてみましたが、動作しませんでした。


返信引用
KJ
 KJ
(@KJ)
ゲスト
結合: 21年前
投稿: 52
 

共有セクションの属性はセットしていますか?

#pragma data_seg()の後に以下の行追加でもOKです。
#pragma comment(linker, /sectionN:.shared,rws)


返信引用
かりや
 かりや
(@かりや)
ゲスト
結合: 16年前
投稿: 4
Topic starter  

Releaseでビルドで動作したら問題ありませんでした。
ありがとうございます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました