• Wpf发送接收 win32消息


    #region WPF发送和接收win32消息
            public const int WM_GETTEXT = 0x0D;
            public const int WM_SETTEXT = 0x0C;
            public const int WM_SIZEING = 0x0214;
            public const int WM_COPYDATA = 0x004A;
            public const int WM_LBUTTONDBLCLK = 0x0203;
    
            public struct Win32Message
            {
                public IntPtr dwData;
                public int cbData;
                [MarshalAs (UnmanagedType.LPStr)]
                public string lpData;
            }
    
            [DllImport("user32.dll")]
            private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, ref Win32Message lParam);
    
            /// <summary>
            /// 返回wpf主窗体句柄
            /// </summary>
            /// <param name="processName">wpf进程名</param>
            /// <returns></returns>
            public static IntPtr  GetWpfMainwindowHandel(string processName)
            {            
                return Process.GetProcesses().FirstOrDefault(t => t.ProcessName.Contains(processName))?.MainWindowHandle??IntPtr.Zero;
            }
            /// <summary>
            /// 发送win32消息给wpf窗口
            /// </summary>
            /// <param name="wpfWinHandel">窗口句柄</param>
            /// <param name="message">字符串消息</param>
            public static void SendWin32MessageToWpfWindow(IntPtr wpfWinHandel,string message )
            {
                if (wpfWinHandel != IntPtr.Zero)
                {
                    var param = new Win32Message
                    {
                        dwData = (IntPtr)100,
                        cbData = System.Text.Encoding.Default.GetBytes(message).Length,
                        lpData = message,
                    };
                    SendMessage(wpfWinHandel, WM_COPYDATA, 0, ref param);
                }
                else
                {
                    Console.WriteLine("wpf窗口句柄为zero");
                }
            }
    
            /// <summary>
            /// wpf窗口订阅win32消息
            /// </summary>
            /// <param name="window">wpf窗口</param>
            /// <param name="action">接收到win32消息时要处理的action</param>
            public static void SubWin32Message(System.Windows.Window window,Action<string> action)
            {
                WindowInteropHelper win = new WindowInteropHelper(window);
                HwndSource hwndSource = HwndSource.FromHwnd(win.Handle);
                hwndSource.AddHook((IntPtr hwnd,int msg,IntPtr wparam,IntPtr iparam,ref bool handel)=>
                {
              if ( msg ==
    WM_COPYDATA )
              {
                 Win32Message m = (Win32Message)Marshal.PtrToStructure(iparam, typeof(Win32Message));
                action
    ?.Invoke(m.lpData);
              }
             
    return IntPtr.Zero;
           });
         }

    #endregion
  • 相关阅读:
    劳动节CF题总结
    「联合省选 2020 A」作业题 做题心得
    bzoj3784 树上的路径
    [AGC039E] Pairing Points
    [AGC012E] Camel and Oases
    [AGC011F] Train Service Planning
    [AGC039F] Min Product Sum
    Pedersen commitment原理
    标准模型(standard model)与随机语言模型(random oracle model)
    会议论文引用缩写标准 PDF
  • 原文地址:https://www.cnblogs.com/nocanstillbb/p/10488511.html
Copyright © 2020-2023  润新知