Skype API. Библиотека Skype4COM. Отправка команд

7 минут на чтение

Всем привет, давненько я не писал ничего, про библиотеку Skype4COM, и за этот промежуток времени довольно много возникло вопросов о данной библиотеки. В этой статье я расскажу о том, как можно отправлять специальные команды и получать от них ответ. Возможно, здесь для некоторых и будут содержаться те ответы, на которые Вы так хотели получить ответ. Что касается других вопросов, то выйдет следующая статья, про Skype API, которая будет посвящена именно ответам (я все вопросы соберу, проанализирую и сделаю отдельную статью, в которой будут содержаться ответы и статья о том, как написать собственного автоответчика).

Ну что помните еще, как устанавливать библиотеку Skype4COM или нет? Если нет, то давайте я Вам напомню. Скачиваем последнюю версию библиотеки Skype4COM и затем ее импортируем в свой проект, можно как ActiveX компонента. Для этого запускаем Delphi (я запускаю IDE Delphi 7) и выполняем команду Component-Import ActiveX Control, затем в появившемся окне нажимаем на кнопку Add, в окне выборе файлов, в поле Тип файлов, мы выбираем Any File (*.*) и указываем путь к нашему dll-файлу (Skype4COM.dll). Затем в нашем окне доступных библиотек, должна появиться библиотека Skype4COM 1.0 Type Library.(Version 1.0). Вот и все, Вам необходимо только инсталлировать данную библиотеку и после инсталляции сам компонент TSkype должен у Вас появиться  у Вас на вкладке компонентов ActiveX. Я данный компонент не использую, а напрямую подключаю библиотеку в usesSKYPE4COMLib_TLB.

Что касается по доступу программ к приложению Skype, то я писал об этом в данной статье данной статье. У кого появляется ошибка – Класс не зарегистрирован, то можно воспользоваться инструкцией, которая описана в данной статье данной статье. Или просто-напросто данная ошибка исчезнет при скачивании самой последней версии Skype и библиотеки Skype4COM. Также можете зарегистрировать с помощью сервера регистрации Microsoft, достаточно просто открыть данную библиотеку через это приложение и у Вас должно появиться сообщение:

Итак, теперь давайте вернемся к нашей непосредственно теме. Рассмотрим самые основные команды, которые можно посылать в Skype API. Все команды в Skype делятся на два типа: блокирующие и неблокирующие. Блокирующие команды ожидают ответ перед продолжением ее выполнения, а неблокирующие команды не требуют ответа.
Для того, чтобы использовать и отправлять команды, нам необходимо использовать интерфейс ICommand. Поэтому объявляем переменную, создаем ее и дальше можно выполнять огромный список команд. Создавать команду можно при помощи свойства Command объекта TSkype. При отправке команды необходимо указать следующие параметры:

Skype.Command[id:Integer;const command:Widestring;const reply:Widestring;block:wordbool;timeout:integer];

Теперь пройдемся немного по самим параметрам данной команды:

  • Id – запрашивает или устанавливает идентификатор команды;
  • Command – этот параметр задает набор команды в строковом виде;
  • Reply – этот параметр задает текст ответа команды;
  • Block – этот параметр задает каким будет команда: блокирующей или неблокирующей. Может принимать значение TRUE или FALSE;
  • Timeout – с помощью данного параметра задается интервал ожидания ответа в миллисекундах.

Теперь, для того, чтобы создать нашу команду, давайте создадим наш проект. Итак подключаем библиотеку SKYPE4COMLib_TLB в uses и на форме размещаем компоненты:

  • TMemo
  • TRichEdit
  • TButton

В TRichEdit я буду отображать все статусы подключения, а в TMemo я буду отображать результат выполнения нашей команды. Объявляем наш объект, затем его создаем, я это сделал так (var Skype:TSkype):

procedure TForm1.FormCreate(Sender: TObject);
begin
   Skype:=SKYPE4COMLib_TLB.TSkype.Create(Self);
   Skype.OnAttachmentStatus:=SkypeAttachmentStatus;
   if Skype.Client.IsRunning=True then
    RichEdit1.Lines.Add('Клиент запущен, соединяемся...')
   else
    begin
     Skype.Client.Start(True,True);
     RichEdit1.Lines.Add('Запускаем клиента...');
    end;
    Skype.Attach(8,False);
end;

Далее создаем, описываем нашу процедуру определения статуса, она у меня выглядит следующим образом:

procedure TForm1.SkypeAttachmentStatus(Sender: TObject; Status: TOleEnum);
begin
    RichEdit1.Lines.Add('Статус соедининения:'+Skype.Convert.AttachmentStatusToText(Status));
end;

Вот и все. Теперь для того, чтобы создать и отправить команду, на событие OnClick компонента TButton пишем следующий код:

procedure TForm1.Button1Click(Sender: TObject);
var
 command:ICommand;
begin
   command:=CoCommand.Create;
   command:=Skype.Command[1,'GET USERSTATUS','',TRUE,10000];
   Skype.SendCommand(command);
   Memo1.Lines.Add(command.Reply);
end;

О чем я говорил, и раньше, создаем наш интерфейс, затем с помощью свойства Command указываем необходимые параметры, в том числе и саму команду, а затем уже с помощью процедуры SendCommand мы ее отправляем, после 10000 миллисекунд мы получаем ответ и он отображается в TMemo. С помощью свойства Reply мы и получаем тот самый ответ, в данном примере я задал команду, которая получит мой статус Skype, вот какой результат у меня получился:

