★初心者にVisual C++を教えるスレ★ Part24
■ このスレッドは過去ログ倉庫に格納されています
0247C++ 一年生
2006/11/07(火) 17:24:29キーストロークフックをグローバルフックで取りたくて
VS2005(アカデミック版)、winXP,併用ソフトはATOK、シマンテックアンチウイルス
DLLこさえて 宣言は
class __declspec(dllexport) Hook{
public: static int makeKhook();..........................}
定義を
int Hook::makeKhook()
{
hHOOKKEY = (HOOKPROC)KeyboardProc;
hhk = SetWindowsHookEx(WH_KEYBOARD,// フックタイプはキーストローク
hHOOKKEY,// フック処理プロシジャへのポインタ
NULL,//フックプロシジャは同一ファイルで記述
0);// 対象スレッドはすべて
if (hhk == NULL)
{ MessageBox(hWnd,TEXT("フックかけられないじょ"),TEXT("Error"),MB_OK); return 0;}
return 1 ;}
とすると 毎回フックが設定できない。(必ずhhk == NULL で戻ってくる)
それで、ヘルプのSetWindowsHookExの記述を見ると、
「解説:hMod パラメータで NULL を指定し、dwThreadId パラメータで 0 またはほかのプロセスが作成したスレッドの識別子を指定すると、エラーが発生することがあります。」と書いてある。
これは、グローバルフックをかけたければフック設定とフック処理のDLLを分けろ
と言うことなんでしょうか。EXE側で、ほとんど同じコードでフックをかけようとする
と100%うまく行くのですが、ローカルフックにしかならない。
それとも、なにか別にオタンコな事やっていてセットできないだけ? ご教示下さい。
■ このスレッドは過去ログ倉庫に格納されています