zoukankan      html  css  js  c++  java
  • WPF通过消息机制实现进程间通信(IPC)

    接收端代码:

    [StructLayout(LayoutKind.Sequential)]
            public struct CopyDataStruc
            {
                public IntPtr dwData;
                public int cbData;  // 字符串长度
                [MarshalAs(UnmanagedType.LPStr)]
                public string lpData; // 字符串
            }
    
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                (PresentationSource.FromVisual(this) as HwndSource).AddHook(new HwndSourceHook(this.WndProc));
            }
    
            IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
            {
                if (msg == MessageHelper.WM_DOWNLOAD_COMPLETED)
                {
                    //CopyDataStruct cds = (CopyDataStruct)System.Runtime.InteropServices.Marshal.PtrToStructure(lParam, typeof(CopyDataStruct));
                    MessageBox.Show("I got it!");
                }
    
                return hwnd;
            }

    发送端代码:

    private void PostMessage()
            {
                Process proc = Process.GetProcessesByName("MyAppSample")[0];
                //Process[] procs = Process.GetProcesses();
                //foreach (Process p in procs)
                //{
                //    if (p.ProcessName == "MyAppSample")
                //    {
                //        proc = p;
                //    }
                //}
                IntPtr hwnd = MessageHelper.FindWindow(null, "MainWindow");
                MessageHelper.PostMessage(hwnd, MessageHelper.WM_DOWNLOAD_COMPLETED, IntPtr.Zero, IntPtr.Zero);
                MessageHelper.PostMessage(proc.MainWindowHandle, MessageHelper.WM_DOWNLOAD_COMPLETED, IntPtr.Zero, IntPtr.Zero);
            }
    public class MessageHelper
        {
            public const int WM_DOWNLOAD_COMPLETED = 0x00AA;
    
            [DllImport("User32.dll", EntryPoint = "FindWindow")]
            public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    
            [DllImport("User32.dll", EntryPoint = "SendMessage")]
            public static extern int SendMessage(IntPtr wnd, int msg, IntPtr wP, IntPtr lP);
            //private static extern int SendMessage
            //(
            //    IntPtr hWnd,    //目标窗体句柄
            //    int Msg,        //WM_COPYDATA
            //    int wParam,     //自定义数值
            //    ref  CopyDataStruct lParam //结构体
            //);
    
            [DllImport("User32.dll", EntryPoint = "PostMessage")]
            public static extern int PostMessage(IntPtr wnd, int msg, IntPtr wP, IntPtr lP);
            
  • 相关阅读:
    js——获取指定日期的前7天连续日期
    一个div自动充满当前屏幕的解决方法
    Cookie和Session
    Web服务器和浏览器间的工作原理
    软件测试基础概念
    K短路的几种求法
    ID字体
    搭建GitLab的Hexo博客记录
    项目selfcmp开发学习
    牛顿迭代法学习笔记
  • 原文地址:https://www.cnblogs.com/leelike/p/2725780.html
Copyright © 2011-2022 走看看