zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    Ubuntu下手动安装vscode
    VMware Tools安装后设置自动挂载解决共享文件夹无法显示的问题
    VMware Tools安装方法及共享文件夹设置方法
    JavaScript原始类型转换和进制转换
    Javascript的数据类型(原始类型和引用类型)
    设计模式(六)观察者模式
    设计模式(五)之适配器模式
    设计模式(四)注册模式 解决:解决全局共享和交换对象
    设计模式(三)单例模式
    设计模式(二)之策略模式
  • 原文地址:https://www.cnblogs.com/wangyonglai/p/13711357.html
Copyright © 2011-2022 走看看