日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

【Qt】Qt之进程间通信(Windows消息)【转】

發(fā)布時(shí)間:2023/12/10 windows 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Qt】Qt之进程间通信(Windows消息)【转】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

簡(jiǎn)述

通過(guò)上一節(jié)的了解,我們可以看出進(jìn)程通信的方式很多,今天分享下如何利用Windows消息機(jī)制來(lái)進(jìn)行不同進(jìn)程間的通信。

  • 簡(jiǎn)述
  • 效果
  • 發(fā)送消息
    • 自定義類型與接收窗體
    • 發(fā)送數(shù)據(jù)
  • 接收消息
    • 設(shè)置標(biāo)題
    • 重寫(xiě)nativeEvent

效果

發(fā)送消息

自定義類型與接收窗體

包含所需庫(kù),定義發(fā)送的自定義類型、接收消息的窗體標(biāo)題。自定義類型可以處理消息過(guò)多情況下,對(duì)消息的區(qū)分,如果不需要也可以去掉。

#ifdef Q_OS_WIN #pragma comment(lib, "user32.lib") #include <qt_windows.h> #endifconst ULONG_PTR CUSTOM_TYPE = 10000; const QString c_strTitle = "ReceiveMessage";

發(fā)送數(shù)據(jù)

點(diǎn)擊按鈕,進(jìn)行消息發(fā)送。里面的do{…}while用來(lái)忽略本窗口,當(dāng)然自身也可以接受自身的消息。

void onSendMessage() {HWND hwnd = NULL;//do//{LPWSTR path = (LPWSTR)c_strTitle.utf16(); //path = L"SendMessage"hwnd = ::FindWindowW(NULL, path);//} while (hwnd == (HWND)effectiveWinId()); // 忽略自己if (::IsWindow(hwnd)){QString filename = QStringLiteral("進(jìn)程通信-Windows消息");QByteArray data = filename.toUtf8();COPYDATASTRUCT copydata;copydata.dwData = CUSTOM_TYPE; // 用戶定義數(shù)據(jù)copydata.lpData = data.data(); //數(shù)據(jù)大小copydata.cbData = data.size(); // 指向數(shù)據(jù)的指針HWND sender = (HWND)effectiveWinId();::SendMessage(hwnd, WM_COPYDATA, reinterpret_cast<WPARAM>(sender), reinterpret_cast<LPARAM>(&copydata));} }

接收消息

設(shè)置標(biāo)題

這一步很重要,必須與上一步的c_strTitle保持一致,否則會(huì)找不到窗體。自定義類型CUSTOM_TYPE也必須保持一致,進(jìn)行過(guò)濾。

setWindowTitle("ReceiveMessage");

重寫(xiě)nativeEvent

bool nativeEvent(const QByteArray &eventType, void *message, long *result) {MSG *param = static_cast<MSG *>(message);switch (param->message){case WM_COPYDATA:{COPYDATASTRUCT *cds = reinterpret_cast<COPYDATASTRUCT*>(param->lParam);if (cds->dwData == CUSTOM_TYPE){QString strMessage = QString::fromUtf8(reinterpret_cast<char*>(cds->lpData), cds->cbData);QMessageBox::information(this, QStringLiteral("提示"), strMessage);*result = 1;return true;}}}return QWidget::nativeEvent(eventType, message, result); }


原文作者:一去丶二三里
作者博客:去作者博客空間 ?

轉(zhuǎn)載于:https://www.cnblogs.com/mzy-google/p/5162098.html

總結(jié)

以上是生活随笔為你收集整理的【Qt】Qt之进程间通信(Windows消息)【转】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。