Здавствуйте, в этой статье я хотел бы рассказать о Skype API для Delphi.

Skype4COM — это официальная библиотека API для взаимодействия с программой Skype.

В Delphi эта библиотека уже встроена, её нужно только установить.

Устанавливается она таким вот образом: переходим в меню Component, выбираем ImportComponent, в появившемся окне ставим галочку на Import ActiveX Control, жмем Next из списка выбираем Skype4COM 1.0 Type Library, в alette Page выбираем в какую вкладку в палитре компонентов устанавливать далее Next и Finish.

Переходим к написанию кода:

Создаем новый проект, на форму кидаем 2 GroupBox'а и 2 ListBox'а. В раздел uses подключаем модуль SKYPE4COMLib_TLB.

Объявим глобальную переменную skype:Tskype.

Извлечение информации о пользователе

В FormCreate пишем следующий код:

procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
skype:=SKYPE4COMLib_TLB.TSkype.Create(nil); // Создаем объект TSkype 
skype.Attach(6,true); // Подключаемся к программе скайп

Form1.Caption:=('Версия Скайпа: '+skype.Version); // В caption'е формы выводим версию программы
GroupBox1.Caption:=(skype.CurrentUser.Handle); // В caption'е GroupBox'а выводим логин текущего пользователя
 with listbox1.Items do begin // В ListBox1 выводим информацию о текущем пользователе
  Add('Язык: '+skype.CurrentUser.Language);
  Add('Страна: '+skype.CurrentUser.Country); 
  Add('Местоположение: '+skype.CurrentUser.FullName);
  Add('Дата рождения: '+Datetostr(skype.CurrentUser.Birthday));
  Add('Город: '+skype.CurrentUser.City);
  Add('Домашний телефон: '+skype.CurrentUser.PhoneHome);
  Add('Робочий телефон: '+skype.CurrentUser.PhoneOffice);
  Add('Мобильный телефон: '+skype.CurrentUser.PhoneMobile);
  Add('Домашняя страница: '+skype.CurrentUser.Homepage);
  Add('Пол: '+skype.Convert.UserSexToText(skype.CurrentUser.Sex));
  Add('Онлайн статус: '+skype.Convert.OnlineStatusToText(skype.CurrentUser.OnlineStatus));
 end;
// В ListBox2 выводим список друзей текущего пользователя 
  for i:=1 to Skype.Friends.Count do
  begin
   if Skype.Friends.Item[i].Handle<>'' then
    ListBox2.Items.Add(Skype.Friends.Item[i].Handle); // Добавляем список друзей в ListBox2
  end;
end;


Вот список того, что можно извлечь о пользователе скайпа

  • skype.CurrentUser.Handle — Логин (тип возвращаемого значения WideString)
  • skype.CurrentUser.FullName — Полное имя (тип возвращаемого значения WideString)
  • skype.CurrentUser.Birthday — День рождение (тип возвращаемого значения TDateTime)
  • skype.CurrentUser.Sex — Пол (тип возвращаемого значения TOleEnum)
  • skype.CurrentUser.Country — Страна (тип возвращаемого значения WideString)
  • skype.CurrentUser.Province — Область (тип возвращаемого значения WideString)
  • skype.CurrentUser.City — Город (тип возвращаемого значения WideString)
  • skype.CurrentUser.PhoneHome — Домашний телефон (тип возвращаемого значения WideString)
  • skype.CurrentUser.PhoneOffice — Рабочий телефон (тип возвращаемого значения WideString)
  • skype.CurrentUser.PhoneMobile — Мобильный телефон (тип возвращаемого значения WideString)
  • skype.CurrentUser.Homepage — Домашняя страница (тип возвращаемого значения WideString)
  • skype.CurrentUser.OnlineStatus — Статус (тип возвращаемого значения TOleEnum)
  • skype.CurrentUser.LastOnline — Был онлайн (тип возвращаемого значения TDateTime)
  • skype.CurrentUser.CountryCode — Код страны (тип возвращаемого значения WideString)
  • skype.CurrentUser.Timezone — Часовой пояс (тип возвращаемого значения Integer)
  • skype.CurrentUser.Language — Язык (тип возвращаемого значения WideString)
  • skype.CurrentUser.LanguageCode — Код языка (тип возвращаемого значения WideString)


