Connecting to MSN messenger with the MSNP9 protocol
http://www.codeproject.com/csharp/ConnectingToMSN.asp
http://www.codeproject.com/csharp/ConnectingToMSN.asp
解决方案 »
- 数据库修改
- 求教 SQL 的 LIKE 表达式
- 采用MD5时的一个问题
- 诡异的事情
- 在HTML页里插入<!--#include file=comm\title.inc-->后出现,所插入部分出现乱码,请大家帮忙!(在线等)
- 控件datagrid中的一个列为数据库表中的字符串型字段str1,要求显示str2=fun(str1)到datagrid列上,如何做?fun(str1)是对str1做处理的一
- 时间不能以2011/1/30的方式提交,只能以2011/01/30的方式,必须在月上多加一个“0”?
- datalist 在页脚里控件事件应该怎么触发
- 急问大家关于sql server express的连接字符串问题。谢谢各位!
- 高分求asp.net导出到excel的例子!
- 又借别人分来问问题了(dama2003),巨烦人的问题-》TextBox控件
- 如何把webform子页面的参数回传到父页面,急!!!!
adonis2222(翻译)
关键字 Vs.net,Msn,外接程序
出处 http://www.codeproject.com
作者:杨忠勋
专业:计算机软件开发及应用
语言能力:TOFEL633 GRE2140
Email:[email protected] 把MSN嵌入到Vs.net中使用?是不是听起来很奇妙?但这是真的,下面的步骤就逐步的教你如何将MSN嵌入到Vs.net中使用。引用(referrence)由于Vs.net中存在某个bug,在这里无法直接引用Messenger ActiveX组件。你需要手动修改由TLBImp生成的代码中的两个方法,然后重新编译,具体方法如下:1 使用Tlbimp.exe生成一个Messenger Interop组件 tlbimp msmgs.exe /out:Messenger.dll (缺省路径:C:\Program Files\Messenger) 2 反汇编此Interop组件,然后将其保存为IL文件: ildasm /text Messenger.dll /out:Messenger.il 3 使用任一文本编辑器打开此IL文件,然后更改如下代码 (将类的private属性改为public): 更改.class private auto ansi sealed DMsgrObjectEvents_SinkHelper
为 .class public auto ansi sealed DMsgrObjectEvents_SinkHelper 更改.class private auto ansi sealed DMsgrObjectEvents_EventProvider 为 .class public auto ansi sealed DMsgrObjectEvents_EventProvider 4 编译此IL文件 ilasm /dll Messenger.il 5 现在我们就可以在工程里引用编译后的dll文件了创建外接程序 (creating an add-in)选择 新建项目\其他项目\扩展性项目\Visual Studio .NET 外接程序,出现向导对话框。1 选择“使用Visual C#创建外接程序” 2 选择使用此外接程序的开发环境,我两个都选择了。3 给你的外接程序起个好听的名字。4 根据你的爱好进行选择。5 是否生成“帮助”菜单中的“关于”信息。6 选择“完成”创建工具窗口 我们需要把这个外接程序做成一个工具窗口。如何来做呢?我们可以使用微软提供的一个在.NET中制作工具窗口的例子。 1 引用由VSUserControlHost 生成的ActiveX控件。2 在此外接程序中的Connect.cs文件中的OnConnection方法中添加以下代码1. object objTemp = null;
2. string guidstr = "{716238D9-8ED3-48aa-A7A0-A73CA6FDF1EF}";
3.
4. EnvDTE.Window windowToolWindow =
5. applicationObject.Windows.CreateToolWindow (
6. addInInstance,
7. "VSUserControlHost.VSUserControlHostCtl",
8. "Messenger", guidstr, ref objTemp);
9.
10. windowToolWindow.Visible = true;
11.
12. VSUserControlHostLib.IVSUserControlHostCtl objControl =
13. (VSUserControlHostLib.IVSUserControlHostCtl)objTemp;
14.
15. objControl.HostUserControl(
16. System.Reflection.Assembly.GetExecutingAssembly().Location,"MsgAddin.HostUserControl");
MSN编程 现在我们就进入到了对MSN本身的编程了。在“项目”中选择“添加用户控件”。用户控件的处理方式和windows 窗体的处理方式是一样的。然后在此“用户控件”上添加一个”发送”按钮,“编辑”框及一个ListView。我们需要用到用户控件类中的两个成员: 初始化 Messenger.MsgrObjectClass msg;
Messenger.IMsgrUser CurrentUser;
Messenger.IMsgrUsers Users;
在构造函数中添加如下代码msg = new Messenger.MsgrObjectClass();
try
{
// 检查MSN是否已经登录
if(msg.LocalState == Messenger.MSTATE.MSTATE_OFFLINE)
{
Messenger.MessengerAppClass app =
new Messenger.MessengerAppClass();
app.IMessengerApp_LaunchLogonUI();
// 等待登录完成
while(msg.LocalState != Messenger.MSTATE.MSTATE_ONLINE)
System.Threading.Thread.Sleep(5000);
}
// 获取用户列表
Users = msg.get_List(Messenger.MLIST.MLIST_CONTACT);
for(int i = 0; i < Users.Count; i++)
{
Messenger.IMsgrUser u = Users.Item(i);
userList.Items.Add(new ListViewItem(u.FriendlyName, GetStateImage(u.State)));
}
// 获取新信息通知
msg.OnTextReceived +=
new Messenger.DMsgrObjectEvents_OnTextReceivedEventHandler
(this.OnTextRecieved);
// 获取用户状态改变通知
msg.OnUserStateChanged += new
Messenger.DMsgrObjectEvents_OnUserStateChangedEventHandler
(this.OnUserStateChanged);
}
// 异常处理
catch(Exception e)
{
MessageBox.Show(e.Message);
}