SkypeAPI库目前已验证功能: (需安装并登录Skype,并且Skype同意接受API控制)
1).发送Skype信息
2).发送手机短信 (Skype帐号必须充值)
///
// SkypeAPILib User Manual
// Version 1.0
// Dennis 2011-05-19
///
//×××××××××××××××××××××××××××××××××××××××
//一: API 文件说明
//×××××××××××××××××××××××××××××××××××××××
///
1. 文件列表:
SkypeAPILib.h // 库接口文件
SkypeAPILib.lib // 库文件
SkypeAPILib.dll // 库文件
SkypeAPIDef.h // 常量定义文件
///
2. 接口说明:
// 接口类名
CSkypeAPILib
// 构造函数, 需传入日志函数
CSkypeAPILib(Log_FUNC logFunc);
// 初始化函数
BOOL Init(HWND hWndParent);
// 检查初始化是否完成
BOOL InitIsOK();
// 发送Skype协议命令
BOOL SendCmdMsg(LPCTSTR lpszMsg, ...);
// 添加任务(限于Skpye消息和SMS消息)
void AddTask(const TaskElement &task);
// 系统消息处理(处理Skype消息)
BOOL TranslateMessage ( UINT message, WPARAM wParam, LPARAM lParam );
// 设置任务处理间隔时间, 单位:秒
void SetTaskInterval(const unsigned short &nTime = 1);
//××××××××××××××××××××××××××××××××××××××
//二: 使用VC MFC工程调用Lib流程说明:
//××××××××××××××××××××××××××××××××××××××
///
1. 创建对象: CSkypeAPILib m_skype;
初始化: m_skype.Init(GetSafeHwnd()
检查初始化: m_skype.InitIsOK()
定义日志(log)函数供库调用.
void SkypeAPILog ( LPCTSTR lpszText, ... )
在MFC类的构造函数中透过CSkypeAPILib的构造函数传入该日志函数.
///
2. 重载DefWindowProc,调用库函数TranslateMessage来处理消息
LRESULT CSkypeAPILibSampleDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if ( m_skype.TranslateMessage ( message, wParam, lParam ) )
return TRUE;
return CDialog::DefWindowProc(message, wParam, lParam);
}
///
3. 调用接口AddTask加入任务(发送Skype消息或SMS)
任务结构体说明:
typedef struct _TaskElement
{
int nType; // 任务类型, skype消息:TASK_TYPE_MSG, 短信:TASK_TYPE_SMS
int nPriority; // 任务优先级, 预留
string strTarget; // 任务目标(SkypeID或手机号)
string strContent; // 任务内容(Skype消息或短信内容)
int nStatus; // 任务状态, 预留
}TaskElement;
例子:
// 1. Skype 消息
TaskElement task;
task.nType = TASK_TYPE_MSG; // Skype消息
task.nStatus = TASK_STATUS_STANDBY; // 排队等待
task.nPriority = TASK_PRIORITY_LOW; // 低级别
task.strTarget = _T("SkypeUserID"); // Skype帐号ID
task.strContent = _T("TestMessageFromSkypeAPI");// 消息内容
m_skype.AddTask(task); // 添加任务
// 2. 手机短信
TaskElement task;
task.nType = TASK_TYPE_SMS; // SMS消息
task.nStatus = TASK_STATUS_STANDBY; // 排队等待
task.nPriority = TASK_PRIORITY_LOW; // 低级别
task.strTarget = _T("+8613800001111"); // +86中国,台湾+886
task.strContent = _T("TestSMSMessageFromSkypeAPI"); // 消息内容
m_skype.AddTask(task); // 添加任务
//★★★★★★★★★★★★★★★★★★★★★
详细请参考VC2005 MFC对话框工程: CSkypeAPILibSample
// SkypeAPILib.h
#ifndef __SKYPEAPILIB_H__
#define __SKYPEAPILIB_H__
#include "SkypeAPIDef.h"
#include <tchar.h>
#include <vector>
#include <queue>
using namespace std;
#ifdef SKYPEAPILIB_EXPORTS
#define SKYPEAPILIB_API __declspec(dllexport)
#else
#define SKYPEAPILIB_API __declspec(dllimport)
#endif
class SKYPEAPILIB_API CSkypeAPILib {
public:
//CSkypeAPILib();
CSkypeAPILib(Log_FUNC logFunc);
~CSkypeAPILib(void);
public:
BOOL Init(HWND hWndParent);
BOOL InitIsOK();
BOOL SendCmdMsg(LPCTSTR lpszMsg, ...);
void AddTask(const TaskElement &task);
BOOL TranslateMessage ( UINT message, WPARAM wParam, LPARAM lParam );
// Time between two task to be handle, unit : seconds
void SetTaskInterval(const unsigned short &nTime = 1);
private:
BOOL ParseSkypeMsg(char* pMsg);
BOOL SendSkypeMsg(const string &strTarget, const string &strMsg);
BOOL SendSMSMsg(const string &strTarget, const string &strMsg);
void AlterSMSMsg(const string &strSMSID, const string &strSMSMsg);
void ParseSMSMsg(WPARAM wParam);
void HandleTask(const TaskElement &task);
DWORD m_dwThreadID;
HANDLE m_hThread;
HANDLE StartSMSThread();
static void * SMSThreadFunc(void* pThis);
void SMSTask();
private:
HWND m_hWndSkype;
HWND m_hWndParent;
UINT m_MsgID_SkypeAttach;
UINT m_MsgID_SkypeDiscover;
unsigned short m_nTaskInterval;
Log_FUNC Log;
SMSInfo m_SMSMsg;
queue<TaskElement> m_TaskQueue;
};
#endif // __SKYPEAPILIB_H__
// SkypeAPIDef.h
#ifndef __SKYPEAPIDEF_H__
#define __SKYPEAPIDEF_H__
#include <string>
using namespace std;
enum
{
WM_SKYPEMSG_USERS = WM_USER+500,
};
enum Task_Type
{
TASK_TYPE_MSG = 0, // Skype Message
TASK_TYPE_SMS, // SMS Message
TASK_TYPE_CALL, // Call
};
enum Task_Priority
{
TASK_PRIORITY_LOW = 0,
TASK_PRIORITY_MID,
TASK_PRIORITY_HIGH,
};
enum Task_Status
{
TASK_STATUS_STANDBY = 0,
TASK_STATUS_PROCESSING,
TASK_STATUS_FINISH,
};
// Callback function for log
typedef void (*Log_FUNC)(LPCTSTR lpszText, ... );
typedef struct _SMSInfo
{
string strNum;
string strID;
string strMsg;
int nStatus; // status with enum SMS_STATUS
int nCheckTime; // default 0
}SMSInfo;
typedef struct _TaskElement
{
int nType;
int nPriority;
string strTarget;
string strContent;
int nStatus;
}TaskElement;
#endif // __SKYPEAPIDEF_H__