Если поменять сетевой статус в Skype, то естественно результат будет совсем другим Offline, AWAY и так далее. Вот в принципе и все, ниже я опубликую список самых основных и возможно всех команд, которые можно выполнять и посылать в Skype API.

Список команд:

  • ALTER APPLICATION <appname> CONNECT <username>
  • ALTER APPLICATION <appname> DATAGRAM <username>:<id> <text>
  • ALTER APPLICATION <appname> DISCONNECT <username>:<id>
  • ALTER APPLICATION <appname> READ <username>:<id>
  • ALTER APPLICATION <appname> WRITE <username>:<id> <text>
  • ALTER CALL <id> <status>
  • ALTER CHAT <chat_id> ADDMEMBERS <target>
  • ALTER CHAT <chat_id> LEAVE
  • ALTER CHAT <chat_id> SETTOPIC <topic>
  • ALTER GROUP <id> ADDUSER <userhandle|PSTN>
  • ALTER GROUP <id> REMOVEUSER <userhandle|PSTN>
  • ALTER VOICEMAIL <id> <action>
  • APPLICATION <appname> <property> <value>
  • BTN_PRESSED <btn>
  • BTN_RELEASED <btn>
  • CALL <id>
  • CHAT CREATE <target>
  • CHATMESSAGE <chat_id> <message>
  • CLEAR CALLHISTORY
  • CLEAR CHATHISTORY
  • CLEAR VOICEMAILHISTORY
  • CONTACTS FOCUSED
  • CONTACTS FOCUSED <username>
  • CREATE APPLICATION <appname>
  • CREATE GROUP <GroupIId>
  • DELETE APPLICATION <appname>
  • DELETE GROUP <Id>
  • GET AGC
  • GET AUDIO_IN
  • GET AUDIO_OUT
  • GET CALL <id> <property>
  • GET CHAT <chat_id> <property>
  • GET CHAT <chat_id> CHATMESSAGES
  • GET CHAT <chat_id> RECENTCHATMESAGES
  • GET CONNSTATUS
  • GET CURRENTUSERHANDLE
  • GET GROUP <id> property
  • GET MESSAGE <id> <property>
  • GET MUTE
  • GET PRIVILEGE <user_privilege>
  • GET PROFILE <profile_property>
  • GET PROFILE <profile>
  • GET RINGER
  • GET SKYPEVERSION
  • GET USER <username> <property>
  • GET USERSTATUS
  • GET VIDEO_IN
  • HOOK <ON|OFF>
  • MESSAGE <id> <property> <value>
  • MINIMIZE
  • MUTE <ON|OFF>
  • OPEN ADDAFRIEND <username>
  • OPEN AUTHORIZATION <username>
  • OPEN BLOCKEDUSERS
  • OPEN CALLHISTORY
  • OPEN CHAT <chat_id>
  • OPEN CONTACTS
  • OPEN DIALPAD
  • OPEN FILETRANSFER <username> IN <folder>
  • OPEN GETTINGSTARTED
  • OPEN IM <username> <message>
  • OPEN IMPORTCONTACTS
  • OPEN IMPORTCONTACTS
  • OPEN PROFILE
  • OPEN SEARCH
  • OPEN SENDCONTACTS
  • OPEN USRERINFO <username>
  • OPEN VIDEOTEST
  • OPEN VOICEMAIL <id>
  • PING
  • PROTOCOL <version>
  • SEARCH ACTIVECALLS
  • SEARCH ACTIVECHATS
  • SEARCH BOOKMARKEDCHATS
  • SEARCH CALLS <target>
  • SEARCH CHATMESSAGES <username>
  • SEARCH CHATS
  • SEARCH FRIENDS
  • SEARCH GROUPS
  • SEARCH MESSAGES <target>
  • SEARCH MISSEDCALLS
  • SEARCH MISSEDCHATMESSAGES
  • SEARCH MISSEDCHATS
  • SEARCH MISSEDMESSAGES
  • SEARCH RECENTCHATS
  • SEARCH USERS <target>
  • SEARCH USERSWAITINGMYAUTHORIZATION
  • SEARCH VOICEMAILS
  • SET AUDIO_IN <device_name>
  • SET AUDIO_OUT <device_name>
  • SET CALL <id> property
  • SET CHATMESSAGE <id> SEEN
  • SET MESSAGE <id> SEEN
  • SET MUTE <ON|OFF>
  • SET PROFILE <profile_property> <value>
  • SET PROFILE <profile>
  • SET PROFILE MOOD_TEXT <text>
  • SET RINGER <device_name>
  • SET USER <username> <property> <value>
  • SET USERSTATUS <value>

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

 

Facebook Vk Ok Twitter LinkedIn Telegram

Похожие записи:

Здравствуйте, давайте вернемся к Skype API. А рассмотрим мы в этой статье то, как можно из стороннего приложения управлять приложением Skype и производить какие-то настройки. Мы уже рассмотрели как можно получать список ников, отправлять им сообщения, смотреть...
Всем здравствуйте. Данная статья, будет рассказывать о том, как можно в Skype разрешить доступ программам к Skype и постоянно не отвечать на всплывающие окна Skype. Скажу сразу, что вся ответственность за добавления в список безопасных программ лежит на Вас, п...
Всем здравствуйте, не так давно, мне на email поступил вопрос о том: как работать со Skype4COM в новых версиях Skype (при запуске приложения, которое обращается к Skype API , появляется ошибка — Класс не зарегистрирован). До этого я проблем не замечал, так как...