问个关于HOOK的问题

富莱工作室 2005-05-06 09:51:37
typedef LRESULT CALLBACK KeyboardProc(int code , WPARAM wParam, LPARAM lParam);

HINSTANCE hInstance = LoadLibrary("hook.dll");
KeyboardProc *proc = (KeyboardProc *) GetProcAddress(hInstance, "_KeyboardProc@12");

SetWindowsHookEx(WH_KEYBOARD, proc, hInstance, threadid);

以上代码有什么问题, 为什么, 安装后无应, 不能HOOK,
SetWindowsHooEx 返回了正解的HHOOK, threadid正确, 用PROCESSVIEW查看过
...全文
155 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
富莱工作室 2005-05-07
  • 打赏
  • 举报
回复
UP
chinarendotcom 2005-05-07
  • 打赏
  • 举报
回复
http://www.vckbase.com/document/viewdoc/?id=271
dropingleaf 2005-05-07
  • 打赏
  • 举报
回复
帮你顶一下
xhzxlqt 2005-05-06
  • 打赏
  • 举报
回复
YES
富莱工作室 2005-05-06
  • 打赏
  • 举报
回复
谢楼上,

在钩取其它线程信息时。

SetWindowsHookEx本身也应该放在DLL中,

对吗?
xhzxlqt 2005-05-06
  • 打赏
  • 举报
回复
HHOOK hHook;
HINSTANCE inst;

extern "C"{
__declspec(dllexport) __stdcall void SetHook(void);
__declspec(dllexport) __stdcall void RemoveHook(void);
}

LRESULT CALLBACK KeyboardProc(int, WPARAM,LPARAM);

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
inst=hinst;
switch(reason)
{
case DLL_PROCESS_ATTACH:
//也可将SetWindowsHookEx放这儿
break;
case DLL_PROCESS_DETACH:
    //也可将UnhookWindowsHookEx放这儿
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
return 1;
}
//---------------------------------------------------------------------------
void __stdcall SetHook(void)
{
if(hHook==NULL)
{
// hHook=::SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)KeyboardProc,inst,0);
hHook=::SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,inst,0);

//测试用
// if(hHook==NULL)
// MessageBox("Sorry!无法挂上Hook.");
// else
// MessageBox("挂上Hook.");
}
}
//---------------------------------------------------------------------------
void __stdcall RemoveHook(void)
{
if(hHook!=NULL)
{
if(::UnhookWindowsHookEx(hHook)!=FALSE)
{
hHook=NULL;
}
//else MessageBox(Sorry!无法释放HOOK");
}
// else MessageBox("Hook is NULL");
}
//---------------------------------------------------------------------------
LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
//Do something here.
::CallNextHookEx(hHook,nCode,wParam,lParam);
}
富莱工作室 2005-05-06
  • 打赏
  • 举报
回复
难道, SetWindowsHookEx 本身也要放在DLL里?

路过的高手多多指点!
富莱工作室 2005-05-06
  • 打赏
  • 举报
回复
问题好像很复杂, 为什么放到DLL里, 也只能钩取当前程序,和所有程序的键盘消息,

SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)KeyboardProc,inst, OtherThreadid);

OtherThreadid 指向其它程序的线程时, 为什么钩不到?

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