使用 MessengerAPI 控制 MSN Messenger

引入 MessengerAPI

在项目中添加 COM 引用 "Messenger API Type Library",注意该 COM 的文件路径应该是 "c:/program file/MSN Messenger/msnmsgr.exe"。如果不是可以使用下面的命令注册该 COM。
C:/WINDOWS/system32/URTTemp>regtlib.exe "c:/program files/msn messenger/msnmsgr.exe/2"

然后添加名字空间,创建 Messenger 对象。
using MessengerAPI;
// ...
MessengerClass msn = new MessengerClass();

1. 登录
// 登录 (我用 Windows Live Messenger 8 不起作用。晕~~~)
//msn.Signin(0, "abc@hotmail.com", "pasword");

// 自动登录 (使用你保存的用户名和密码自动登录)
//msn.AutoSignin();

// 注销
//msn.Signout();

2. 主窗体

可显示、关闭主窗体,获取或设置主窗体位置、大小。
IMessengerWindow mainForm = msn.Window as IMessengerWindow;
mainForm.Show();
//mainForm.Close();
//mainForm.Left = 1;
//mainForm.Top = 1;
//mainForm.Height = 100;
//mainForm.Width = 100;

3. 个人信息及状态

本地用户名称、登录名为只读,没有接口设置个人状态信息。
msn.MyStatus = MISTATUS.MISTATUS_BUSY; // 设置状态
Console.WriteLine(msn.MyFriendlyName); // 名称
Console.WriteLine(msn.MySigninName); // 登录名(邮件地址)

4. 联系人组

创建组
msn.CreateGroup("我的同事", ((IMessengerServices)msn.Services).PrimaryService);

联系人组
IMessengerGroups groups = msn.MyGroups as IMessengerGroups;
foreach (IMessengerGroup group in groups)
{
  Console.WriteLine(group.Name);

  // 删除组
  if (group.Name == "我的同事") groups.Remove(group);

  // 显示该组下所有联系人
  foreach (IMessengerContact c in (IMessengerContacts)group.Contacts)
    Console.WriteLine("/t{0}", c.SigninName);
}

5. 联系人

添加联系人。下面的代码将打开添加联系人对话框,可以使用默认联系人地址,也可以为null。
msn.AddContact(0, "abc@hotmail.com");

联系人列表
IMessengerContacts contacts = msn.MyContacts as IMessengerContacts;
foreach (IMessengerContact contact in contacts)
{
  Console.WriteLine("{0};{1};{2};{3}", contact.FriendlyName, contact.SigninName, contact.Status, contact.Blocked);

  // 删除联系人
  if (contact.SigninName == "abc@hotmail.com") contacts.Remove(contact);
}

获取联系人对象 (在很多操作中需要使用联系人对象作为参数)
IMessengerContact contact = msn.GetContact("abc@hotmail.com", msn.MyServiceId) as IMessengerContact;

6. 发送消息

MessengerAPI 取消了一些功能,其中就包括发送消息和消息事件。我们可以使用 System.Windows.Forms.SendKeys 向聊天窗口发送按键来完成消息发送。
IMessengerContact contact = msn.GetContact("abc@hotmail.com", msn.MyServiceId) as IMessengerContact;

if (contact != null)
{
  // 打开聊天窗口
  IMessengerConversationWnd dialog = msn.InstantMessage(contact) as IMessengerConversationWnd;

  dialog.Show(); // 确保聊天窗口为当前活动窗口。
  //Thread.Sleep(1000); // 在 ConsoleApplication 中适当延迟,否则 SendKeys 好像时灵时不灵。

  string s = "Hello, World! " + DateTime.Now.ToString();
  SendKeys.SendWait(s); // 发送消息按键。
  SendKeys.SendWait("{ENTER}"); // 回车发送。

  // 邀请其他人加入
  //dialog.AddContact(msn.GetContact("xxx@hotmail.com", msn.MyServiceId));

  // 查看当前聊天联系人列表
  //foreach (IMessengerContact c in (IMessengerContacts)dialog.Contacts)
  //{
  //  Console.WriteLine(c.SigninName);
  //}
  
  // 关闭聊天窗口  
  //dialog.Close();
}

