场景如下:
将系统中的日志在启动画面中显示,如是想到用消息机制。
首先定义消息,这个不表。
然后是引用windowsApp: [DllImport("User32.dll", EntryPoint = "SendMessageA")]
private static extern int SendMessage(
int hWnd, // handle to destination window
int Msg, // message
int wParam, // first message parameter
string lParam // second message parameter
);
private static extern int FindWindow(string lpClassName, string lpWindowName); public static void SendMsgToFlashForm(int MSG, IntPtr wParam, string lParam)
{
int WINDOW_HANDLER = FindWindow(null, @"XXXX");
if (WINDOW_HANDLER == 0)
{
throw new Exception("Could not find Main window!");
}
SendMessage(WINDOW_HANDLER, MSG, wParam, lParam);
}
调用地方: MessageController.SendMsgToFlashForm(MessageManager.MyMessage.WM_SHOW_PROCESS, IntPtr.Zero, "系统开始创建核心对象");
接收的地方: try
{
switch (m.Msg)
{
case Utility.CommonUtility.MessageManager.MyMessage.WM_SHOW_PROCESS:
{
label2.Text = m.LParam.ToString();
break;
}
default:
base.DefWndProc(ref m);//调用基类函数处理非自定义消息。
break;
}
}现在问题是:
在接收的地方,总是收不到正确的东西,例如,我应该在这里收到是字符串的内容,结果总是返回一组数字!!为什么?麻烦周末有达人帮解决!!
将系统中的日志在启动画面中显示,如是想到用消息机制。
首先定义消息,这个不表。
然后是引用windowsApp: [DllImport("User32.dll", EntryPoint = "SendMessageA")]
private static extern int SendMessage(
int hWnd, // handle to destination window
int Msg, // message
int wParam, // first message parameter
string lParam // second message parameter
);
private static extern int FindWindow(string lpClassName, string lpWindowName); public static void SendMsgToFlashForm(int MSG, IntPtr wParam, string lParam)
{
int WINDOW_HANDLER = FindWindow(null, @"XXXX");
if (WINDOW_HANDLER == 0)
{
throw new Exception("Could not find Main window!");
}
SendMessage(WINDOW_HANDLER, MSG, wParam, lParam);
}
调用地方: MessageController.SendMsgToFlashForm(MessageManager.MyMessage.WM_SHOW_PROCESS, IntPtr.Zero, "系统开始创建核心对象");
接收的地方: try
{
switch (m.Msg)
{
case Utility.CommonUtility.MessageManager.MyMessage.WM_SHOW_PROCESS:
{
label2.Text = m.LParam.ToString();
break;
}
default:
base.DefWndProc(ref m);//调用基类函数处理非自定义消息。
break;
}
}现在问题是:
在接收的地方,总是收不到正确的东西,例如,我应该在这里收到是字符串的内容,结果总是返回一组数字!!为什么?麻烦周末有达人帮解决!!
用StringBuild
private static extern int SendMessage(
int hWnd, // handle to destination window
int Msg, // message
int wParam, // first message parameter
StringBuild lParam // second message parameter
);
[DllImport("User32.dll")]
private static extern int SendMessage(int hWnd, int Msg, int wParam, string lParam);
private const int WM_USER = 0x0400;
private void button1_Click(object sender, EventArgs e)
{
SendMessage((int)Handle, WM_USER + 10, 0, "Zswang 路过");
}protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_USER + 10:
MessageBox.Show(Marshal.PtrToStringAnsi(m.LParam));
break;
}
base.WndProc(ref m);
}
跨进程得用WM_COPYDATA消息
好像不止一次帮我解决问题,!