Не так давно понадобилась написать приложение которое бы автоматически отправляло сообщение по Skype определенному пользователю, который есть в списке контактов. Задача была не много сложнее, но дело не в этом. Решил написать маленькую статейку по использованию Skype API.
Всем известно, что у Skype есть свое API, причем для разных языков. Я хотел начать описания с Skype4COM для С++.
Скачать Skype4COM можно с официального сайта.
В архиве находятся три файлика:
Нам нужен собственно Skype4COM.dll.
За первый пример я решил взять пример с сайта скайпа, который выводит версию текущего скайп клиента.
В целом все просто и понятно. Правда есть один момен не много не приятный, как всегда связанный с безопасностью, что на строке:
скайп запросить разрешение на использования ресурсов скайпа нашим приложением. Со стороны безопасности оно то правильно, но есть мелкий вариант обхода, но о нем не в формате текущего поста ))))
Продолжаем набор банальных примеров, теперь собственно разберемся с отправкой сообщения:
Для того, что бы набрать пользователя, нужно вызвать метод PlaceCall:
Исходники
Если тема интересна могу написать более интересные примеры использования Skype4COM…
Всем известно, что у Skype есть свое API, причем для разных языков. Я хотел начать описания с Skype4COM для С++.
Скачать Skype4COM можно с официального сайта.
В архиве находятся три файлика:
- Skype4COM.chm
- Skype4COM.dll
- Skype4COM.msm
Нам нужен собственно Skype4COM.dll.
Hello world для Skype
За первый пример я решил взять пример с сайта скайпа, который выводит версию текущего скайп клиента.
#import "Skype4COM.dll"
int _tmain(int argc, _TCHAR* argv[]) {
// Инициализмруем COM соединение
CoInitialize(NULL);
// Создаем Skype объект
SKYPE4COMLib::ISkypePtr pSkype(__uuidof(SKYPE4COMLib::Skype));
// Соединяемся с Skype API
pSkype->Attach(6,VARIANT_TRUE);
// Получаем версию клиента и выводим ее
_bstr_t bstrSkypeVersion = pSkype->GetVersion();
printf("Skype client version %s\n", (char*)bstrSkypeVersion);
//Печатаем версию COM "обертки"
_bstr_t bstrWrapperVersion = pSkype->GetApiWrapperVersion();
printf("COM wrapper version %s\n", (char*)bstrWrapperVersion);
// Удаляем соединения со скайп
pSkype = NULL;
CoUninitialize();
return 0;
}
В целом все просто и понятно. Правда есть один момен не много не приятный, как всегда связанный с безопасностью, что на строке:
pSkype->Attach(6, VARIANT_TRUE);
скайп запросить разрешение на использования ресурсов скайпа нашим приложением. Со стороны безопасности оно то правильно, но есть мелкий вариант обхода, но о нем не в формате текущего поста ))))
Отправить сообщение пользователю из списка контактов
Продолжаем набор банальных примеров, теперь собственно разберемся с отправкой сообщения:
#import "Skype4COM.dll"
using namespace SKYPE4COMLib;
int _tmain(int argc, _TCHAR* argv[]) {
CoInitialize(NULL);
ISkypePtr pSkype(__uuidof(Skype));
pSkype->Attach(6,VARIANT_TRUE);
IChatMessage *message;
message = pSkype->SendMessage(_bstr_t(L"user_name"), _bstr_t(L"Привет"));
printf("%s sent message", (char *)message->FromHandle);
pSkype = NULL;
CoUninitialize();
return 0;
}
Для того, что бы набрать пользователя, нужно вызвать метод PlaceCall:
ICallPtr pCall = pSkype->PlaceCall(_bstr_t(L"user_name"), L"", L"", L"");
Получить список контактов
IUserCollectionPtr contactList = pSkype->GetFriends();
for(int i = 1; i <= contactList->GetCount(); i++) {
_bstr_t bstrHandle = contactList->GetItem(i)->GetHandle();
_bstr_t bstrFullname = contactList->GetItem(i)->GetFullName();
printf("Friend login %s and name %s \n", (char*)bstrHandle, (char*)bstrFullname);
}
Исходники
Если тема интересна могу написать более интересные примеры использования Skype4COM…