1

Тема: VBS: Библиотека Skype4Com.dll

Доброго времени суток.
Недавно открыл для себя приятный факт, что к программе Skype можно подключиться через скрипты (и не только). На форуме я нашёл не так много примеров кода, работающих с этой программой. Потому решил сделать краткий обзор про библиотеку Skype4COM. Сильно увлекаться не стал, т.к. есть хорошая англоязычная справка на сайте разработчика, откуда и взята большая часть представленной ниже информации.

В основе всего лежит простота.

2

Re: VBS: Библиотека Skype4Com.dll

Назначение и установка

Библиотека Skype4COM обеспечивает ActiveX интерфейс к API программы Skype. Разрабатывать программы для Skype можно в знакомых средах программирования, таких как Visual Studio или Delphi, с использованием языков сценариев, например VBScript, PHP или JavaScript. Также можно вставлять управляющие элементы в веб-страницу, используя тег object.
Автор библиотеки -  Skype Limited. Библиотека Skype4COM.dll распространяется бесплатно. Вы можете скачать библиотеку здесь (версия 1.0.36, архив ~1.80  MB). Прямая ссылка здесь. Внутри архива находятся 3 файла: установщик, сама библиотека и файл справки на английском языке. Требования для установки: программа Skype 3.0 и ОС Windows (2000/XP/Vista/7)
Примечание: вероятно, что в последних версиях Skype библиотека уже есть в комплекте, потому архив имеет смысл скачивать только ради справки.

Использование.

Примеры ниже будут приводиться на языке VBScript. Создание объекта Skype4COM производится следующим образом:

Set oSkype = WScript.CreateObject("Skype4COM.Skype", "Skype_")

Примечание: сначала следует авторизоваться в системе. При первом запуске скрипта нужно будет дать разрешение на дальнейшее выполнение в окне Skype, после чего выполняющая скрипт программа добавится в исключения. Еще перед запуском следует авторизоваться в системе.

Подробную информацию о свойствах и методах объекта Skype4COM можно получить в справочном файле из архива. Тут ограничусь только описанием примеров vbs-скриптов, представленных в справке:

• Скрипт настройки автоматического ответа на входящие вызовы
• Сценарий, ожидающий соединения на Skype API и соединяющий, если таковой имеется, после чего удерживает пользователя при успешном соединении
• Скрипт, посылающий нажатия клавиш для Skype клиента
• Скрипт, выполняющий звонок и следящий за статусом во время разговора
• Сценарий запросов чатов из истории чатов
• Пример скрипта на основе предыдущего, иллюстрирующий свойства в чате
• Скрипт, открывающий различные окна в Skype клиенте
• Скрипт для блокировки/разблокирования Skype API
• Скрипт, создающий конференц-вызов
• Скрипт, создающий список участников конференции и список тех, кто не подключен к ней
• Скрипт, выводящий список переданных файлов через Skype
• Сценарий, создающий групповой чат
• Скрипт, управляющий различными аспектами контактных групп
• Скрипт, добавляющий собеседников в конференцию
• Скрипт, создающий лог сообщений чата
• Сценарий, демонстрирующий создание плагина пунктов меню и событий
• Скрипт, перечисляющий свойства профиля для текущего пользователя
• Скрипт для автоответа на сообщение, полученное в чате
• Скрипт, выполняющий простой поиск пользователя в сети
• Скрипт, показывающий общие параметры программы Skype
• Сценарий, отправляющий sms на указанный номер
• Скрипт, создающий список всех отправленных сообщений
• Скрипт, который при получении нового голосового сообщения отправляет sms уведомление и отвечает на входящие вызовы

Некоторые примеры:

№1

'  Скрипт, перечисляющий свойства профиля для текущего пользователя

Set oSkype = WScript.CreateObject("Skype4COM.Skype","Skype_")
Dim Text
If Not oSkype.Client.IsRunning Then 
	oSkype.Client.Start() 
