Всем привет, давненько я не писал ничего, про библиотеку 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>

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

 

Метки: , ,




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

  1. Спасибо за статью. Как я понял, команды для изменения автара чата нет? Или есть какой-нибудь другой способ изменить автар чата через API? Всё просмотрел и такой возможности не нашел, а была бы очень полезна.

  2. Юрий:

    Спасибо за хорошую статью. Как можно программно изменить текст авторизации?

  3. Юрий:

    Когда делаем BuddyStatus как можно изменить автоматическое сообщение?

  4. Ефим:

    Добрый день.

    Я пишу под 1С и получаю COM-объект компоненты, в виде объекта Skype.
    Есть коллекция MissedMessages, у которой я постоянно проверяю количество, если больше нуля, то перехожу к поочередной обработке. Раньше я получал элемент коллекции, вытягивал оттуда сообщение, хендл, время и ставил свойство элемента коллекции Chat.Seen = true.
    Сейчас же я читал документацию и увидел, что свойство Seen стало Read-only. Скажите, как теперь можно пометить сообщение прочитанным, чтобы стандартное окно сообщений скайпа не светилось.
    Пробовал так, но не получается:

    skype.SendCommand(1,Строка(«SET CHATMESSAGE » + chat.Id + » SEEN»),»»,TRUE,10000);

    При таком выполнении процедуры получаю ошибку о том, что неверные типы.
    Подскажите, что в каком параметре нужно передавать и вообще, как правильно пользоваться командами.
    Проблема еще в том, что в 1С нельзя инициализировать интерфейс, как это делается в Delphi.

    p.s. вам e-mail, указанный в подвале сайта не функционирует, а хотелось бы написать :)

  5. Аноним:

    как можно проиграть звук входящего сообщения и изменить текст настроения. Пример:
    http://gyazo.com/065c2917fb2f513fcd86c01300e4f62f

  6. Василий:

    как можно проиграть звук входящего сообщения и изменить текст настроения?

  7. Ivan:

    как можно изменить hello сообщение при запросе на добовление нового пользователя в список контактов?

  8. Pavel:

    Будучи полным чайником в программировании на Дельфи меня заинтересовала Ваша работа со Skyp4COM. Единственного, чего я не нашёл в Вашши примерах (и ради чего я носом рою и-нет) это как содержимое окна чата можно было бы отразить в ком-нибудь буфере типа Мемо, для дальнейшего анализа текста приложением.
    Ведь можно послать не просто текст, а а некую последовательность нолей и единиц, которую можно по виртуальному USB-COM порту засылать в микрокастрюллер в виде команды на выполнение, к примеру поворота камеры при помощи исполнительного устройства.
    Только не отправляйте меня в тему IP-камер: Я уже в полной мере хлебанул дерьма с привязкой их к китайским серверам и иными танцами с бубном перед хитрож…ыми сисадминами, пробросами портов, в результате чего у меня уже скопилось 3 разнокалиберных IP-камеры в виде кучи металлического дерьма. Очень сильно не хочу зависеть ни от чьей ‘доброй’ воли. В данном случае правила скайп меня устраивают более всего.
    Кстати посылать команду я научился вот так:

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Skype1.SendMessage( Edit1.Text, Edit2.Text ) ;
    end;
    где Edit1.Text — адресат, Edit2.Text — передаваемое сообщение

    К сожалению не могу понять, как произвести обратную процедуру:
    В TForm1.Мемо1 на другом конце загнать передаваемое сообщение.

  9. Алексей:

    Здравствуйте у меня 1 вопрос как сделать подделку цитат в Skype ?

  10. Цифровой некрофил:

    Простите что поднимаю тему, актуальна ли еще эта библиотека или с покупкой Skype компанией Microsoft библиотека не имеет смысла?

  11. Мимо шел:

    запущены на ноуте 2-а клиента Skype (т.е. два логина и пароля).
    Как поочередно подключиться к одному и ко второму

  12. Илья:

    А можно ли получить статус звонка и сбросить звонок с помощью такой команды

  13. lozavideo:

    Здраствуйте, я использовал отправку так:
    Skype1.SendMessage(‘vova’,sMemo1.Text);

    как перехватывать ошибки и выводить по кодам ошибок
    если нет такого ника или человек забанен?

  14. Alexander:

    Добрый вечер. Прошу помощи. Не могу добиться, чтобы заработал код: отправить сообщение в конкретный групповой чат с указанным именем через ActiveX (Skype4COM.dll). Кто-нибудь работал с данным компонентом. Буду рад любой помощи и примерам работы с чатом в Skype

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

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

*