日期:2014-05-18 浏览次数:20986 次
protected override void DefWndProc(ref System.Windows.Forms.Message m) { switch (m.Msg) { case WM_COPYDATA: //your process break; default: base.DefWndProc(ref m); break; } }
------解决方案--------------------
问题一:开辟内存空间何解?你不是已经有了一个服务进程么?这个服务进程对访问它的其他客户端进程而言,不就是一段可以共享的内存空间么?
问题二:进程间通讯我比较习惯用的是windows Message。至于数据最新,这个你自己设计相关逻辑去更新你服务进程中的数据。
给你一个winMsg例子做参考
Server发送数据
private static void YourSendMessage(string strSendingData) { //调用发送消息方法 sendMessage(strSendingData); } const int WM_COPYDATA = 0x004A; //发送消息 [DllImport("User32.dll", EntryPoint = "SendMessage")] private static extern int SendMessage( int hWnd, int Msg, int wParam, ref COPYDATASTRUCT lParam ); //通过窗口标题找到窗口 [DllImport("User32.dll", EntryPoint = "FindWindow")] private static extern int FindWindow(string lpClassName, string lpWindowName); public static void sendMessage(string strSendingMsg) { string winName = ""; //你想要发送的窗口标题 int window_handler = FindWindow(null, @winName); if (window_handler != 0) { byte[] byt = System.Text.Encoding.Default.GetBytes(strSendingMsg); int len = byt.Length; COPYDATASTRUCT cds; cds.dwData = (IntPtr)100; cds.lpdata = strSendingMsg; cds.cbData = len + 1; SendMessage(window_handler, WM_COPYDATA, 0, ref cds); } } public struct COPYDATASTRUCT { public IntPtr dwData; public int cbData; [MarshalAs(UnmanagedType.LPStr)] public string lpdata; }
------解决方案--------------------
下面例子可以直接运行(需要VS2010,因为MemoryMappedFile是.net4才有)。
编译通过后,先运行