日期:2014-05-18 浏览次数:21121 次
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才有)。
编译通过后,先运行