1. 程式人生 > 其它 >Qt中IPC(程序間通訊)的方式一:WM_COPYDATA訊息

Qt中IPC(程序間通訊)的方式一:WM_COPYDATA訊息

技術標籤:QT

資料複製訊息WM_COPYDATA是Windows中一個特殊的訊息,通過這個訊息能夠在程序間傳遞資料。

WM_COPYDATA訊息含兩個引數WPARAM wParam和LPARAM lParam,WPARAM和LPARAM是匈牙利命名法,歷史更迭,WPARAM指32位整形變數,LPARAM指32為整形變數指標。傳送WM_COPYDATA時,wParam賦值為傳送此訊息的窗體,lParam則指向一個COPYDATASTRUCT結構:

 typedefstruct{
       ULONG_PTR  dwData;
        DWOED  cdData;
        PVOID  lpData;
    };

該結構體中,dwData能夠使隨意值,lpData是須要傳送給窗體所在程序的資料地址,cbData是lpData傳送資料的位元組數。

SendMessage(
   hwndto,       //目標窗體控制代碼
   (UINT)WM_COPYDATA,  //指定傳送的資料
   (WPARAM)hwndfrom,  //將源窗體控制代碼做WPARAM引數
    (LPARAM)&cds    //將COPYDATASTRUCT做LPARAM引數
 );

2. Qt中處理自定義訊息:(前提是開啟了事件迴圈QEventLoop)

方式一:nativeEventFilter

使用installNativeEventFilter註冊自定義事件過濾器,繼承QAbstractNativeEventFilter實現nativeEventFilter方法以實現自定義事件過濾器。

//QCoreApplication
 
void installNativeEventFilter(QAbstractNativeEventFilter *filterObj);
 
//QAbstractNativeEventFilter
 
virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *result)=0;

方式二:nativeEvent

繼承QWidget重寫nativeEvent方法即可。

//QWidget:
 
virtual bool nativeEvent(const QByteArray &eventType, void *message, long *result);