关于DLL钩子的问题。。。(请教各位大侠) Hook的那个函数?把问题写清楚一些 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 哦,是WH_KEYBOARD钩子,真是想不明白 是发送出错还是根本没发送?全局钩子之所以要做成DLL是因为要让其他应用程序调用。钩子一下,系统运行的所有调用了系统USER32.DLL的应用程序都要调用你的DLL,并且是在第一次激活窗口时才载入。被下了钩子的应用程序只有激活窗口得到焦点,得到WM_KEYDOWN,KEYUP等消息时才会调用你的sendto。系统有n个应用程序运行,你的DLL就被调用了<=n次,并且其中函数都运行在不同进程中,所以DLL中的全局变量如果不内存共享的话,每次调用都是会被重置的,这点需要注意。 果然是高手....但是我用的是全局钩子,应该可以截取所有的键盘消息啊!我开始时,用if(sendto(sock,keybuf,strlen(keybuf),0,(struct sockaddr*)&toaddr,sizeof(toaddr))==-1){ MessageBox(NULL,"send udp error","error",MB_OK);}结果,当焦点移到另一个接收字符的窗口,输入字符,它就显示出MessageBox的框,我改成if(sendto(sock,keybuf,strlen(keybuf),0,(struct sockaddr*)&toaddr,sizeof(toaddr))==-1){ char str[100]; wsprintf(str,"send udp error :%s ",WSAGetLastError); MessageBox(NULL,str,"error",MB_OK);}运行后却没有出现MessageBox的框了,正如:ringphone(临风) 兄说的那样,它根本就没有调用DLL...真是令人头痛..... SetWindowsHookEx的最后一个参数是否为零,我写的键盘钩子可以收到,不过我做的只是将按键信息记录在文件中 vs2008中使用DataGrid的问题 根据GetLastError返回的值获取具体的错误内容 在MDI客户区显示一个图片,在改变窗口时能显示出来,但在刚打开程序不显示是为什么? 上不了国外网,哪位帮忙下篇论文,谢谢! 各位帮忙啊,刚刚入门,有个问题请教!!! 升了一角,惭愧 如何访问类中的参数? mfc方面,细分的书谁可以介绍一下! 怎样检测C语言总的内存泄漏?谢谢 喜欢找问题的人请看:可能是Petzold的一个错误! VC中的CPropertySheet中在Wizard状态中如何将"帮助"按钮去掉,或是使变灰? COM,COM+与OLE,OLEDB的关系和作用????
全局钩子之所以要做成DLL是因为要让其他应用程序调用。钩子一下,系统运行的所有调用了系统USER32.DLL的应用程序都要调用你的DLL,并且是在第一次激活窗口时才载入。被下了钩子的应用程序只有激活窗口得到焦点,得到WM_KEYDOWN,KEYUP等消息时才会调用你的sendto。系统有n个应用程序运行,你的DLL就被调用了<=n次,并且其中函数都运行在不同进程中,所以DLL中的全局变量如果不内存共享的话,每次调用都是会被重置的,这点需要注意。
但是我用的是全局钩子,应该可以截取所有的键盘消息啊!
我开始时,用
if(sendto(sock,keybuf,strlen(keybuf),0,(struct sockaddr*)&toaddr,sizeof(toaddr))==-1)
{
MessageBox(NULL,"send udp error","error",MB_OK);
}
结果,当焦点移到另一个接收字符的窗口,输入字符,它就显示出MessageBox的框,
我改成
if(sendto(sock,keybuf,strlen(keybuf),0,(struct sockaddr*)&toaddr,sizeof(toaddr))==-1)
{
char str[100];
wsprintf(str,"send udp error :%s ",WSAGetLastError);
MessageBox(NULL,str,"error",MB_OK);
}
运行后却没有出现MessageBox的框了,正如:ringphone(临风) 兄说的那样,它根本就没有调用DLL...
真是令人头痛.....