最近一直在想怎么对qq的发送消息进行截获,就是是说你在聊天窗口点发送按钮时,程序会将你这个消息截下来,那怎么实现呢,也不难,大家一定都知道hook吧,今天就用它了,不过用hook中比较特殊的wh_mouse_ll,这个是鼠标的低级全局钩子,无需远程加载代码,原理是把消息放到消息队列中等待读取.具体的大家可以上网查下,我先说下思路,就是程序运行时安装钩子,然后用一个消息循环进行等待,在钩子的回调函数里,我得到鼠标按下时所在窗口的句柄,然后判断是否是qq的发送按钮,最后发送一个消息让前面的消息循环结束,卸载钩子,程序结束.好了,废话不说了,看代码:
#include "stdio.h"
#include "windows.h"
HHOOK hook;
LRESULT CALLBACK mouse(int ncode,WPARAM w,LPARAM l){
if (ncode>=0){
if(w==WM_LBUTTONDOWN){
LPMOUSEHOOKSTRUCT m=(MOUSEHOOKSTRUCT FAR *) l;
HWND h=::WindowFromPoint(m->pt);
char text[20]={0};
::GetWindowText(h,text,20);
if(strstr(text,"发送(S)") && ::GetDlgCtrlID(h)==1918){
printf("1/n");
::PostQuitMessage(0);
}
}
}
return ::CallNextHookEx(hook,ncode,w,l);
}
main(){
hook=::SetWindowsHookEx(14,mouse,::GetModuleHandle(0),0);
MSG msg;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
};
UnhookWindowsHookEx (hook);
return 0;
}
差不多搞定,顺便说下qq消息输入框屏蔽wm_gettext消息,怎么办呢,我的思路是写个dll,远程注入qq进程,在对qq的窗口进行子类化处理,具体的以后再说吧.