Теперь подробнее о двух строках

Add('Пол: '+skype.Convert.UserSexToText(skype.CurrentUser.Sex));
Add('Онлайн статус: '+skype.Convert.OnlineStatusToText(skype.CurrentUser.OnlineStatus));
Значение возвращаемые skype.CurrentUser.Sex и skype.CurrentUser.OnlineStatus имеют тип TOleEnum
для вывода в ListBox их необходимо конвертировать в String, для конвертирования используется метод skype.Convert.*

Список методов для конвертирования строк

  • skype.Convert.OnlineStatusToText()
  • skype.Convert.TextToOnlineStatus()
  • skype.Convert.BuddyStatusToText()
  • skype.Convert.TextToBuddyStatus()
  • skype.Convert.CallStatusToText()
  • skype.Convert.TextToCallStatus()
  • skype.Convert.CallTypeToText()
  • skype.Convert.TextToCallType()
  • skype.Convert.UserSexToText()
  • skype.Convert.TextToUserSex()
  • skype.Convert.ConnectionStatusToText()
  • skype.Convert.TextToConnectionStatus()
  • skype.Convert.UserStatusToText()
  • skype.Convert.TextToUserStatus()
  • skype.Convert.CallFailureReasonToText()
  • skype.Convert.AttachmentStatusToText()
  • skype.Convert.ChatLeaveReasonToText()
  • skype.Convert.ChatStatusToText()
  • skype.Convert.VoicemailTypeToText()
  • skype.Convert.VoicemailStatusToText()
  • skype.Convert.TextToVoicemailStatus()
  • skype.Convert.VoicemailFailureReasonToText()
  • skype.Convert.ChatMessageStatusToText()
  • skype.Convert.TextToChatMessageStatus()
  • skype.Convert.ChatMessageTypeToText()
  • skype.Convert.TextToChatMessageType()
  • skype.Convert.TextToAttachmentStatus()
  • skype.Convert.GroupTypeToText()
  • skype.Convert.TextToGroupType()
  • skype.Convert.CallVideoStatusToText()
  • skype.Convert.CallVideoSendStatusToText()
  • skype.Convert.SmsMessageStatusToText()
  • skype.Convert.SmsMessageTypeToText()
  • skype.Convert.SmsTargetStatusToText()


Извлечение информации о друзьях

Далее выделяем ListBox2 и в Object Inspector'е переходим на вкладку Events, два раза кликаем по
событию OnDblClick и пишем следующий код:

procedure TForm1.ListBox2DblClick(Sender: TObject);
begin
GroupBox1.Caption:=(skype.Friends.Item[ListBox2.ItemIndex+1].Handle); // Выбранный в ListBox2 логин
 with listbox1.Items do begin
  Clear;
  Add('Язык: '+skype.Friends.Item[ListBox2.ItemIndex+1].Language);
  Add('Страна: '+skype.Friends.Item[ListBox2.ItemIndex+1].Country);
  Add('Полное имя: '+skype.Friends.Item[ListBox2.ItemIndex+1].FullName);
  Add('Дата рождения: '+Datetostr(skype.Friends.Item[ListBox2.ItemIndex+1].Birthday));
  Add('Город: '+skype.Friends.Item[ListBox2.ItemIndex+1].City);
  Add('Домашний телефон: '+skype.Friends.Item[ListBox2.ItemIndex+1].PhoneHome);
  Add('Рабочий телефон: '+skype.Friends.Item[ListBox2.ItemIndex+1].PhoneOffice);
  Add('Мобильный телефон: '+skype.Friends.Item[ListBox2.ItemIndex+1].PhoneMobile);
  Add('Домашняя страница: '+skype.Friends.Item[ListBox2.ItemIndex+1].Homepage);
  Add('Пол: '+skype.Convert.UserSexToText(skype.Friends.Item[ListBox2.ItemIndex+1].Sex));
  Add('Онлайн статус: '+skype.Convert.OnlineStatusToText(skype.Friends.Item[ListBox2.ItemIndex+1].OnlineStatus));
 end;
