基于Skype API开发外壳程序入门

简介: SkypeShell是一个Skype的外壳增强插件。这个程序是独立的EXE程序,它连接Skype API成为Skype的监听者。
SkypeShell是一个Skype的外壳增强插件。这个程序是独立的EXE程序,它连接Skype API成为Skype的监听者。实现了三个功能,1:显示Skype的状态信息;2:当Skype用户离开时有消息自动回复的功能;3:设置可以滚动显示多个签名档。
SkypeShell是在VC6下开发的一个MFC程序,它通过Skype4COM组件连接Skype。虽然VC也能支持直接使用这类COM组件,但是要更灵活地使用它,最好通过VC Class 
Wizard生成一个"包裹"类(wrapper)。具体方法如下:
1.下载Skype4COM.dll,注册到Windows系统中。命令为regsvr32 Skype4COM.dll
2.在VC的资源视图中,打开对话框界面,在对话框中点击右键菜单“Insert ActvieX Control”,选择“Skype Class”加入到对话框中。
3.修改Skype控件的ID为ID_SKYPE,按Ctrl+W打开Class Wizard,选择“Member Variables”,双击ID_SKYPE, 此时弹出对话框提示是否自动生成Wrapper Classes。点击是,并关联这个控件到CSkype对象即可使用。
接下来,要跟Skype建立连接,就可以调用CSkype对象的Attach方法,它有两个参数:协议版本号与连接方式,我们使用的是Attach(6,FALSE),即协议版本号为6,施行的是异步的连接方式,即非阻塞的,程序可以继续往前执行不用等待连接成功后才继续往前执行。

 
图1 与Skype建立连接的过程各种事件的函数调用
     
