VC++&グローバルフックについて質問です
vc++2008,Windows Vistaの環境でプログラムを作成しています。
以下、aが押されたら、設定したhWndにWM_KEYDOWN,VK_LEFTのメッセージを送るプログラムのつもりで書きました。
http://www.shos.info/develop/cwin/tipswin.html#windows008
を参考にしています。
しかし、dllにしてWinMainで呼び出したのですが動作しません。
エラーも出ないのでなぜ動かないのかがわかりません。
このプログラムをちゃんと動かすにはどうしたらいいでしょうか。
どうかご指摘ください。よろしくお願いします。
//hook.h
#ifdef HOOKAPI
#else
#define HOOKAPI extern "C" __declspec(dllimport)
#endif
HOOKAPI HINSTANCE _hInstance;
HOOKAPI HHOOK _hHook;
HOOKAPI HWND _hWnd;
HOOKAPI BOOL Set(HWND hWnd);
HOOKAPI void Reset();
//hook.cpp
#include <windows.h>
#define HOOKAPI extern "C" __declspec(dllexport)
#include "hook.h"
#pragma data_seg(".share")
HHOOK _hHook = NULL;
HWND _hWnd = NULL;
HINSTANCE _hInstance;
#pragma data_seg()
#pragma comment(linker, "/section:.share,rws")
LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
/* ここでは 'A' が押されたら予め設定済みの _hWnd にメッセージを送る */
if (nCode >= 0 && nCode != HC_NOREMOVE && wParam == 'A') {
PostMessage(_hWnd, WM_KEYDOWN, VK_LEFT, 0);
CallNextHookEx(_hHook, nCode, wParam, lParam);
return 1;
}
return CallNextHookEx(_hHook, nCode, wParam, lParam);
}
BOOL Set(HWND hWnd)
{
/* キーのフック */
_hHook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)HookProc, _hInstance, 0);
/* ここで hInstance は DLL のインスタンス ハンドル */
_hWnd = hWnd;
return (_hHook != NULL);
}
void Reset()
{
if (_hHook != NULL) {
UnhookWindowsHookEx(_hHook);
_hHook = NULL;
}
}