一个很弱智的钩子

 

    目标:希望能将DLL注入所有的GUI中,当特定的GUI被激活的时候,DLL中的对话框资源显示

  这个东西能用在外挂这块,游戏中挂上自己的框框,相当滴爽。

  实现:引擎调用DLL中的注入函数,这样全局注入的时候,相当滴好做。曾试过在EXE模块中实现全局钩子,钩子中的很多变量不能相互传递,达不到全局钩子的那种效果。如:

HHOOK g_hHook;
HINSTANCE g_hinstDll; 

LRESULT WINAPI KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)

 char temp[30];
 if(((DWORD)lParam&0x40000000) && (HC_ACTION==nCode))
 { 
  FILE * pFile = fopen("g://KeyRecord.txt","at"); 
  char szKey[80];
  ::GetKeyNameText(lParam, szKey, 80);
  sprintf(szKey,"用户按键:%s /r/n",szKey);
  fprintf(pFile,szKey);
 }

 return(CallNextHookEx( g_hHook, nCode, wParam, lParam )); 
}


BOOL InstallHook()//输出安装空的钩子函数
{
 g_hinstDll=LoadLibrary("Dll2.dll");
 g_hHook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,g_hinstDll,0);//
 if (!g_hHook)
 {
  MessageBoxA(NULL,"SET ERROR","ERROR",MB_OK);
  return(false);
 }
 return(true);
}

BOOL UninstallHook()//输出御在钩子函数
{
 return(UnhookWindowsHookEx(g_hHook));
}

我试过这样在EXE中添加代码,

在DLL2中简直不知道怎么写。呵呵!

 

最后实行成这种方式:

 

DLL中:

LRESULT CALLBACK MsgProc(
  int code,       // hook code
  WPARAM wParam,  

  LPARAM lParam   // keystroke-message information
)
{
  return CallNextHookEx(g_hKeyboard,code,wParam,lParam);
}

void SetHook()
{
 g_hKeyboard=SetWindowsHookEx(WH_GETMESSAGE,MsgProc,GetModuleHandle("Hook"),0);
}

EXE中这样调用:

 HINSTANCE hmod;
 hmod=::GetModuleHandle("hook");
 
 if(hmod==NULL)
 {
  hmod = ::LoadLibrary("hook.dll");
  //AfxMessageBox("Fail");
 }
 //TESTDLL lpproc;
 typedef void (*pHook)();
 pHook pproc=(pHook)GetProcAddress(hmod,"SetHook");
 pproc();

 

很OK滴。

 

但我在试DLL时候,忘记了一句SetWindowsHookEx(WH_GETMESSAGE,MsgProc,GetModuleHandle("Hook"),0);

GetModuleHandle("Hook")在更改DLL名字的时候忘记改了,搞了一个下午加一个晚上,我还纳闷为什么只有叫HOOK.DLL才有效。

昨天也许是状态不好,碰到这种事情就应该放在一边,浪费那么长时间。哎!发觉自己状态一直不是怎么好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值