C++——QQ登录群发实现_C++C++——QQ登录群发实现_C++_02C++——QQ登录群发实现_C++_03C++——QQ登录群发实现_C++_04C++——QQ登录群发实现_C++_05C++——QQ登录群发实现_C++_06C++——QQ登录群发实现_C++_07C++——QQ登录群发实现_C++_08C++——QQ登录群发实现_C++_09C++——QQ登录群发实现_C++_10

  • 编辑框右击,添加变量 C++——QQ登录群发实现_C++_11C++——QQ登录群发实现_C++_12C++——QQ登录群发实现_C++_13C++——QQ登录群发实现_C++_14C++——QQ登录群发实现_C++_15C++——QQ登录群发实现_C++_16C++——QQ登录群发实现_C++_17
 #pragma once


//class实现 qq发射类
class QQmsg
{
public:
	QQmsg();
	~QQmsg();

	// static 创建class 入口
	//面向对象最重要的概念就是类(Class)和实例(Instance)
	static QQmsg *Instance() {
		static QQmsg object;
		return &object;
	}

		
	//入口函数 开始 发射函数实现
	void Start(const wchar_t *msg); //const 发射信息

private:
	//线程函数
	static unsigned int WINAPI RunThreadProc(void *param);
	//发射函数
	void SendMain();
	//模拟键盘函数
	void PressKey(BYTE vkey);
	//发送消息
	void SendMsg();
	//把文字拷贝到剪切板
	void CopyTextToClipborad();
	
private:
	CString sent_msg;


};


C++——QQ登录群发实现_C++_18

 #include "stdafx.h"
#include "QQmsg.h"


QQmsg::QQmsg()
{
}


QQmsg::~QQmsg()
{
}


//入口函数 (开启 发射 的函数实现)
void QQmsg::Start(const wchar_t *msg)
{
	sent_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 = sent_msg.GetLength() * sizeof(wchar_t) + 2;
	HANDLE hHandle = GlobalAlloc(GHND, memLen);
	void *addr = GlobalLock(hHandle);
	ZeroMemory(addr, memLen);

	memcpy(addr, (const wchar_t*)sent_msg.GetBuffer(), memLen);
	GlobalUnlock(hHandle);


	//
	OpenClipboard(NULL);//打开剪切板
	EmptyClipboard();//清空
	SetClipboardData(CF_UNICODETEXT, hHandle);//设置剪切板内容
	CloseClipboard();//
}

C++——QQ登录群发实现_C++_19C++——QQ登录群发实现_C++_20C++——QQ登录群发实现_C++_21

 
void CqqsentDlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(true);
	QQmsg::Instance()->Start(sent_msg.GetBuffer());//m_msg.GetBuffer()   获取指针

}

C++——QQ登录群发实现_C++_22C++——QQ登录群发实现_C++_23C++——QQ登录群发实现_C++_24C++——QQ登录群发实现_C++_25

  • 好像不支持win7系统测试过(导入mfc.dll也没用)
  • win10 可以正常使用 (待更改)