End If
Text = "" & _
"Full name: " & oSkype.CurrentUserProfile.FullName & vbCrLf & _
"Birthday: " & oSkype.CurrentUserProfile.Birthday & vbCrLf & _
"Sex: " & oSkype.CurrentUserProfile.Sex & vbCrLf & _
"Languages: " & oSkype.CurrentUserProfile.Languages & vbCrLf & _
"Country: " & oSkype.CurrentUserProfile.Country & vbCrLf & _
"IP Country: " & oSkype.CurrentUserProfile.IPCountry & vbCrLf & _
"Province: " & oSkype.CurrentUserProfile.Province & vbCrLf & _
"City: " & oSkype.CurrentUserProfile.City & vbCrLf & _
"Phone home: " & oSkype.CurrentUserProfile.PhoneHome & vbCrLf & _
"Phone office: " & oSkype.CurrentUserProfile.PhoneOffice & vbCrLf & _
"Phone mobile: " & oSkype.CurrentUserProfile.PhoneMobile & vbCrLf & _
"Homepage: " & oSkype.CurrentUserProfile.Homepage & vbCrLf & _
"About: " & oSkype.CurrentUserProfile.About & vbCrLf & _
"Mood: " & oSkype.CurrentUserProfile.MoodText & vbCrLf & _
"Timezone: " & oSkype.CurrentUserProfile.Timezone & vbCrLf & _
"Noanswer timeout: " & oSkype.CurrentUserProfile.CallNoAnswerTimeout & vbCrLf & _
"Forward rules: " & oSkype.CurrentUserProfile.CallForwardRules & vbCrLf & _
"Call apply forward: " & oSkype.CurrentUserProfile.CallApplyCF & vbCrLf & _
"Call send to voicemail: " & oSkype.CurrentUserProfile.CallSendToVM & vbCrLf & _
"Balance: " & oSkype.CurrentUserProfile.Balance / 100 &" "& oSkype.CurrentUserProfile.BalanceCurrency & vbCrLf & _
"Balance Text: " & oSkype.CurrentUserProfile.BalanceToText & vbCrLf & _
"Validated SMS numbers: " & oSkype.CurrentUserProfile.ValidatedSmsNumbers 
WScript.Echo Text

№2

' Скрипт, создающий чат с пользователем Echo123 и отправляющий ему сообщение.

Set oSkype = WScript.CreateObject("Skype4COM.Skype") 
Set oMembers = WScript.CreateObject("Skype4COM.UserCollection")
	oMembers.Add(oSkype.User("echo123")) 
Set oChat = oSkype.CreateChatMultiple(oMembers) 
	oChat.OpenWindow() 
Set oMsg = oChat.SendMessage("Test Message.")

№3

' Скрипт ищет пользователя среди друзей. Если находит, то меняет статус у текущего пользователя
' и звонит найденному пользователю.

Set oSkype = Wscript.CreateObject("Skype4COM.Skype", "Skype ") 
oSkype.Client.Start() 
oSkype.Attach() 
For Each User In oSkype.Friends 
	If (User.Handle="echo123") Then
		oSkype.CurrentUserProfile.MoodText = "New Status"
		Set oCall = oSkype.PlaceCall(User.handle)
	End If 
Next

№4

' Скрипт, сохраняющий историю разговоров Skype в отдельной папке

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oSkype = WScript.CreateObject("Skype4COM.Skype", "Skype_")
If Not oSkype.Client.IsRunning Then oSkype.Client.Start() End If

ChatHistoryFolder = "SkypeChatHistory"
If Not(oFSO.FolderExists(ChatHistoryFolder)) Then
	oFSO.CreateFolder(ChatHistoryFolder)
End If 

For Each oChat In oSkype.Chats
name = ""
f = True ' Пропускаем самого себя
For Each oUser In oChat.Members
	If f Then f = False Else name = name&"_"&oUser.FullName End If
Next

Set Chat = oFSO.OpenTextFile(ChatHistoryFolder&"/chat"&name&".txt", 8, True, -1)
	If oChat.Messages.Count > 0 Then
		For Each oMsg In oChat.Messages
			Chat.WriteLine(oMsg.FromDisplayName&" ("&oMsg.Timestamp&"):"& oMsg.Body)
		Next
	End If
Chat.Close
Next
WScript.Echo "История сохранена. Найдено "&oSkype.Chats.Count&" чатов"

№5

' Если есть активные разговоры, то скрипт сохранит его в wav-файле.
' Иначе выдаст уведомление, что разговоров на данный момент нет.

Set oSkype = WScript.CreateObject("Skype4COM.Skype", "Skype_")
Path = "C:\"
If Not oSkype.Client.IsRunning Then oSkype.Client.Start() End If
If oSkype.ActiveCalls.Count > 0 Then
    Call_id = oSkype.ActiveCalls.Item(1).ID
    	FileIn = Path & Call_id & "_in.wav"
    	FileMIC = Path & Call_id & "_mic.wav"
    oSkype.ActiveCalls.Item(1).OutputDevice(2) = FileIn
    oSkype.ActiveCalls.Item(1).CaptureMicDevice(2) = FileMIC
