private void SendData2(IntPtr hWnd, int id, queueData qData) { COPYDATASTRUCT2 data = new COPYDATASTRUCT2(); data.dwData = id; // 3; // whatever value (have to match receiver end) data.cbData = 256; //System.Runtime.InteropServices.Marshal.SizeOf(UserData2);// size of UserData struct UserData2 userData = new UserData2(); if (qData.sIP.Length > 240) { qData.sIP = qData.sIP.Substring(0, 240); } userData.sIP = qData.sIP; userData.iPingCount = qData.iPingCount; userData.iPingReplies = qData.iPingReplies; userData.iPingReplyTime = qData.iPingReplyTime; userData.iPingTimeout = qData.iPingTimeout; //copy data to unmanaged pointers data.lpData = Marshal.AllocCoTaskMem(data.cbData); Marshal.StructureToPtr(userData, data.lpData, false); IntPtr lpData = Marshal.AllocCoTaskMem(Marshal.SizeOf(data)); Marshal.StructureToPtr(data, lpData, false); Message msg1 = Message.Create(hWnd, WM_COPYDATA, lpData, lpData); MessageWindow.SendMessage(ref msg1); Marshal.FreeCoTaskMem(data.lpData); Marshal.FreeCoTaskMem(lpData); }
// Message受信 protected override void WndProc(ref Message m) { if (m.Msg == WM_MY_WND) { if ((int)(m.WParam) == 0x0001) { textBox1.Text = "Pushed button1"; } if ((int)(m.WParam) == 0x0002) { textBox1.Text = "Pushed button2"; } } if (m.Msg == WM_COPYDATA) { if ((int)(m.WParam) == 0x0000) { COPYDATASTRUCT st = new COPYDATASTRUCT(); st = (COPYDATASTRUCT)m.GetLParam(typeof(COPYDATASTRUCT)); textBox1.Text = st.lpData; } if ((int)(m.WParam) == 0x0001) { COPYDATASTRUCT2 st = new COPYDATASTRUCT2(); st = (COPYDATASTRUCT2)m.GetLParam(typeof(COPYDATASTRUCT2)); msgData dt = new msgData(); dt = (msgData)st.lpData; textBox1.Text = dt.name; } } base.WndProc(ref m); }
protected override void WndProc(ref Message m) { int iMsg = m.Msg; System.Diagnostics.Debug.WriteLine("WndProc called..."); switch (iMsg) { case WM_COPYDATA: System.Diagnostics.Debug.WriteLine("WndProc sending notification ..."); // extract the own data from the Windows Message m //COPYDATASTRUCT data = (COPYDATASTRUCT)Marshal.PtrToStructure(m.LParam, typeof(COPYDATASTRUCT)); COPYDATASTRUCT2 data = (COPYDATASTRUCT2)Marshal.PtrToStructure(m.LParam, typeof(COPYDATASTRUCT2)); //UserData userData = (UserData)Marshal.PtrToStructure(data.lpData, typeof(UserData)); UserData2 userData = (UserData2)Marshal.PtrToStructure(data.lpData, typeof(UserData2)); //this._bgThread2.NotifyData(data.dwData, userData.msg); this._bgThread2.NotifyData(userData); m.Result = IntPtr.Zero; break; default: base.WndProc(ref m); break; } }
// SendMEssage WM_COPYDATA ( data is struct msgData ) private void button4_Click(object sender, EventArgs e) { // COPYDATASTRUCT2 に入れる data用構造対用意 msgData msgdata = new msgData(); msgdata.no = 1; msgdata.name = "msgData.name"; // WM_COPYDATA用構造体に struct msgData を設定 COPYDATASTRUCT2 cds = new COPYDATASTRUCT2(); cds.dwData = IntPtr.Zero; cds.lpData = msgdata; cds.cbData = Marshal.SizeOf(msgdata); // Message送信 IntPtr myh = Process.GetCurrentProcess().MainWindowHandle; SendMessage(myh, WM_COPYDATA, 1, ref cds); }
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, ref COPYDATASTRUCT2 lParam);
// Message受信 protected override void WndProc(ref Message m) { if (m.Msg == WM_MY_WND) { if ( (int)(m.WParam) == 0x0001 ) { textBox1.Text = "Pushed button1"; } if ((int)(m.WParam) == 0x0002) { textBox1.Text = "Pushed button2"; } } if (m.Msg == WM_COPYDATA) { if ((int)(m.WParam) == 0x0000) { COPYDATASTRUCT st = new COPYDATASTRUCT(); st = (COPYDATASTRUCT)m.GetLParam(typeof(COPYDATASTRUCT)); textBox1.Text = st.lpData; } if ((int)(m.WParam) == 0x0001) { COPYDATASTRUCT2 st = new COPYDATASTRUCT2(); st = (COPYDATASTRUCT2)m.GetLParam(typeof(COPYDATASTRUCT2)); msgData dt = new msgData(); dt = (msgData)st.lpData; textBox1.Text = dt.name; } } base.WndProc(ref m); }
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, ref COPYDATASTRUCT2 lParam);
// SendMEssage WM_COPYDATA ( data is struct msgData ) private void button4_Click(object sender, EventArgs e) { // COPYDATASTRUCT2 に入れる data用構造対用意 msgData msgdata = new msgData(); msgdata.no = 1; msgdata.name = "msgData.name"; // WM_COPYDATA用構造体に struct msgData を設定 COPYDATASTRUCT2 cds = new COPYDATASTRUCT2(); cds.dwData = IntPtr.Zero; cds.lpData = msgdata; cds.cbData = Marshal.SizeOf(msgdata); // Message送信 IntPtr myh = Process.GetCurrentProcess().MainWindowHandle; SendMessage(myh, WM_COPYDATA, 1, ref cds); }
private void SendData2(IntPtr hWnd, int id, queueData qData) { COPYDATASTRUCT2 data = new COPYDATASTRUCT2(); data.dwData = id;// 3; // whatever value (have to match receiver end) data.cbData = 256; //System.Runtime.InteropServices.Marshal.SizeOf(UserData2);// size of UserData struct UserData2 userData = new UserData2(); if (qData.sIP.Length > 240) { qData.sIP = qData.sIP.Substring(0, 240); } userData.sIP = qData.sIP; userData.iPingCount = qData.iPingCount; userData.iPingReplies = qData.iPingReplies; userData.iPingReplyTime = qData.iPingReplyTime; userData.iPingTimeout = qData.iPingTimeout; //copy data to unmanaged pointers data.lpData = Marshal.AllocCoTaskMem(data.cbData); Marshal.StructureToPtr( userData, data.lpData, false); IntPtr lpData = Marshal.AllocCoTaskMem(Marshal.SizeOf(data)); Marshal.StructureToPtr(data, lpData, false); Message msg1 = Message.Create(hWnd, WM_COPYDATA, lpData, lpData); MessageWindow.SendMessage(ref msg1); Marshal.FreeCoTaskMem(data.lpData); Marshal.FreeCoTaskMem(lpData); }