Всем привет, давненько я не писал ничего, про библиотеку 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 CONNECT
  • ALTER APPLICATION DATAGRAM :
  • ALTER APPLICATION DISCONNECT :
  • ALTER APPLICATION READ :
  • ALTER APPLICATION WRITE :
  • ALTER CALL
  • ALTER CHAT ADDMEMBERS
  • ALTER CHAT LEAVE
  • ALTER CHAT SETTOPIC
  • ALTER GROUP ADDUSER
  • ALTER GROUP REMOVEUSER
  • ALTER VOICEMAIL
  • APPLICATION
  • BTN_PRESSED
  • BTN_RELEASED
  • CALL
  • CHAT CREATE
  • CHATMESSAGE
  • CLEAR CALLHISTORY
  • CLEAR CHATHISTORY
  • CLEAR VOICEMAILHISTORY
  • CONTACTS FOCUSED
  • CONTACTS FOCUSED
  • CREATE APPLICATION
  • CREATE GROUP
  • DELETE APPLICATION
  • DELETE GROUP
  • GET AGC
  • GET AUDIO_IN
  • GET AUDIO_OUT
  • GET CALL
  • GET CHAT
  • GET CHAT CHATMESSAGES
  • GET CHAT RECENTCHATMESAGES
  • GET CONNSTATUS
  • GET CURRENTUSERHANDLE
  • GET GROUP property
  • GET MESSAGE
  • GET MUTE
  • GET PRIVILEGE
  • GET PROFILE
  • GET PROFILE
  • GET RINGER
  • GET SKYPEVERSION
  • GET USER
  • GET USERSTATUS
  • GET VIDEO_IN
  • HOOK
  • MESSAGE
  • MINIMIZE
  • MUTE
  • OPEN ADDAFRIEND
  • OPEN AUTHORIZATION
  • OPEN BLOCKEDUSERS
  • OPEN CALLHISTORY
  • OPEN CHAT
  • OPEN CONTACTS
  • OPEN DIALPAD
  • OPEN FILETRANSFER IN
  • OPEN GETTINGSTARTED
  • OPEN IM
  • OPEN IMPORTCONTACTS
  • OPEN IMPORTCONTACTS
  • OPEN PROFILE
  • OPEN SEARCH
  • OPEN SENDCONTACTS
  • OPEN USRERINFO
  • OPEN VIDEOTEST
  • OPEN VOICEMAIL
  • PING
  • PROTOCOL
  • SEARCH ACTIVECALLS
  • SEARCH ACTIVECHATS
  • SEARCH BOOKMARKEDCHATS
  • SEARCH CALLS
  • SEARCH CHATMESSAGES
  • SEARCH CHATS
  • SEARCH FRIENDS
  • SEARCH GROUPS
  • SEARCH MESSAGES
  • SEARCH MISSEDCALLS
  • SEARCH MISSEDCHATMESSAGES
  • SEARCH MISSEDCHATS
  • SEARCH MISSEDMESSAGES
  • SEARCH RECENTCHATS
  • SEARCH USERS
  • SEARCH USERSWAITINGMYAUTHORIZATION
  • SEARCH VOICEMAILS
  • SET AUDIO_IN
  • SET AUDIO_OUT
  • SET CALL property
  • SET CHATMESSAGE SEEN
  • SET MESSAGE SEEN
  • SET MUTE
  • SET PROFILE
  • SET PROFILE
  • SET PROFILE MOOD_TEXT
  • SET RINGER
  • SET USER
  • SET USERSTATUS

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

 

Метки: , ,




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

  1. Kverde:

    Спасибо за статью. Как я понял, команды для изменения автара чата нет? Или есть какой-нибудь другой способ изменить автар чата через 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 на другом конце загнать передаваемое сообщение.

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

Вы можете использовать следующие теги:

*