• WinForm 跨进程传输数据


    public class WinMessageHelper
    {
        
    private struct COPYDATASTRUCT
        {
            
    public IntPtr dwData;
            
    public int cbData;
            [MarshalAs(UnmanagedType.LPStr)]
            
    public string lpData;
        }

        
    //使用COPYDATA进行跨进程通信
        public const int WM_COPYDATA = 0x004A;

        [DllImport(
    "User32.dll", EntryPoint = "SendMessage")]
        
    private static extern int SendMessage(
        
    int hWnd, // handle to destination window
        int Msg, // message
        int wParam, // first message parameter
        ref COPYDATASTRUCT lParam // second message parameter
        );

        [DllImport(
    "User32.dll", EntryPoint = "FindWindow")]
        
    private static extern int FindWindow(string lpClassName, string lpWindowName);

        
    /// <summary>
        
    /// 发送消息
        
    /// </summary>
        
    /// <param name="windowReceiveTitle">接收方窗体标题名称</param>
        
    /// <param name="strData">要发送的数据</param>
        public static void Send(string windowReceiveTitle, string strData)
        {
            
    int winHandler = FindWindow(null,windowReceiveTitle);
            
    if (winHandler != 0)
            {
                
    byte[] sarr = System.Text.Encoding.Default.GetBytes(strData);
                
    int len = sarr.Length + 1;
                COPYDATASTRUCT cds;
                cds.dwData 
    = (IntPtr)100;
                cds.lpData 
    = strData;
                cds.cbData 
    = len;
                SendMessage(winHandler, WM_COPYDATA, 
    0ref cds);
            }
        }

        
    /// <summary>
        
    /// 接收消息
        
    /// </summary>
        
    /// <example>
        
    /// 在窗体中覆盖接收消息函数
        
    /// protected override void DefWndProc(ref System.Windows.Forms.Message m)
        
    /// {
        
    ///     switch(m.Msg)
        
    ///     {
        
    ///         case WinMessageHelper.WM_COPYDATA:
        
    ///             string str = WinMessageHelper.Receive(ref m);
        
    ///             break;
        
    ///         default:
        
    ///             base.DefWndProc(ref m);
        
    ///             break;
        
    /// 
        
    ///     }
        
    /// }
        
    /// </example>
        
    /// <returns>接收的到数据</returns>
        public static string Receive(ref System.Windows.Forms.Message m)
        {
            COPYDATASTRUCT cds 
    = new COPYDATASTRUCT();
            Type cdsType 
    = cds.GetType();
            cds 
    = (COPYDATASTRUCT)m.GetLParam(cdsType);
            
    return cds.lpData;
        }
    }


    原文:http://www.cnblogs.com/yuji/archive/2011/07/18/2109138.html 

  • 相关阅读:
    scp 利用 ssh 协议 复制文件
    linux (fedora 28) 制作启动U盘,启动盘
    nc 命令使用详解
    env :让系统决定你命令的位置
    tali -f 和 tail -F 之间的区别
    斯诺克台球比赛规则 (Snooker)
    中式台球 规则 ( ChinaBilliards )
    美式九球比赛规则 (Nine-ball)
    Tmux 使用教程 on Fedora 28
    python 3.6 的 venv 模块
  • 原文地址:https://www.cnblogs.com/08shiyan/p/2313863.html
Copyright © 2020-2023  润新知