
这个用进程调用,在执行的窗体中进度信息时乱码,如果直接调用就没问题了。
switch (m.Msg)
{
case WM_TOTALLENGHT:
if ((int)m.WParam == SC_CLOSE) return;
label3.Text = "句柄:"+this.Handle.ToString();
lock (obj)
{
ec.UpdateXML(this.Handle.ToString(), "忙碌");
}
maxNum = (int)m.WParam;
progressBar1.Maximum = maxNum;
; break;
case WM_ACTUALLENGTH:
if ((int)m.WParam == SC_CLOSE) return;
if (m.WParam.ToInt32() <= maxNum)
{
this.progressBar1.Value = m.WParam.ToInt32();
if (m.WParam.ToInt32() >= maxNum)
{
lock (obj)
{
ec.UpdateXML(this.Handle.ToString(), "空闲");
}
//progressBar1.Value = 0;
}
}
; break;
case WM_FILENUMBER: ; break;
case WM_CURRENTNUMBER: ; break;
case WM_Message:
//label2.Text = "信息" + Marshal.PtrToStringAnsi(m.LParam) + Environment.NewLine;
byte[] buffer = Encoding.GetEncoding("UTF8").GetBytes(Marshal.PtrToStringAnsi(m.LParam));
label2.Text = "信息:"+Encoding.UTF8.GetString(buffer);
; break;
case WM_COPYDATA: //使用此地址不同进程传递字符串消息
MSGIS.Debug.WinApi.cDll.COPYDATASTRUCT myStr = new MSGIS.Debug.WinApi.cDll.COPYDATASTRUCT();
Type myType = myStr.GetType();
myStr = (MSGIS.Debug.WinApi.cDll.COPYDATASTRUCT)m.GetLParam(myType);
label4.Text ="信息:"+ myStr.lpData; ; break;
}
------解决思路----------------------
检查一下你CS文件的编码格式,有可能会有影响。
------解决思路----------------------
//byte[] buffer = Encoding.GetEncoding("UTF8").GetBytes(Marshal.PtrToStringAnsi(m.LParam));
//label2.Text = "信息:"+Encoding.UTF8.GetString(buffer);
label2.Text = "信息" + Marshal.PtrToStringUni(m.LParam) + Environment.NewLine;