Здравствуйте, уже давно экспериментирую с разными API, крупных программ, приложений, сервисов, которые предоставляют возможность использовать свои данные через API. Уже я немного рассказывал в блоге про API одного из популярных менеджеров закачек — DownloadMaster (DM), рассказывал про API одной из самой крупной российской социальной сети — Vkontakte API, ну вот и настал момент поговорить еще об одном из популярных приложений — это Skype, который вроде бы как написан на Delphi. Разработчики нам также предоставляют использовать API и писать свои приложения под Skype. При написании приложений я столкнулся с массой неудобств, ну не с массой, я только с данной библиотекой сам начал разбираться, но пару неудобств скажу. Во-первых для того, чтобы использовать данные Skype (своего аккаунта) он естественно должен быть запущен, Vkontakte API такого нету, все можно авторитизироваться через программный интерфейс и работать с данными, но в Skype такого к сожалению нету. Во-вторых, при работе с данными Skype все время необходимо давать доступ в Skype для Вашего приложения.
То есть в главном окне Skype появляется всплывающее сообщение о том, что такое-то приложение хочет получить доступ к данным, Skype запрашивает разрешение на доступ к данным Вашего приложения и Вы выбираете да или нет. С одной стороны, эти все действие оправданы, то есть очень хорошая безопасность и за все отвечает только сам пользователь (за потерю данных, например).
Данная статья является вводной, мы сделаем небольшой обзор данной библиотеки. Во-первых мы рассмотрим где взять вообще эту библиотеку и как ее установить, а во-вторых рассмотрим как, например узнать версию Skype или Ваше имя в Skype, то есть все примитивно.
Ну что, давайте начнем с установки Skype. Если у Вас уже установлено само приложение Skype, то качать дополнительных библиотек Вам уже не нужно. Запустим Delphi и выполним команду Component-Import ActiveX Control... Далее в списке ищем библиотеку Skype4Com, которая записана в списке как Skype4Com 1.0 Type Library (Version 1.0)
Ну а дальше нажимаем на кнопку «Install» и устанавливаем как обычный компонент. После этого на вкладке ActiveX не должно появиться никакого компонента, но необходимо в Uses подключить модуль SKYPE4COMLib_TLB. Далее мы в этой статье определим версию, установленного Skype, а также узнаем свой собственный ник и наше нахождение, то есть, другими словами страну, которую Вы указывали при регистрации. Кстати, вот только, что еще один минус заметил, что когда Ваше приложение у Skype запрашивает разрешение на получение данных, то в это время Ваше приложение зависает до того момента как Вы не разрешите или не запретите доступ для Вашего приложения. Кстати, если Вы запретите доступ для Вашего приложения, то просто-напросто будет ошибка, так что не забывайте ее отслеживать.
На форме у меня следующие компоненты
- TButton
- TListView
TListView - в нем мы будем отображать результат сразу с заголовками. В свойстве ViewStyle компонента TListView я установил в vsReport. После этого нажал по двойным щелчком мыши по компоненту TListView и создал 2 колонки Name и Result.
После чего на событие OnClick кнопки написал следующий код
procedure TForm1.Button1Click(Sender: TObject);
var
Skype:TSkype;
i:integer;
begin
try
ActiveX.CoInitialize(nil);
Skype:=SKYPE4COMLib_TLB.TSkype.Create(nil);
Skype.Attach(6,True);
ListView1.Items.Add.Caption:='Version';
ListView1.Items.Item[0].SubItems.Add(Skype.Version);
ListView1.Items.Add.Caption:='Name';
ListView1.Items.Item[1].SubItems.Add(Skype.CurrentUserHandle);
ListView1.Items.Add.Caption:='Location';
ListView1.Items.Item[2].SubItems.Add(Skype.PredictiveDialerCountry);
FreeAndNil(Skype);
except
on e:Exception do
ShowMessage(e.Message);
end;
end;
Первой строчкой мы инициализируем COM библиотеку на всякий случай, хоть и в данном случае необязательно. С помощью Skype.Attach(6,True) мы подключаемся к нашему API, ну а дальше используем обычные свойства и функции нашей библиотеки (версия, ник, местонахождение). Дальше будем рассматривать как отправлять сообщения, искать пользователей, а также получать список контактов.
Исходник можно скачать тут
Коммуникатор Htc desire s (серый), очень серьёзная и функциональная модель, имеющая русифицированную клавиатуру, меню, а также «Руководство пользователя».
Метки: API, Skype, Skype API, Skype API в Delphi, Skype4COM
как с помощью делфи можно узнать что пользователь авторизовался в скайпе. то есть надо узнать что пользователь вошел в скайп и авторизация прошла успешно.
2yaigor
Можно, например просто проверить запущен ли скайп, попробуйте вот так
if Skype.Client.isRunning then
Caption:=’Yes’;
[...] Ну вроде бы все рассказал, теперь Вы сможете написать хорошее приложение для Skype, а еще лучше оно получиться, когда мы будем рассматривать библиотеку Skype4COM [...]
Все бы ничего, но любой текст длиннее абзаца очень тяжело читается при наличии большого количества ошибок ((
Просьба к автору внимательнее готовить материал…
2Владимир
Буду стараться, хоть и с русским языком проблемы
Автор молодец, очень хорошую информацию дает, главное смысл а ошибок со временем будет меньше.
да , автор полезную инфу дает… спасибо
Спасибо!
Всегда пожалуйста
У меня такой вопрос:
Как проверить корректность вводимого имени/телефона юзера?
Чтобы Skype.PlaceCall не крешился от неправильного вводимого имени.
Просьба ответить. Сегодня.
Можно взять в блок try except и отлавливать ошибку, ошибка 10403 появляется, при неправильном наборе номера
А что значит цифра 6 в Skype.Attach(6,True)? Если я там пишу 7 тоже работает.
тип доступ авторизации
Andrey53, ну а почитать где об этом можно? Вы так и не ответили на мой вопрос. В чем разница?
попробовать на официальном сайте скайпа, там у них есть мануал
Почему когда я скидываю друзьям мою программу у них она включается
и пишет ошибку: Неопознанная ошибка
Возможно, Вы ее скидываете без библиотеки Skype4COM.dll???
Как мне найти и добавить друга в список контактов помогите а то никак не пойму.
Доброго времени суток. Подскажите, почему при подключении модуля SKYPE4COMLib_TLB в uses перестают работать любые методы к Application. Application.Terminate, Application.ProcessMessages итд. И как можно это поправить?
Если ещё актуально, нужно вместо Application написать VCL.Forms.Application (для Delphi XE+) или Forms.Application (для Delphi 2010-), т.к. в юните SKYPE4COMLib_TLB есть запись с именем Application, которая перекрывает тип из VCL.Forms. Или подключать SKYPE4COMLib_TLB после Forms.