c#进程之间通信

/*
 * 
 * 版本: 2.0.50727.3053 
 * 命名空间: IPCHelp
 * 文件名: ServerControl.cs
 * 
 * 创 建 人:zhouyz
 * 创建时间:2010-9-11 14:07:54 
 * 联系方式:http://www.cnblogs.com/zhouyz
 * 
 * 
 * 说明:
 * 
 * 修 改 人:
 * 联系方式:
 * 修改次数:
 * 修改时间:
 * 修改内容:
 * 
 * 
 * 
 */
using System;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;

namespace IPCHelp
{
    /// <summary>
    /// 进程消息传递
    /// </summary>
    public class IPCMsgHelp
    {
        private string _frmMessageName = "接收方窗体名";
        public IPCMsgHelp(string aFrmMessageName)
        {
            this._frmMessageName = aFrmMessageName.Trim();
        }
        public IPCMsgHelp()
        {
        }

        /// <summary>
        /// 发送消息
        /// </summary>
        /// <param name="aTitle">消息标题</param>
        /// <param name="aContent">消息内容</param>
        public void SendMessage(string aTitle, string aContent)
        {
            StringBuilder sbMsg = new StringBuilder();
            sbMsg.Append(DESEncrypt.Encrypt(aTitle));
            sbMsg.Append("╬");
            sbMsg.Append(DESEncrypt.Encrypt(aContent));
            int frm = FindWindow(null, _frmMessageName);
            if (frm == 0)
            {
                return;
            }
            byte[] arrayMsg = System.Text.Encoding.Default.GetBytes(sbMsg.ToString());
            int arrayLng = arrayMsg.Length;
            COPYDATASTRUCT cds;
            cds.DWData = (IntPtr)100;
            cds.Message = sbMsg.ToString();
            cds.DataLength = arrayLng + 1;
            SendMessage(frm, 0x004A, 0, ref cds);
        }

        /// <summary>
        /// 解析消息【放在protected override void DefWndProc(ref Message m)里面】
        /// </summary>
        /// <param name="m"></param>
        /// <returns></returns>
        public bool ResolveMsg(ref Message m)
        {
            switch (m.Msg)
            {
                case 0x004A:
                    COPYDATASTRUCT mystr = new COPYDATASTRUCT();
                    Type mytype = mystr.GetType();
                    mystr = (COPYDATASTRUCT)m.GetLParam(mytype);
                    string[] msgs = mystr.Message.Split('╬');
                    string title = DESEncrypt.Decrypt(msgs[0]);
                    string content = DESEncrypt.Decrypt(msgs[1]);
                    if (MsgAction != null)
                    {
                        MsgAction(title, content, new EventArgs());
                    }
                    return true;
                default:
                    return false;
            }
        }

        [ComVisible(true)]
        public delegate void MsgEventHandler(string sendTitle, string sendContent, EventArgs e);

        /// <summary>
        /// 产生消息事件
        /// </summary>
        public event MsgEventHandler MsgAction;

        [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 struct COPYDATASTRUCT
    {
        public IntPtr DWData;
        public int DataLength;
        [MarshalAs(UnmanagedType.LPStr)]
        public string Message;
    }
}

////////////////////////////加密解密/////////////////////////////

/*

 * 

 * 版本: 2.0.50727.3053 

 * 命名空间: IPCHelp

 * 文件名: DESEncrypt.cs

 * 

 * 创 建 人:zhouyz

 * 创建时间:2010-9-14 16:44:18 

 * 联系方式:http://www.cnblogs.com/zhouyz

 * 

 * 

 * 说明:

 * 

 * 修 改 人:

 * 联系方式:

 * 修改次数:

 * 修改时间:

 * 修改内容:

 * 

 * 

 * 

 */


using System;

using System.Security.Cryptography;

using System.Text;


namespace IPCHelp

{

    /// <summary>

    /// DES加密/解密类。

    /// </summary>

    public class DESEncrypt

    {

        public DESEncrypt()

        {

        }


        #region ========加密========


        /// <summary>

        /// 加密

        /// </summary>

        /// <param name="Text"></param>

        /// <returns></returns>

        public static string Encrypt(string Text)

        {

            return Encrypt(Text, "zhouyz");

        }

        /// <summary> 

        /// 加密数据 

        /// </summary> 

        /// <param name="Text"></param> 

        /// <param name="sKey"></param> 

        /// <returns></returns> 

        public static string Encrypt(string Text, string sKey)

        {

            DESCryptoServiceProvider des = new DESCryptoServiceProvider();

            byte[] inputByteArray;

            inputByteArray = Encoding.Default.GetBytes(Text);

            des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));

            des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));

            System.IO.MemoryStream ms = new System.IO.MemoryStream();

            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);

            cs.Write(inputByteArray, 0, inputByteArray.Length);

            cs.FlushFinalBlock();

            StringBuilder ret = new StringBuilder();

            foreach (byte b in ms.ToArray())

            {

                ret.AppendFormat("{0:X2}", b);

            }

            return ret.ToString();

        }

        #endregion

        #region ========解密========



        /// <summary>

        /// 解密

        /// </summary>

        /// <param name="Text"></param>

        /// <returns></returns>

        public static string Decrypt(string Text)

        {

            return Decrypt(Text, "zhouyz");

        }

        /// <summary> 

        /// 解密数据 

        /// </summary> 

        /// <param name="Text"></param> 

        /// <param name="sKey"></param> 

        /// <returns></returns> 

        public static string Decrypt(string Text, string sKey)

        {

            DESCryptoServiceProvider des = new DESCryptoServiceProvider();

            int len;

            len = Text.Length / 2;

            byte[] inputByteArray = new byte[len];

            int x, i;

            for (x = 0; x < len; x++)

            {

                i = Convert.ToInt32(Text.Substring(x * 2, 2), 16);

                inputByteArray[x] = (byte)i;

            }

            des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));

            des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));

            System.IO.MemoryStream ms = new System.IO.MemoryStream();

            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);

            cs.Write(inputByteArray, 0, inputByteArray.Length);

            cs.FlushFinalBlock();

            return Encoding.Default.GetString(ms.ToArray());

        }

        #endregion

    }

}

 


posted @ 2010-09-14 17:38  星释天狼  阅读(257)  评论(0)    收藏  举报