QQ自动发消息VC实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
QQ自动发消息VC实现
软件界面如下:
v1.0
v2.0
其它功能就不详细说了,这里只给大家把主要的地方将一下。
1、查找当前的所有聊天窗口。
QQ两天窗口的特点都是以******交谈中,而群则是***-群,所以只要找到所有窗口然后判断窗口标题就行了。
::EnumWindows(EnumWindowsProc_1,0) ; //需要时调用就行了
//下边这个函数必须是全局的
BOOL CALLBACK EnumWindowsProc_1(HWND hwnd,LPARAM lparam)
{
char lpWinTitle[256];
CString m_strTitle;
::GetWindowT ext(hwnd,lpWinTitle,256-1);
m_strTitle.Format("%s",lpWinTitle);
if(m_strTitle.Find("交谈中")!=-1||m_strTitle.Find("群")!=-1)
{
strcat(chTitle[i],m_strTitle);
i++;
}
return TRUE ;
}
2找到聊天窗口中输入内容的RichEdit控件的HWND和发送按钮的HWND
//这个函数也必须是全局的
BOOL CALLBACK EnumChildWindowsProc_1(HWND hwnd,LPARAM lparam)
{
if(hwnd)
{
char m_strClass[256];
char m_pstr[256];
char lpWinTitle[256];
HWND phwnd;
::GetClassName(hwnd,m_strClass,255);
::GetWindowT ext(hwnd,lpWinTitle,256-1);
phwnd=::GetParent(hwnd);
::GetClassName(phwnd,m_pstr,255);
if (!strcmp(m_strClass,"RichEdit20A")&&!strcmp(m_pstr,"AfxWnd42"))
msgHWND[k++]=hwnd;
if(!strcmp(m_strClass,"Button")&&!strcmp(lpWinTitle,"发送(S)"))
btnHWND[k]=hwnd;
return TRUE;
}
else
return FALSE;
}
//下边这个函数使用时调用就行了
::EnumChildWindows(childHWND,EnumChildWindowsProc_1,0);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////
对于上边的代码,我想大家用spy++查看一下就知道了,QQRichEdit是嵌套了一层的,上边的传输消息的也叫RichEdit,只是父窗口不一样而已。
3像这些HWND发送消息
::SendMessage(msgHWND[j],EM_REPLACESEL,0,(LPARAM)m_text.GetBuffer(m_text. GetLength()));
::SendMessage(btnHWND[j],BM_CLICK,0,0);
至于问什么不用WM_PASTE大家试试就知道了,QQ把这个消息给屏蔽了,所以要用EM_REPLACESEL。
对于PostMessage,经测试没发送成功,大家可以试试,说不定是我哪搞错了。
QQ自动发消息打注意内容也就这些了,大家可以自己完善一下。