想实现这样的目标:
QQ2004_2版中登录界面有一个"网络设置"的按钮,点击后会有一个展开的对话框,在里面有个"类型",可以选取"不使用代理""SOCKS5代理""HTTP代理""使用浏览器设置",默认情况下是第一个, 现在我想通过拦截消息,实现当用户按下"登录"按钮时,自动选取"HTTP代理",并填上相应的地址和端口,于是我这样做
安装全局消息钩子:
....判断是不是"登录"或"申请QQ"按钮........判断是不是QQ登录窗口...
如果是"登录"或"申请QQ"按钮并且是QQ登录窗口,则//QQ登录框展开(按"网络设置"按钮)
::PostMessage((HWND)pMsg->lParam,WM_COMMAND,0x00003E88,LONG(GetDlgItem((HWND)pMsg->lParam,0x00003E88)));//发送选中"HTTP代理"
::PostMessage(GetDlgItem((HWND)pMsg->lParam,0x00003E81),CB_SETCURSEL,proxytype,NULL);//发送CBN_SELCHANGE(这一步得到 hujun614(Softworm)大侠的指点)
::PostMessage((HWND)pMsg->lParam,WM_COMMAND,0x00013E81,(LONG)GetDlgItem((HWND)pMsg->lParam,0x00003E81));
以上顺利实现,接下来要实现填上IP地址和端口
SetWindowText(IpaddrEdit,"192.168.1.1");//IpaddrEdit为IP地址的EDIT窗口句柄
SetWindowText(IPortEdit,"80");//IPortEdit为端口的EDIT窗口句柄//在这里我发了一个EN_CHANGE给主窗口,告诉他EDIT数据更新::PostMessage((HWND)pMsg->lParam,WM_COMMAND,0x03003E82,IpaddrEdit);但上面这三句都没法实现
现象是SetWindowText(IpaddrEdit,"192.168.1.1");后未见edit窗口出现"192.168.1.1",还是空白
同样SetWindowText(IPortEdit,"80");也未见edit变为80但我用GetWindowText取两EDIT的内容,发现是"192.168.1.1" 和"80",这说明数据已放入EDIT,只是还没有更新因此,想请高手出手,如需代码,请给我发消息
QQ2004_2版中登录界面有一个"网络设置"的按钮,点击后会有一个展开的对话框,在里面有个"类型",可以选取"不使用代理""SOCKS5代理""HTTP代理""使用浏览器设置",默认情况下是第一个, 现在我想通过拦截消息,实现当用户按下"登录"按钮时,自动选取"HTTP代理",并填上相应的地址和端口,于是我这样做
安装全局消息钩子:
....判断是不是"登录"或"申请QQ"按钮........判断是不是QQ登录窗口...
如果是"登录"或"申请QQ"按钮并且是QQ登录窗口,则//QQ登录框展开(按"网络设置"按钮)
::PostMessage((HWND)pMsg->lParam,WM_COMMAND,0x00003E88,LONG(GetDlgItem((HWND)pMsg->lParam,0x00003E88)));//发送选中"HTTP代理"
::PostMessage(GetDlgItem((HWND)pMsg->lParam,0x00003E81),CB_SETCURSEL,proxytype,NULL);//发送CBN_SELCHANGE(这一步得到 hujun614(Softworm)大侠的指点)
::PostMessage((HWND)pMsg->lParam,WM_COMMAND,0x00013E81,(LONG)GetDlgItem((HWND)pMsg->lParam,0x00003E81));
以上顺利实现,接下来要实现填上IP地址和端口
SetWindowText(IpaddrEdit,"192.168.1.1");//IpaddrEdit为IP地址的EDIT窗口句柄
SetWindowText(IPortEdit,"80");//IPortEdit为端口的EDIT窗口句柄//在这里我发了一个EN_CHANGE给主窗口,告诉他EDIT数据更新::PostMessage((HWND)pMsg->lParam,WM_COMMAND,0x03003E82,IpaddrEdit);但上面这三句都没法实现
现象是SetWindowText(IpaddrEdit,"192.168.1.1");后未见edit窗口出现"192.168.1.1",还是空白
同样SetWindowText(IPortEdit,"80");也未见edit变为80但我用GetWindowText取两EDIT的内容,发现是"192.168.1.1" 和"80",这说明数据已放入EDIT,只是还没有更新因此,想请高手出手,如需代码,请给我发消息
解决方案 »
- 进来啊,散分咯200,要买电脑了,大家给些建议啊
- 请问为什么在dll中PerTranslateMessage进不去?
- 求sourceinsight3.50.0042的注册码
- 怎么在foxmail工具栏下插入自己的按钮
- 高分请教读串口数据问题,很棘手的问题,分不够再开帖给
- 为什么我设置的全局鼠标钩子只能截获当前进程的鼠标事件?
- error LNK2001: unresolved external symbol _IID_ITaskMgr
- 如何知道鼠标键盘没移动一段时间了?
- 高分求解,难题!如何使用纯 SDK 实现 Tips ?
- 新手问下VC连接数据库的方式问题????
- 关于vc和Excel的巨简单问题.
- 关于IDR_MENU和对话框上控件的字体大小问题
那个QQ不能用SetWindowText的,你还是模拟键盘输入吧,它的显示是DrawText好像,它是位图的.
to aby7984(野马): 偷QQ是小菜一碟,你会又怎么样?
to EnochShen(小疯子抢分了,拦我者重伤!) :你错了,可以用SetWindowText,只是这里还要做什么动作而已.
to linxy2002(阿郎):可以用SetWindowText,下面做法能得到证明
拦截"测试"按钮,加入
SetWindowText(IpaddrEdit,"192.168.1.1");//IpaddrEdit为IP地址的EDIT窗口句柄
SetWindowText(IPortEdit,"80");//IPortEdit为端口的EDIT窗口句柄
可实现
CString str = "192.168.0.1";
HWND hbtnWnd = ::GetDlgItem(hWnd,0x3e9); //假设0x3e9是你要增的EDIT框
::SendMessage(hbtnWnd,WM_SETTEXT,0,(LPARAM)str.GetBuffer(str.GetLength()));
错的人不是我啊~~呵呵,SetWindowText当然可以,但是他不会显示,他是纪录你的键盘输入到一个变量,然后显示,你只改变显示的部分,不改变那个变量得值有用吗?最好的办法,是用在定位进入他程序的自身,然后修改,或者你了解他数据包的加密方式,截取后修改,不难得,上网上搜搜.
在
SetWindowText(IpaddrEdit,"192.168.1.1");//IpaddrEdit为IP地址的EDIT窗口句柄
SetWindowText(IPortEdit,"80");//IPortEdit为端口的EDIT窗口句柄
前加入
::MESSAGEBOX(null,"a","b",MB_OK);
就可以了.
怪,难道发给窗口的消息还没收到,或者是收到了还没来得及更新窗口????
//发送CBN_SELCHANGE(这一步得到 hujun614(Softworm)大侠的指点)
::PostMessage((HWND)pMsg->lParam,WM_COMMAND,0x00013E81,(LONG)GetDlgItem((HWND)pMsg->lParam,0x00003E81));
时,这一消息要刷新ip和port的内容,当你先
SetWindowText(...)后,就比上面的消息清空了
所以,在这两句之间要如果处理?Sleep()好象不太好,那要如何等待呢?