思路:
1, 获取到微信窗口句柄
2,通过一系列模拟键盘/鼠标操作实现发送消息
上代码:(因为只有简单的1个功能 所以没有封装直接在main里写)
实际上没有用到Qt的API, 但是代码移植到VsCode编译出现中文乱码, 没找到如何解决于是就用Qt编译
#include <windows.h>
#include <QDebug>
int main()
{
HWND hwnd = FindWindowA("WeChatMainWndForPC", NULL);//获取微信窗口句柄
if(hwnd == NULL){
qDebug()<<"不找到";
exit(0);
}
ShowWindow(hwnd, SW_MAXIMIZE);
SetWindowPos(hwnd, HWND_TOP,0, 0, 1000, 700, SWP_SHOWWINDOW);//微信窗口置顶
SetCursorPos(18,148);//窗口移动
/*
*模拟鼠标键盘按键操作
*/
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
SetCursorPos(18,100);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
keybd_event(17,0,0,0);//模拟按下ctrl
keybd_event('F',0,0,0);//模拟按下F
keybd_event(17,0,KEYEVENTF_KEYUP,0);
keybd_event('F',0,KEYEVENTF_KEYUP,0);
Sleep(1000);
TCHAR szText[] = L"TestMsg"; //发送联系人
if (OpenClipboard(hwnd)) {//系统剪切板操作
EmptyClipboard();
HANDLE hData = GlobalAlloc(GMEM_MOVEABLE, sizeof(szText));
LPWSTR pData = (LPWSTR)GlobalLock(hData);
CopyMemory(pData, szText, sizeof(szText));
GlobalUnlock(hData);
SetClipboardData(CF_UNICODETEXT, hData);
CloseClipboard();
}
keybd_event(17,0,0,0);
keybd_event('V',0,0,0);
keybd_event(17,0,KEYEVENTF_KEYUP,0);
keybd_event('V',0,KEYEVENTF_KEYUP,0);//ctrl + V
Sleep(1000);//等待微信搜索联系人
keybd_event(13,0,0,0);//按下 回车键
keybd_event(13,0,KEYEVENTF_KEYUP,0);
TCHAR sendText[] = L"怎么还不还钱";//发送的消息
if (OpenClipboard(hwnd)) {
EmptyClipboard();
HANDLE hData = GlobalAlloc(GMEM_MOVEABLE, sizeof(sendText));
LPWSTR pData = (LPWSTR)GlobalLock(hData);
CopyMemory(pData, sendText, sizeof(sendText));
GlobalUnlock(hData);
SetClipboardData(CF_UNICODETEXT, hData);
CloseClipboard();
}
for(int i=0; i<10; i++){//发送消息次数
keybd_event(17,0,0,0);
keybd_event('V',0,0,0);
keybd_event(17,0,KEYEVENTF_KEYUP,0);
keybd_event('V',0,KEYEVENTF_KEYUP,0);
keybd_event(13,0,0,0);
keybd_event(13,0,KEYEVENTF_KEYUP,0);
Sleep(500);
}
SetWindowPos(hwnd, HWND_TOP,0, 0, 1000, 700, SWP_HIDEWINDOW);//发送结束隐藏微信
return 0;
}