|
저기 아래서 질문한 키보드 후킹을 위해서 DLL을 만들었습니다..
함수는 세개정도인데.. 아래 두개의 함수가 있는데..
하나는 GetProcAddress함수로 읽어오면 함수 포인터가 넘어오는데
하나는 NULL이 넘어옵니다. (SetButton함수하고, SetHookKey함수가 문제죠..)
DLL함수는 아래 소스가 있고
호출하는 루틴은 더 아래에 올리겠습니다.
__declspec(dllexport) void SetHookKey(HHOOK hookkey)
{
hHookKey = hookkey;
}
__declspec(dllexport) void SetButton(char * s1, char * s2)
{
file1 = s1;
file2 = s2;
}
//---------------------------------------------------------------------------
__declspec(dllexport) LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode < 0)
return CallNextHookEx(hHookKey , nCode, wParam, lParam);
// sprintf(buf, "W = %04x , L = %04x ", wParam , lParam);
// Main->Edit1->Text = buf;
if(lParam == 0x670001 && file1 != "")
{
ShowMessage(file1);
ShellExecute(0, "open", file1.c_str(), "", "", SW_SHOWNORMAL);
}
else if(lParam == 0x6b0001 && file2 != "")
{
ShowMessage(file2);
ShellExecute(0, "open", file2.c_str(), "", "", SW_SHOWNORMAL);
}
// ShowMessage(buf );
return CallNextHookEx(hHookKey , nCode, wParam, lParam);
}
여기까지가 DLL소스이고
클라이언트에서 호출 루틴은 다음과 같습니다.
hinstDLL = LoadLibrary((LPCSTR)"HookSys.dll");
if(hinstDLL == NULL)
{
ShowMessage("DLL Load Error");
return;
}
HOOKPROC keyproc =(HOOKPROC) GetProcAddress(hinstDLL, "KeyboardProc");
// hHookKey = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC) KeyboardProc, NULL, GetCurrentThreadId());
hHookKey = SetWindowsHookEx(WH_KEYBOARD, keyproc , hinstDLL, 0);
void (CALLBACK*sethhook)(HHOOK ) = ( void (CALLBACK *)(HHOOK) )GetProcAddress(hinstDLL, "SetHookKey");
if(sethhook != NULL)
sethhook(hHookKey);
keyproc는 제대로 넘어와서 후킹은 잘되는데
sethhook은 NULL로 넘어옵니다.
그래서 keyproc함수에서 내부에서
CallNextHookEx를 호출할때 필요한 Hook Instance를 셋팅할 수가 없는데..
왜 그럴까요?
DLL을 만드는데 문제가 있는걸까요??
고수님들의 조언 부탁합니다.
PS.
참고로 지금 제 노트북의 인터넷 버튼 셋팅 프로그램을 만들고 있습니다.
일본산이라 한글 윈도즈에서 인터넷 버튼을 사용 할 수 없거든요.
|