爱学习的小仙女 发表于 2018-3-6 14:08

简单写一个实现QQ群发功能的软件

本帖最后由 爱学习的小仙女 于 2018-3-6 14:12 编辑

写在前面的话:


过年的时候QQ里各种群发祝福不断,这种群发消息只能在节假日的时候才会出现。日常生活中,在需要用到群发功能的时候,还需要借助其他软件来实现群发。今天:在这里简单写一个实现QQ群发功能的软件(通过模拟按键来实现消息的群发)


准备:




开发工具:VC,vs系列,等等····都可以(我用的是vs2015)


百度:函数keybd_event的功能和用法。


一、设计界面1.新建项目:选择MFC应用程序,选择保存位置


1.1





1.2





2.下一步:勾选<基于对话框>,取消勾选:安全开发生命周期检查。然后直接点击完成。









3:这就是一个建立好的MFC应用程序了,可以直接运行下看看效果










4.选中控件,按下键盘上的删除<Delete>,控件就不见了。






5.选择控件,输入:开始发送(或者右击,属性,改变文字)









6.选择工具箱,找到Edit控件,在对话框上拖动显示出来..








7.添加其他的控件,设置对话框界面。最终界面效果:






8.编辑框右击,添加变量:m_msg







添加成功后




二、设计程序1.添加类 QQMsg











2. 在QQMsg里写入下列代码



#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;
};

3.在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.返回对话框,双击开始发送按钮








3.将代码改为下列(并在此文件头中包含#include "QQMsg.h"):





UpdateData(true);
QQMsg::Instance()->Start(m_msg.GetBuffer());//m_msg.GetBuffer()   获取指针






三、编译


end

爱学习的小仙女 发表于 2018-3-14 16:15

hyl6688 发表于 2018-3-14 15:13
提示计算机中丢失mfc140u.dll,无法使用,怎么办

提示缺失mfc140u.dll文件的话,可以到网上下载这个动态链接库。

或者按照上面的方法自己编译下{:301_988:}

爱学习的小仙女 发表于 2018-3-28 18:11

g93653971 发表于 2018-3-28 15:47
但是我发现下载下来用不了 啊

{:1_907:}
程序是64位的,还需要安装一些dll文件。

你可以按照方法,自己编译下{:301_1005:}

mayl8822 发表于 2018-3-6 14:17

感谢分享

D小小贱 发表于 2018-3-6 14:19

收藏备用

帝傲世 发表于 2018-3-6 14:24

支持小仙女出品~·
抱歉 评分点错了……
再抱歉下,QQ很少用了……
{:301_1007:}

zjf6311 发表于 2018-3-6 14:36

学习学习~

做客人间 发表于 2018-3-6 14:37

谢谢楼主 感谢分享

2016年11月11号 发表于 2018-3-6 14:54

两条路,一条必须走,一条想走!

liziya 发表于 2018-3-6 15:15


感谢分享

a159189 发表于 2018-3-6 15:23

很赞,不错,感谢分享

不识i 发表于 2018-3-6 15:24

妹子厉害呀
页: [1] 2 3 4 5 6 7 8
查看完整版本: 简单写一个实现QQ群发功能的软件