【Qt】Qt之进程间通信(Windows消息)【转】
生活随笔
收集整理的這篇文章主要介紹了
【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>(©data));} }接收消息
設(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)題。
- 上一篇: matlab_取整函数
- 下一篇: IOS 开发中 Whose view