一、通信方式
通过windowAPI,SendMessage进行通信,等待结果返回,是一种同步的方式。PostMessage是将消息放入消息队列中,立即返回,是一种异步的方式。我采用的是同步的方式,两种方式用法一样。
二、发送方A程序
#pragma comment (lib,"User32.lib")
#pragma comment (lib,"Gdi32.lib")
#include <qt_windows.h>
#include <QTextCodec>
#include <future>
#include <Windows.h>
void MainWindow::on_pushButton_clicked()
{
HWND hWnd = FindWindow(NULL, L"王者荣耀");
if (hWnd != 0) {
qDebug()<<"\n窗口句柄:" << hWnd;
}
m_wnd = hWnd;
if (NULL != m_wnd) {
QString command = QString("%1").arg(ui->lineEdit->text());
std::string param = command.toStdString();
COPYDATASTRUCT data;
data.dwData = 0;
data.cbData = param.length();
data.lpData = ¶m[0];
SendMessage(m_wnd, WM_COPYDATA, 0, (LPARAM)&data);
}
}
三、接收方B程序
B程序,重写nativeEvent函数
bool MainWindow::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
if (eventType == "windows_generic_MSG")
{
MSG* msg = reinterpret_cast<MSG*>(message);
if (msg->message == WM_COPYDATA)
{
COPYDATASTRUCT *data = reinterpret_cast<COPYDATASTRUCT*>(msg->lParam);
QTextCodec *gbk = QTextCodec::codecForName("utf-8");
QString recevice = gbk->toUnicode((char *)(data->lpData));
ui->label->setText(QString("系统收到消息:%1").arg(recevice));
return true;
}
}
return QWidget::nativeEvent(eventType, message, result);
}
四、效果图
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)