利用SendMessage 发送消息到当前机子的另一个程序

C# code

 

// 发送端

public partial class Form1 : Form

    {

        private IntPtr ip = IntPtr.Zero;

        const int WM_COPYDATA = 0x004A ;

 

        public Form1()

        {

            InitializeComponent();

        }

     

        [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);

       

        private void Form1_Load( object sender, EventArgs e)

        {

 

        }

             

        private void button1_Click( object sender, System.EventArgs e)

        {

            int WINDOW_HANDLER = FindWindow( null , "YYDuanXinForm" );

            if (WINDOW_HANDLER == 0 )

            {

                MessageBox.Show( " 程序未启动。" );

            }

            else

            {

                byte [] sarr = System.Text.Encoding.Default.GetBytes( this .textBox1.Text);

                int len = sarr.Length;

 

                COPYDATASTRUCT cds;

                cds.dwData = (IntPtr) 100 ;

                cds.lpData = this .textBox1.Text;

                cds.cbData = len + 1 ;

                SendMessage(WINDOW_HANDLER, 0x004A , 0 , ref   cds);

            }

        }

    }

 

    public struct COPYDATASTRUCT

    {

        public IntPtr dwData;

        public int cbData;

        [MarshalAs(UnmanagedType.LPStr)]

        public string lpData;

    }

 

 

C# code

 

// 接收端 主要部分代码

  const int WM_COPYDATA = 0x004A ;

        protected override void DefWndProc( ref    System.Windows.Forms.Message m)

        {

            switch (m.Msg)

            {

                case 0x004A : // 处理消息                   

 

                    COPYDATASTRUCT mystr = new COPYDATASTRUCT();

                    Type mytype = mystr.GetType();

                    mystr = (COPYDATASTRUCT)m.GetLParam(mytype);

                    this .textBox1.Text = mystr.lpData;

                    break ;             

                default :

                    base .DefWndProc( ref    m); // 调用基类函数处理非自定义消息。

                    break ;

            }

        }

 

  [StructLayout(LayoutKind.Sequential)]

    public struct COPYDATASTRUCT

    {

        public IntPtr dwData;

        public int cbData;

        [MarshalAs(UnmanagedType.LPStr)]

        public string lpData;

    }

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值