7. 其他
// 打开音视频设置窗口
//msn.MediaWizard(0);

// 打开当前登录关联的 Hotmail 邮箱。
//msn.OpenInbox();

// 打开选项窗口
//msn.OptionsPages(0, MOPTIONPAGE.MOPT_ACCOUNTS_PAGE);

// 获取文件保存目录
//Console.WriteLine(msn.ReceiveFileDirectory);

// 打开 Hotmail 网页,给指定联系人写邮件。
//msn.SendMail(contact);

// 开启视频通讯
//msn.StartVideo(contact);

// 开启音频通讯
//msn.StartVoice(contact);

// 查看联系人档案文件
//msn.ViewProfile(contact);

8. 事件

事件使用比较简单,看名称就知道干什么用的。
public event OnAppShutdown;
public event OnContactAddedToGroup;
public event OnContactBlockChange;
public event OnContactFriendlyNameChange;
public event OnContactListAdd;
public event OnContactListRemove;
public event OnContactPagerChange;
public event OnContactPhoneChange;
public event OnContactPropertyChange;
public event OnContactRemovedFromGroup;
public event OnContactStatusChange;
public event OnEmoticonListChange;
public event OnGroupAdded;
public event OnGroupNameChanged;
public event OnGroupRemoved;
public event OnIMWindowContactAdded;
public event OnIMWindowContactRemoved;
public event OnIMWindowCreated;
public event OnIMWindowDestroyed;
public event OnMyFriendlyNameChange;

// 本地用户更改显示图片时触发。
public event OnMyPhoneChange;

public event OnMyPropertyChange;

// 本地用户改变状态时触发(包括与服务连接等系统状态)。
public event OnMyStatusChange;

// 本地用户登录时触发。
public event OnSignin;

// 本地用户注销时触发。
public event OnSignout;

// 关联邮箱接收到新的未读邮件时触发。
public event OnUnreadEmailChange;

----------

使用以上这些功能只能做些依赖客户端的小玩意,如果要开发一个类似 XiaoI 那样的群恐怕要使用 DotMSN 才行。另外,还可以考虑使用 APIHook 进行一些更高级的功能开发。  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C#中使用Messenger Code识别功能,可以通过调用Facebook提供的Messenger Code识别API实现。 首先,需要使用HttpClient类发送HTTP请求来调用Messenger Code识别API。例如,可以使用以下代码: ```csharp using System; using System.Net.Http; using System.Threading.Tasks; namespace MessengerCodeRecognizer { class Program { static async Task Main(string[] args) { string pageAccessToken = "YOUR_PAGE_ACCESS_TOKEN"; string imageUrl = "https://www.example.com/messenger_code.jpg"; // 替换为需要识别的Messenger Code图片URL string url = $"https://graph.facebook.com/v10.0/me/messenger_codes?access_token={pageAccessToken}"; string requestBody = $"{{\"image_url\":\"{imageUrl}\"}}"; using (HttpClient httpClient = new HttpClient()) { HttpResponseMessage response = await httpClient.PostAsync(url, new StringContent(requestBody)); if (response.IsSuccessStatusCode) { string responseString = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseString); // 返回的是解析后的Messenger Code数据 } else { Console.WriteLine("Failed to recognize the Messenger Code."); } } } } } ``` 在上面的代码中,将YOUR_PAGE_ACCESS_TOKEN替换为你的Page Access Token,将imageUrl替换为你需要识别的Messenger Code图片的URL。运行程序后,将会返回解析后的Messenger Code数据。 请注意,Messenger Code识别API目前仅支持解析包含ref参数的Messenger Code。如果需要识别其他类型的Messenger Code,可以使用第三方的二维码识别库,例如Zxing。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值