如上图1所示,首先①,调用Attach 方法:m_ctrlSkype.Attach(6, FALSE),接下来整个过程是这样的,在Skype客户端弹出一个对话框提示是否允许本程序操作Skype, 这时候会激发一个事件AttachmentStatus,程序可以调用它的处理函数:OnAttachmentStatusSkype,我们可以取得它的Satus:    apiAttachPendingAuthorization = 1,表示本程序正等待客户的允许对它的使用,这时候我们可以针对这个回调函数进行编程,即如下代码所示:
//客户端程序与Skype连接情况的回调函数
void CSkypeShellDlg::OnAttachmentStatusSkype(long Status) 
{
  //获取父窗口的句柄从而改变标题
  CWnd * pOwnerWnd = GetParent();    
  switch(Status)
  {            
  /*
  apiAttachUnknown = -1,
  apiAttachSuccess = 0,
  apiAttachPendingAuthorization = 1,
  apiAttachRefused = 2,
  apiAttachNotAvailable = 3,
  apiAttachAvailable = 4
         */
    case 1:
         pOwnerWnd->SetWindowText("SkypeShell  与Skype正建立连接...");
         break;
case 2:
……
  }
}
当Skype用户允许本程序对其使用时,进入2.1,由于允许外部程序跟Skype建立连接,这时候必须检测当前的Skype用户状态,所以会激发UserStatus事件,调用其回调函数:OnUserStatusSkype,发现这时候的Status为cusOffline = 0,即用户为离线状态,虽然是离线,本程序跟Skype程序却已经成功建立了连接,这时候又激发了OnAttachmentStatusSkype回调函数,查看Stauts,可以知道apiAttachSuccess = 0,即成功建立了连接。
在本程序里,获得Skype程序的状态,主要是通过下面的回调函数:
与Skype成功连接后如果用户的状态有所改变将会激发UserStatus事件,从而调用此回调函数
void CSkypeShellDlg::OnUserStatusSkype(long Status) 
{
/*
enum {
cusUnknown = -1,
cusOffline = 0, //离线     
cusOnline = 1,  //在线
cusAway = 2,   //离开
cusNotAvailable = 3, //没空
cusDoNotDisturb = 4,  //请勿打扰       
cusInvisible = 5,             //隐身
cusLoggedOut = 6,         //退出
cusSkypeMe = 7             //使用SkypeMe
} TUserStatus;
  */
  CWnd* pOwnerWnd = GetParent();                   
  switch(Status) {
         //离线     
  case  0:
         {
                pOwnerWnd->SetWindowText("SkypeShell
已连接Skype("+m_ctrlSkype.GetVersion()+")"+m_ctrlSkype.GetCurrentUser().GetFullName()+" 离线");
                //更改与Skype的连接状态为已连接上
                theConfig.m_bIsConnectSuccess = TRUE;
                break;
         }
……
         }
以上是有关本程序在操作Skype之前如何跟它建立连接,及它的状态改变时如何调用
各种回调函数的一个过程。
在成功与Skype建立连接,及始终保持连接的前提下,外部程序可以操作Skype的各各信息,因为Skype4COM API,封装了Skype API,我们使用起来很方便,比如说,本外壳程序的滚动个性签名功能,就是简单的使用了Skype4COM API:
//滚动个性签名集合中的个性签名
           m_ctrlSkype.GetCurrentUserProfile().SetMoodText(theConfig.m_cMoods[m_nCurMoodIndex].m_strContent.c_str());       
m_ctrlSkype是封装成的类CSkype对象,用来表示模拟Skype的各种功能,如上面的,改变用户个性签名。查看Skype4COM API的说明文档,我们可以找到其它功能都是如何模拟及使用的。
除此之外,本外壳程序还用到了另外一个Skype4COM AP中其它类对象,如 CChat,它是来模拟一个聊天会话,在这里我们主要是用来实现当Skype用户处于离开状态是留言自动回复的功能。
//Skype的回调函数,当用户收到或者发送消息时都会激活MessageStatus事件调
//用这个函数
void CSkypeShellDlg::OnMessageStatusSkype(LPDISPATCH pMessage, long Status) 
{
/*
enum {
cusUnknown = -1,
cusOffline = 0,
cusOnline = 1,
cusAway = 2,
cusNotAvailable = 3,
cusDoNotDisturb = 4,
cusInvisible = 5,
cusLoggedOut = 6,
cusSkypeMe = 7
} TUserStatus;

  */
  //获取当前自己的Skype的状态
  long m_lStatus = m_ctrlSkype.GetCurrentUser().GetOnlineStatus();
  //如果用户启动了自动回复功能
  if (theConfig.m_bIsAutoAnswer)
  {
         //表示当前用户是处于离线状态
         if (m_lStatus == 2)
         {
                //2表示有消息到来了
                if(Status == 2)
                {
                       CChatMessage cChatMessage;
                       cChatMessage.AttachDispatch(pMessage);
                       CString strHandle =       cChatMessage.GetFromHandle();
                       CChat cChat = cChatMessage.GetChat();
                       CUserCollection cUserCollection = cChat.GetMembers();
                       int nMembers = cUserCollection.GetCount();

                       CUser cUser = m_ctrlSkype.GetUser(strHandle);
                       
                       //如果对方是处于离开状态什么都不做并且必须不是来自群组消息
                       if(cUser.GetOnlineStatus() != 2 && nMembers == 1)
                       {
                              CChat cChat = cChatMessage.GetChat();
                              //发送用户选择的留言
                              cChat.SendMessage(theConfig.m_strSelectedAnswer.c_str());
                              cChatMessage.DetachDispatch();
             }
                }
         }
  }
}
目录
相关文章
|
3天前
|
监控 供应链 搜索推荐
阿里妈妈商品详情API接口:开发、应用与收益的深度剖析
阿里妈妈是阿里巴巴旗下的数字营销平台,其商品详情API接口为开发者提供了获取淘宝、天猫等电商平台商品详细信息的工具。本文介绍了该接口的开发流程、应用场景及带来的收益,揭示了其在电商生态中的重要地位。
24 6
|
3天前
|
供应链 搜索推荐 API
1688APP原数据API接口的开发、应用与收益(一篇文章全明白)
1688作为全球知名的B2B电商平台,通过开放的原数据API接口,为开发者提供了丰富的数据资源,涵盖商品信息、交易数据、店铺信息、物流信息和用户信息等。本文将深入探讨1688 APP原数据API接口的开发、应用及其带来的商业收益,包括提升流量、优化库存管理、增强用户体验等方面。
25 6
|
5天前
|
监控 搜索推荐 API
京东商品详情API接口的开发、应用与收益探索
在数字化和互联网高速发展的时代,京东通过开放商品详情API接口,为开发者、企业和商家提供了丰富的数据源和创新空间。本文将探讨该API接口的开发背景、流程、应用场景及带来的多重收益,包括促进生态系统建设、提升数据利用效率和推动数字化转型等。
19 3
|
10天前
|
供应链 搜索推荐 API
探索1688榜单商品详细信息API接口:开发、应用与收益
本文深入探讨了1688榜单商品详细信息API接口的开发与应用,涵盖接口概述、开发条件、调用方法及数据处理等内容。该API帮助企业高效获取1688平台商品信息,应用于商品信息采集、校验、同步与数据分析等领域,有效提升了企业的运营效率、库存管理、销售转化率及市场策略制定能力,降低了采购成本,提升了客户满意度。
36 9
|
13天前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
46 10
|
13天前
|
存储 API 数据库
使用Python开发获取商品销量详情API接口
本文介绍了使用Python开发获取商品销量详情的API接口方法,涵盖API接口概述、技术选型(Flask与FastAPI)、环境准备、API接口创建及调用淘宝开放平台API等内容。通过示例代码,详细说明了如何构建和调用API,以及开发过程中需要注意的事项,如数据库连接、API权限、错误处理、安全性和性能优化等。
58 5
|
12天前
|
数据可视化 搜索推荐 API
速卖通获得aliexpress商品详情API接口的开发、应用与收益。
速卖通(AliExpress)作为阿里巴巴旗下的跨境电商平台,为全球消费者提供丰富商品。其开放平台提供的API接口支持开发者获取商品详情等信息,本文探讨了速卖通商品详情API的开发流程、应用场景及潜在收益,包括提高运营效率、降低成本、增加收入和提升竞争力等方面。
30 1
|
JavaScript Java Serverless
入门 | 云开发平台1分钟开发一个API
云开发系列课程主要介绍了从入门到精通快速上手Serverless和云开发技术。学习内容涵盖云开发协同、云函数、云数据库、多媒体托管、前后端一体化框架等Serverless Web开发必备知识。希望通过云开发系列课程的学习与实际操作,让大家深入了解Serverless和云开发技术,并加深对阿里云云开发平台和阿里云Serverless产品的理解与认识。 本篇内容作为入门知识,让你在一分钟之内运行起一个Java/NodeJS/Python/PHP任何一门语言的Serverless API ,让你可以在后续的课程中向API添加各种有意思的功能。
入门 | 云开发平台1分钟开发一个API
|
9天前
|
人工智能 自然语言处理 API
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
谷歌推出的Multimodal Live API是一个支持多模态交互、低延迟实时互动的AI接口,能够处理文本、音频和视频输入,提供自然流畅的对话体验,适用于多种应用场景。
54 3
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
|
4天前
|
前端开发 API 数据库
Next 编写接口api
Next 编写接口api
下一篇
DataWorks