過年的時候QQ裡各種群發祝福不斷,這種群發消息隻能在節假日的時候才會出現。日常生活中,在需要用到群發功能的時候,還需要借助其他軟件來實現群發。今天:在這裡簡單寫一個實現QQ群發功能的軟件(通過模拟按鍵來實現消息的群發)
不想敲代碼,私信我“代碼” 即可獲取
創建項目
運行程序測試效果
選中控件,按下鍵盤上的删除<Delete>,控件就不見了。
選擇控件,輸入:開始發送(或者右擊,屬性,改變文字)
選擇工具箱,找到Edit控件,在對話框上拖動顯示出來..
添加其他的控件,設置對話框界面。最終界面效果:
編輯框右擊,添加變量:m_msg
添加成功後
添加類 QQMsg
QQMsg.h裡寫入下列代碼
不想敲代碼,私信我“代碼” 即可獲取
#pragma once
//這個類是實現QQ群發的類
class QQMsg
{
public:
QQMsg();
~QQMsg();
//static 創建一個類的入口
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 m_Msg;
};
在QQMsg.cpp中實現代碼#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();//
}
返回對話框,雙擊開始發送按鈕
3.将代碼改為下列(并在此文件頭中包含#include "QQMsg.h"):
不想敲代碼,私信我“代碼” 即可獲取
UpdateData(true);
QQMsg::Instance()->Start(m_msg.GetBuffer());//m_msg.GetBuffer() 獲取指針
最後大功告成。快去試一試吧。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!