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__