end;


Разберем строчку GroupBox1.Caption:=(skype.Friends.Item[ListBox2.ItemIndex+1].Handle);
skype.Friends.Item[Номер логина выделенного в ListBox'е2]
ListBox2.ItemIndex+1 — Получаем номер выделенного логина в ListBox'е2.

На этом всё!

Полный код программы:

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, SKYPE4COMLib_TLB, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    ListBox2: TListBox;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    procedure FormCreate(Sender: TObject);
    procedure ListBox2DblClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  skype:Tskype;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
skype:=SKYPE4COMLib_TLB.TSkype.Create(nil);
skype.Attach(6,true);

//Form1.Caption:=('Версия Скайпа: '+skype.Version);
GroupBox1.Caption:=(skype.CurrentUser.Handle);
 with listbox1.Items do begin
  Add('Язык: '+skype.CurrentUser.Language);
  Add('Страна: '+skype.CurrentUser.Country);
  Add('Местоположение: '+skype.CurrentUser.FullName);
  Add('Дата рождения: '+Datetostr(skype.CurrentUser.Birthday));
  Add('Город: '+skype.CurrentUser.City);
  Add('Домашний телефон: '+skype.CurrentUser.PhoneHome);
  Add('Робочий телефон: '+skype.CurrentUser.PhoneOffice);
  Add('Мобильный телефон: '+skype.CurrentUser.PhoneMobile);
  Add('Домашняя страница: '+skype.CurrentUser.Homepage);
  Add('Пол: '+skype.Convert.UserSexToText(skype.CurrentUser.Sex));
  Add('Онлайн статус: '+skype.Convert.OnlineStatusToText(skype.CurrentUser.OnlineStatus));
 end;

  for i:=1 to Skype.Friends.Count do
  begin
   if Skype.Friends.Item[i].Handle<>'' then
    ListBox2.Items.Add(Skype.Friends.Item[i].Handle);
  end;
end;



procedure TForm1.ListBox2DblClick(Sender: TObject);
begin
GroupBox1.Caption:=(skype.Friends.Item[ListBox2.ItemIndex+1].Handle);
 with listbox1.Items do begin
  Clear;
  Add('Язык: '+skype.Friends.Item[ListBox2.ItemIndex+1].Language);
  Add('Страна: '+skype.Friends.Item[ListBox2.ItemIndex+1].Country);
  Add('Полное имя: '+skype.Friends.Item[ListBox2.ItemIndex+1].FullName);
  Add('Дата рождения: '+Datetostr(skype.Friends.Item[ListBox2.ItemIndex+1].Birthday));
  Add('Город: '+skype.Friends.Item[ListBox2.ItemIndex+1].City);
  Add('Домашний телефон: '+skype.Friends.Item[ListBox2.ItemIndex+1].PhoneHome);
  Add('Робочий телефон: '+skype.Friends.Item[ListBox2.ItemIndex+1].PhoneOffice);
  Add('Мобильный телефон: '+skype.Friends.Item[ListBox2.ItemIndex+1].PhoneMobile);
  Add('Домашняя страница: '+skype.Friends.Item[ListBox2.ItemIndex+1].Homepage);
  Add('Пол: '+skype.Convert.UserSexToText(skype.Friends.Item[ListBox2.ItemIndex+1].Sex));
  Add('Онлайн статус: '+skype.Convert.OnlineStatusToText(skype.Friends.Item[ListBox2.ItemIndex+1].OnlineStatus));
 end;
end;

end.