C# 利用SendMessage實現winform與wpf之間的消息傳遞


WPF 接收初始化

        /// <summary>
        /// 初始化窗體句柄消息接收函數
        /// </summary>
        private void InitailWinHand()
        {
            HwndSource hWndSource;
            WindowInteropHelper wih = new WindowInteropHelper(this);
            hWndSource = HwndSource.FromHwnd(wih.Handle);
            //添加處理程序 
            hWndSource.AddHook(new HwndSourceHook(MainWindowProc));
        }    
         private IntPtr MainWindowProc(IntPtr hwnd, int msg,  IntPtr lParam, IntPtr wParam, ref bool handled)
        {
            switch (msg)
            {
                //執行動作
 
            }
            return IntPtr.Zero;
        }

  

WINDFORM 接收

protected override void WndProc(ref System.Windows.Forms.Message m)
        {
            switch (m.Msg)
            {
                case 自定義消息:
                    
                    break;
                default:
                    base.WndProc(ref m);   // 調用基類函數處理其他消息。   
                    break;
            }
        }  

  

SendMessage 用法

函數功能:該函數將指定的消息發送到一個或多個窗口。此函數為指定的窗口調用窗口程序,直到窗口程序處理完消息再返回。該函數是應用程序和應用程序之間進行消息傳遞的主要手段之一。
    函數原型:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);

    參數:

    hWnd:其窗口程序將接收消息的窗口的句柄。如果此參數為HWND_BROADCAST,則消息將被發送到系統中所有頂層窗口,包括無效或不可見的非自身擁有的窗口、被覆蓋的窗口和彈出式窗口,但消息不被發送到子窗口。

    Msg:指定被發送的消息。

    wParam:指定附加的消息指定信息。

    IParam:指定附加的消息指定信息。

    返回值:返回值指定消息處理的結果,依賴於所發送的消息。

    備注:需要用HWND_BROADCAST通信的應用程序應當使用函數RegisterWindowMessage來為應用程序間的通信取得一個唯一的消息。

    如果指定的窗口是由調用線程創建的,則窗口程序立即作為子程序調用。如果指定的窗口是由不同線程創建的,則系統切換到該線程並調用恰當的窗口程序。線程間的消息只有在線程執行消息檢索代碼時才被處理。發送線程被阻塞直到接收線程處理完消息為止。

C#中使用該函數首先導入命名空間:
using System.Runtime.InteropServices;

然后寫API引用部分的代碼,放入 class 內部
[DllImport("user32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM