背景:
个人没其它爱好,偶尔玩一下网络游戏,最近想起高中时代玩的网游热血江湖,可惜现在的热血江湖一片死人,都是机器人玩家,一个挂一台电脑挂N个帐号,
因为上班,游戏挂着不能实时去看着,TeamViewer也用过,但是感觉没必要,主要是在公司远程家里的电脑如果被发现影响不好.
所以才有个想法,写个小程序,家里电脑登录一个QQ号,然后定时给我另一个QQ发消息, 这样就能知道家里游戏的状态了.
准备:
开发工具:VS2008 就这个用着顺手
编程语言:C++ 界面就用MFC那一套了.
思路:
通过FindWindow来获取QQ聊天对话框的窗口句柄,然后向这个窗口发消息,
实际上QQ屏蔽了 SendMessage 和 WM_PASTE消息,但是可以使用 PostMessage和WM_CHAR,这样就能完成需求了.
部分代码:
void CRXJH_EXTENDDlg::SendOne(void)
{
OnBnClickedButtonFindWnd();
if(!m_hQQ)
{
AddLog("发送失败!");
return;
}
int i;
CString strSendType;
m_comboSendType.UpdateData(TRUE);
m_comboSendType.GetWindowText(strSendType);
CString strMsg = m_strMsg;
if(strSendType=="文件")
{
CStdioFile file;
if(!file.Open(m_strFile,CFile::modeRead,NULL))
{
AddLog("发送失败,文件不存在!");
return;
}
strMsg.Empty();
CString strTxt;
CString strEndLine;
strEndLine.Format("%c%c ",0x0D,0x0A);
while(file.ReadString(strTxt))
{
strMsg += strTxt;
strMsg += strEndLine;
}
file.Close();
}
strMsg += _T(" \r\nQQ助手.\r\nBy shortCoder QQ:981455795");
for(i=0;i<strMsg.GetLength();i++)
{
::PostMessage(m_hQQ,WM_CHAR,strMsg.GetAt(i) & 0xFF,0);
}
::PostMessage(m_hQQ, WM_KEYDOWN, VK_RETURN, 0);
::PostMessage(m_hQQ, WM_KEYUP, VK_RETURN, 0);
AddLog("发送成功!");
}
其中 WM_CHAR发送中文乱码的问题,请参考上一篇文章.
测试截图: