c++对qq发送聊天窗口发送消息

#include "预编译.h"
#include 
#pragma warning(disable:4996) //忽略4996错误提示
#pragma comment(linker,"/entry:mainCRTStartup  /subsystem:windows")//不明白但必要
//引入微软的include 后才能进行如下某些函数与类型的编写
void PrintUI(const char * exeName,const char* UIName,const char* color,short x,short y,WORD UIWide,WORD UIHeight)
{
    
    AllocConsole();//创建一个控制台

    freopen("conin$","r+t",stdin);//将输出流设置为当前的窗口

    freopen("conout$", "w+t", stdout);//将输入流设置为当前窗口

    SetConsoleTitleA(UIName);
    
    system(color);

}


char clName[MAXBYTE];//句柄寻找窗口类名
char titleName[MAXBYTE];//标题

std::vector * myhwnd = new std::vector();

/*zhe BOOL 是一个int 草了 参数第一个是句柄,第二个是 系统调用次函数传递给你的参数*/
BOOL CALLBACK  enumFunction(HWND j,LPARAM Lparam) //用来获取当前程序中符合条件的句柄
{
    GetClassName(j,clName,MAXBYTE);//通过句柄来获取窗口类名
    GetWindowText(j,titleName,MAXBYTE);
    if (strstr(clName, "TXGuiFoundation") &&
        !strstr(titleName, "QQ") &&
        titleName[0] != 0)
    {
        myhwnd->push_back(j);
        printf("句柄:%d ===  类名:%s  === 标题名: %s \n",j,clName,titleName);

    }
    if (j != nullptr)
    {
        return 1;
    }
    else
    {
        return 0;
    }
    //return true; //返回true为继续获取句柄,返回false为只获取一次句柄

}

int _tmain(int argc,_TCHAR*argv[]) {

    PrintUI("hello,world!","myConsole","color 0A",500,500,800,800);
    //color的 0 是背景颜色黑色 A是字体颜色

//    SendMessage((HWND)0x0002089A,WM_PASTE,0,0);
    EnumWindows(enumFunction,NULL);//枚举窗口
    std::cout << myhwnd->size()<<"mysize" << std::endl;;
    for (std::vector::iterator c = myhwnd->begin(); c != myhwnd->end(); c++)
    {
        //一下内容说实话没屁用,可以删掉 这,段代码总感觉有问题啊还有点卡电脑
                //前景锁定超时值 , 一下操作均为假激活措施,可以不用了解为什么
                DWORD dwTimeOut =-1; //Dword为 无符号long 赋值负一取最大正整数

                SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT,0,&dwTimeOut,0);
                if (dwTimeOut >= 100)
                {
                    SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, 0, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE);
                    //更新写入配置文件
                }
                HWND THISwindowJB=GetForegroundWindow();//获取当前窗口句柄

                SetWindowPos(THISwindowJB,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE);//改变窗口属性

                DWORD currentThreadId = GetCurrentThreadId(); //获取当前线程id

                DWORD curWindowThreadId = GetWindowThreadProcessId(THISwindowJB,NULL); //获取当前窗口的线程
                //附加线程 currentThreadId -> currentThreadId
                AttachThreadInput(currentThreadId, curWindowThreadId,true);

        //以上内容说实话没屁用

        ShowWindow(*c, SW_NORMAL);//获取句柄显示将句柄窗口显示

        SetForegroundWindow(*c);//将窗口放在最前面

        SendMessage(*c, WM_PASTE, 0, 0);//将复制的内容发送到窗口

        keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), 0, 0); // 按下回车

        Sleep(50);

        keybd_event(VK_RETURN, MapVirtualKey(VK_RETURN, 0), KEYEVENTF_KEYUP, 0); // 抬起回车
    }
    std::cin.get();
}

你可能感兴趣的:(c++)