#
include
"stdafx.h"
#
include
"QQMsg.h"
QQMsg::QQMsg()
{
}
QQMsg::~QQMsg()
{
}
//入口函数(开启群发的函数实现)
void QQMsg::Start(const wchar_t *msg)
{
m_Msg=CString(msg);
//开始线程
_beginthreadex(NULL, 0, QQMsg::RunThreadProc, NULL, 0, NULL);
}
//线程函数
unsigned
int
QQMsg::RunThreadProc(void *param)
{
QQMsg::Instance()->SendMain();
return 0;
}
//发送主函数
void QQMsg::SendMain()
{
int
errtimes = 0;
//实现整个发送消息的流程
//复制文字到剪切板
CopyTextToClipborad();
////
int
i;
while
(errtimes<=4)
{
//2.找到QQ窗口
HWND hQQWnd = FindWindow(L
"TXGuiFoundation"
,L
"QQ"
);
//windows系统中窗口的查找.1.窗口类名称.2.标题
//工具 --> spy++
//找到一个最前的窗口
HWND hfront = GetForegroundWindow();
if
(hQQWnd!= hfront)
{
if
(!SetForegroundWindow(hQQWnd))//强制把QQ窗口置顶
{
MessageBox(NULL,L
"找不到QQ窗口"
,L
"警告"
,MB_OK);
break;
}
}
////模拟按键 keybd_event函数
if
(errtimes == 0)
{//使用循环这里会出问题
// i = 6;
//
while
(i--)
// {
// PressKey(VK_TAB);
// }
//按下6次TAB键
PressKey(VK_TAB);
PressKey(VK_TAB);
PressKey(VK_TAB);
PressKey(VK_TAB);
PressKey(VK_TAB);
PressKey(VK_TAB);
}
PressKey(VK_DOWN);
PressKey(VK_RETURN);
HWND hcurfrontWnd = GetForegroundWindow();
if
(hcurfrontWnd == hQQWnd)
{
errtimes++;
continue;
}
errtimes = 0;
SendMsg();
}
}
//模拟键盘函数
void QQMsg::PressKey(
BYTE
vkey)
{
//模拟按键 keybd_event函数
keybd_event(vkey,0,0,0);
Sleep(100);//时间间隔100ms
keybd_event(vkey,0,KEYEVENTF_KEYUP,0);
Sleep(100);
}
//发送消息
void QQMsg::SendMsg()
{
//ctrl+v
keybd_event(VK_CONTROL, 0, 0, 0);
Sleep(100);
keybd_event(0x56, 0, 0, 0);
Sleep(100);
keybd_event(0x56, 0, KEYEVENTF_KEYUP, 0);
Sleep(100);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
Sleep(100);
PressKey(VK_RETURN);//
enter
PressKey(VK_ESCAPE);//
Esc
关闭
}
//把文字拷贝到剪切板
void QQMsg::CopyTextToClipborad()
{
//全局内存中找一内存来存放字符串
int
memLen = m_Msg.GetLength() *
sizeof
(wchar_t) + 2;
HANDLE hHandle = GlobalAlloc(GHND, memLen);
void *
addr
= GlobalLock(hHandle);
ZeroMemory(
addr
, memLen);
memcpy(
addr
, (const wchar_t*)m_Msg.GetBuffer(), memLen);
GlobalUnlock(hHandle);
//
OpenClipboard(NULL);//打开剪切板
EmptyClipboard();//清空
SetClipboardData(CF_UNICODETEXT, hHandle);//设置剪切板内容
CloseClipboard();//
}