Else
    WScript.Echo "Нет активных разговоров"
End If
В основе всего лежит простота.

3

Re: VBS: Библиотека Skype4Com.dll

ИМХО - в коллекцию !

Времени не хватает... :-(

4

Re: VBS: Библиотека Skype4Com.dll

В версии Skype 5.3.0.120 библиотека не пашет.

5

Re: VBS: Библиотека Skype4Com.dll

Времени не хватает... :-(

6

Re: VBS: Библиотека Skype4Com.dll

To JSman:
Тестировал библиотеку в Skype версии 5.0.0.152. В данном случае из архива даже ничего устанавливать не пришлось, всё корректно работало.
По вашему случаю нашёл возможное решение проблемы. Видимо, в последних версиях Skype нужно повозиться с установкой.

В основе всего лежит простота.

7

Re: VBS: Библиотека Skype4Com.dll

Правильно ли я понял, что библиотека требует присутствия установленного Skype ?

8

Re: VBS: Библиотека Skype4Com.dll

Аскет, все правильно понял.

9

Re: VBS: Библиотека Skype4Com.dll

вещь полезная, особенно с версий 5.х когда убрали возможность звонка через спикер

Я конечно далек от мысли... (с)

10

Re: VBS: Библиотека Skype4Com.dll

Felix Faria, возможное решение проблемы не помогло. А именно: не удаётся удалить Skype без того, чтобы одновременно не удалилась «%ProgramFiles%\Common Files\Skype\Skype4COM.dll».

11 (изменено: armenxxx1, 2011-08-26 17:11:51)

Re: VBS: Библиотека Skype4Com.dll

Скрипт №4 дает ошибку Skype 3.8.0.188

Line: 19
Char: 1
Error: Path not fond
Code: 800A004C

Set Chat = oFSO.OpenTextFile(ChatHistoryFolder&"/chat"&name&".txt", 8, True, -1)

Но при добавлении

on error resume next

все в порядке так должен быть ?


У меня еще один вопрос, как посмотреть историю другой Skype nik ?

12

Re: VBS: Библиотека Skype4Com.dll

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

>"посмотреть историю другой Skype nik"
Если на своём компьютере, то надо просто зайти под нужным аккаунтом и запустить скрипт.

В основе всего лежит простота.

13

Re: VBS: Библиотека Skype4Com.dll

Да на моем компьютере что-то вроде http://www.nirsoft.net/utils/skype_log_view.html ....

14

Re: VBS: Библиотека Skype4Com.dll

Что касается SkypeLog, эта программа будет показывать историю при условии, если в пути к аккаунту только английские символы.

15

Re: VBS: Библиотека Skype4Com.dll

JSman пишет:

Что касается SkypeLog, эта программа будет показывать историю при условии, если в пути к аккаунту только английские символы.

Извините но не так у миня работаю с русскими, болгарским буквами...

16 (изменено: armenxxx1, 2011-08-29 21:40:14)

Re: VBS: Библиотека Skype4Com.dll

Немного изменен скрипт думаю так должен работать лучше...

on error resume next

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oSkype = WScript.CreateObject("Skype4COM.Skype", "Skype_")
If Not oSkype.Client.IsRunning Then oSkype.Client.Start() End If

If Not(oFSO.FolderExists("SkypeChatHistory")) Then
    oFSO.CreateFolder("SkypeChatHistory")
End If 
 
For Each oChat In oSkype.Chats
name = ""
f = True
For Each oUser In oChat.Members
    If f Then f = False Else name = name & oUser.FullName End If
Next
 
Set Chat = oFSO.OpenTextFile("SkypeChatHistory\" & name & ".txt", 8, True, -1)
    If oChat.Messages.Count > 0 Then
        For Each oMsg In oChat.Messages
            Chat.WriteLine(oMsg.FromDisplayName & "(" & oMsg.Timestamp & "):" & oMsg.Body)
        Next
    End If
Chat.Close
Next
WScript.Echo "История сохранена. Найдено " & oSkype.Chats.Count & " чатов"

И еще раз хочу поблагодарить Felix Faria для скриптов.

17

Re: VBS: Библиотека Skype4Com.dll

Извлечь историю переписки в Skype