dotMSN 2.0.2 非常好用,还提供源码和使用说明,真是好人啊,可以到这里下载
http://www.xihsolutions.net/dotmsn/
PS:
看到国内某些软件,点大的东西,一点技术含量都没,还收费,还捆绑垃圾!!!
但是,dotMSN 2.0.2 的友好性操作不如,1.2 版的,所以我就对它动点小手术,为这个工程多开几个方便之门。
A:
首先变化最大的是,命名空间,在原来的 “dotMSN” 前面加了个 “XihSolutions.”,这是开发者的名字,流下一个名字是应该的,综观全码,除了注释声明,就这里有他的名字,很干净。
PS:
这里有啰嗦几句了,有些人写发消息类的东西总喜欢在信息后面拖个作者的名字,何必呢。。
如果只是个人用,如果你觉得麻烦,
1,你可以全文搜索,将,“XihSolutions.DotMSN” 替换为 “DotMSN”,记得选在整个项目中替换,搜索隐藏文本。
2,在 dotMSN2 的右键属性中将程序集名称和默认空间名也改了。
PS:
可不要加上自己的名字啊,这是道德问题!!有些人就喜欢搬别人的东西硬说是自己的。
修改这个后,最好不要发布了,最好只是自己用
B:
消息发送函数
SendTextMessage(
TextMessage
message)
只接受 TextMessage 类型的参数,呵呵,没以前的方便了,发个纯字符串信息,还得新建各类型。
所以我们要来重载它
在 SB9MessageHandler.cs 文件中找到上述函数。在它下面建立一个如下的函数
public virtual void SendTextMessage(string message){ TextMessage Msg = new TextMessage(message); SendTextMessage(Msg);} 这样就能直接发送字符串了。
PS:
记得将上面的注释也拷下来,免得提示缺少什么的。下面也相同,都要有说明的。
C:
全局消息初始化函数 private DotMSN.Messenger messenger = new Messenger();
默认是空参数的,可以给他加个有参数的,主要是免去输入默认的
messenger.Credentials.ClientID = "msmsgs@msnmsgr.com";
messenger.Credentials.ClientCode = "Q1P7W2E4J9R8U3S5";
方法如下:
定位到 Messenger.cs 文件,修改如下:
/// <summary>/// Basic constructor to instantiate a Messenger object./// </summary>///public Messenger(){ nsMessageProcessor = Factory.CreateNameserverProcessor(); nsMessageHandler = Factory.CreateNameserverHandler(); p2pHandler = Factory.CreateP2PHandler(); p2pHandler.NSMessageHandler = nsMessageHandler; // set the events nsMessageHandler.SBCreated += new SBCreatedEventHandler (nsMessageHandler_SBCreated); nsMessageProcessor.ConnectionClosed += new EventHandler (nsMessageProcessor_ConnectionClosed); p2pHandler.SessionCreated += new SessionChangedEventHandler (p2pHandler_SessionCreated); p2pHandler.SessionClosed += new SessionChangedEventHandler (p2pHandler_SessionClosed); Credentials.ClientID = "msmsgs@msnmsgr.com"; Credentials.ClientCode = "Q1P7W2E4J9R8U3S5";}/// <summary>/// Basic constructor to instantiate a Messenger object./// </summary>///public Messenger(string ClientID, string ClientCode){ nsMessageProcessor = Factory.CreateNameserverProcessor(); nsMessageHandler = Factory.CreateNameserverHandler(); p2pHandler = Factory.CreateP2PHandler(); p2pHandler.NSMessageHandler = nsMessageHandler; // set the events nsMessageHandler.SBCreated += new SBCreatedEventHandler (nsMessageHandler_SBCreated); nsMessageProcessor.ConnectionClosed += new EventHandler (nsMessageProcessor_ConnectionClosed); p2pHandler.SessionCreated += new SessionChangedEventHandler (p2pHandler_SessionCreated); p2pHandler.SessionClosed += new SessionChangedEventHandler (p2pHandler_SessionClosed); Credentials.ClientID = ClientID; Credentials.ClientCode = ClientCode;}
D:
连接函数 .Connect(),没有参数的,加个参数,可以一起设置帐号和密码,改后,就可以这样调用咯
messenger.Connect(accountTextBox.Text, passwordTextBox.Text);
具体修改如下:
/// <summary>/// Connect to the messenger network./// </summary>///public virtual void Connect(){ Connect(credentials.Account, credentials.Password);}/// <summary>/// Connect to the messenger network./// </summary>///public virtual void Connect(string Account, string Password){ if (Account.Length != 0 && credentials.Account != Account) credentials.Account = Account; if (Password.Length != 0 && credentials.Password != Password) credentials.Password = Password; if (nsMessageProcessor == null) 原来的,没有改变}
E:
限制消息长度,如果发送消息大于 1668字节,就会导致程序崩溃,所以限制文本消息程度为 1024 字节PS:官方的消息限定为 800 字节
public TextMessage(string message){ if (System.Text.Encoding.Default.GetBytes(message).Length > 1024) { //byte[] tmpByte = System.Text.Encoding.Default.GetBytes(message,0,1281); Text = System.Text.Encoding.Default.GetString(System.Text.Encoding.Default.GetBytes(message), 0, 1024+1); Text = Text.Remove(Text.Length - 1); } else Text = message;} 记过以上修改,操作就方便些了。