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; }
|
|