Здравствуйте, уже давно экспериментирую с разными 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, ну а дальше используем обычные свойства и функции нашей библиотеки (версия, ник, местонахождение). Дальше будем рассматривать как отправлять сообщения, искать пользователей, а также получать список контактов.

Исходник можно скачать тут.

Метки: , , , ,




К записи “Skype API. Библиотека Skype4COM” оставлено комментариев: 20.

  1. yaigor:

    как с помощью делфи можно узнать что пользователь авторизовался в скайпе. то есть надо узнать что пользователь вошел в скайп и авторизация прошла успешно.

  2. Andrey53:

    2yaigor
    Можно, например просто проверить запущен ли скайп, попробуйте вот так

    if Skype.Client.isRunning then
    Caption:=’Yes';

  3. […] Ну вроде бы все рассказал, теперь Вы сможете написать хорошее приложение для Skype, а еще лучше оно получиться,  когда мы будем рассматривать библиотеку Skype4COM […]

  4. Владимир:

    Все бы ничего, но любой текст длиннее абзаца очень тяжело читается при наличии большого количества ошибок ((
    Просьба к автору внимательнее готовить материал…

  5. Andrey53:

    2Владимир
    Буду стараться, хоть и с русским языком проблемы

  6. Андрей:

    Автор молодец, очень хорошую информацию дает, главное смысл а ошибок со временем будет меньше.

  7. yaigor:

    да , автор полезную инфу дает… спасибо

  8. Б:

    У меня такой вопрос:
    Как проверить корректность вводимого имени/телефона юзера?
    Чтобы Skype.PlaceCall не крешился от неправильного вводимого имени.
    Просьба ответить. Сегодня. :)

    • Andrey53:

      Можно взять в блок try except и отлавливать ошибку, ошибка 10403 появляется, при неправильном наборе номера

  9. Fensuj:

    А что значит цифра 6 в Skype.Attach(6,True)? Если я там пишу 7 тоже работает.

  10. Fensuj:

    Andrey53, ну а почитать где об этом можно? Вы так и не ответили на мой вопрос. В чем разница?

  11. SashaRus:

    Почему когда я скидываю друзьям мою программу у них она включается
    и пишет ошибку: Неопознанная ошибка

  12. neoa2:

    Как мне найти и добавить друга в список контактов помогите а то никак не пойму.

  13. Evgeny:

    Доброго времени суток. Подскажите, почему при подключении модуля SKYPE4COMLib_TLB в uses перестают работать любые методы к Application. Application.Terminate, Application.ProcessMessages итд. И как можно это поправить?

    • Alexander:

      Если ещё актуально, нужно вместо Application написать VCL.Forms.Application (для Delphi XE+) или Forms.Application (для Delphi 2010-), т.к. в юните SKYPE4COMLib_TLB есть запись с именем Application, которая перекрывает тип из VCL.Forms. Или подключать SKYPE4COMLib_TLB после Forms.

Оставить комментарий

Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*