Чтение онлайн

на главную - закладки

Жанры

Программирование на языке Ruby
Шрифт:

У описанной техники может быть много применений. Еще два примера приведены в разделах 10.1.20 и 14.1.1.

14.5.2. Расширение Win32OLE

Расширение

Win32OLE
(правильно писать его имя строчными буквами:
win32ole
) реализует интерфейс к OLE-автоматизации в Windows. Программа на Ruby может выступать в роли клиента любого сервера автоматизации, к числу которых относятся, например, Microsoft Word, Outlook, Internet Explorer, а также многие продукты третьих фирм.

Для того чтобы начать взаимодействие с внешним приложением, мы создаем объект класса

WIN32OLE
. С его помощью мы получим доступ ко всем свойствам и методам, которые раскрывает данное приложение. В примере ниже объект ассоциируется с редактором Microsoft Word. Атрибуту
visible
мы присвоим значение
true
, а в конце вызовем метод
quit
, чтобы завершить внешнюю программу.

require "win32ole"

word = WIN32OLE.new "Word.Application"

word.visible = true

# ...

word.quit

Свойства сервера автоматизации выглядят как атрибуты объекта. Их можно читать и устанавливать.

Имеется и альтернативная нотация, в которой для доступа к свойствам используется конструкция, напоминающая хэш.

player["FileName"] = "file.wav"

name = player["FileName"]

# Эквивалентно следующим предложениям:

# player.FileName = "file.wav"

# name = player.FileName

У этой нотации есть то преимущество, что она позволяет проще осуществлять динамический доступ к свойствам, как показано в искусственном примере ниже:

puts "Введите имя свойства"

prop = gets

puts "Введите новое значение"

val = gets

old = obj[prop]

obj[prop] = val

puts "#{prop} было #{old}... стало #{obj[prop]}"

Но обратимся к более жизненным примерам. Следующий код получает от пользователя имя файла, передает его Microsoft Word и распечатывает файл:

require "win32ole"

print "Введите имя файла для распечатки: "

docfile = gets

word = WIN32OLE.new "Word.Application"

word.visible = true

word.documents.open docfile

word.options.printBackground = false

# Можно было бы также установить свойство printBackground в true,

# но тогда пришлось бы дожидаться, пока весь файл будет

# скопирован в буфер принтера, и только потом вызывать quit...

word.activeDocument.printout

word.quit

В следующем примере проигрывается WAV-файл. Недостаток заключается в том, что в конце программы мы поставили

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

require "win32ole"

sound = WIN32OLE.new("MCI.MMcontrol")

wav = "с:\\windows\\media\\tada.wav"

sound.fileName = wav

sound.autoEnable = true

sound.command = "Open"

sound.command = "Play"

sleep 7

В листинге 14.2 мы просим Internet Explorer открыть диалог для ввода текста.

Листинг 14.2. Открытие диалога для ввода текста в браузере

require "win32ole"

def ieInputBox( msg, default )

 ie = WIN32OLE.new("InternetExplorer.Application");

 ie.visible = false

 ie.navigate "about:blank"

 sleep 0.01 while (ie.busy)

 script = ie.Document.Script;

 result = script.prompt(msg,default);

 ie.quit

 result

end

# Главная программа...

result = ieInputBox( "Введите свое имя",

 "Дэйв Боумэн")

if result

 puts result

else

 puts "Пользователь нажал Cancel"

end

В листинге 14.3 мы открываем IE в небольшом окне и выводим в него HTML-документ.

Листинг 14.3. Для вывода в окно браузера требуется win32ole

html = <<EOF

<html>

 <body>

<h3>A теперь что-нибудь</h3>

<h2>совсем</h2>

<h1>другое...</h1>

 </body>

</html>

EOF

ie = WIN32OLE.new("InternetExplorer.Application");

Поделиться:
Популярные книги

Бояръ-Аниме. Газлайтер. Том 34

Володин Григорий Григорьевич
34. История Телепата
Фантастика:
фэнтези
боевая фантастика
аниме
7.00
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 34

Контрольный поцелуй

Донцова Дарья
8. Любительница частного сыска Даша Васильева
Детективы:
иронические детективы
9.15
рейтинг книги
Контрольный поцелуй

Я бог. Книга XXXIX

Дрейк Сириус
39. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я бог. Книга XXXIX

Тень Гегемона

Кард Орсон Скотт
2. Эндер Виггин. Сага теней
Фантастика:
научная фантастика
7.11
рейтинг книги
Тень Гегемона

Выбор Шивы

Вебер Дэвид Марк
1. Галактический шторм
Фантастика:
научная фантастика
5.40
рейтинг книги
Выбор Шивы

Неучтенный элемент. Том 10

NikL
10. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 10

И в аду есть герои

Панов Вадим Юрьевич
5. Тайный Город
Фантастика:
боевая фантастика
9.19
рейтинг книги
И в аду есть герои

Человек случайностей (др. изд.)

Мердок Айрис
Проза:
современная проза
6.80
рейтинг книги
Человек случайностей (др. изд.)

Искатель Смерти

Грин Саймон
1. Охотник за смертью
Фантастика:
героическая фантастика
6.20
рейтинг книги
Искатель Смерти

Кодекс Охотника. Книга XXVII

Винокуров Юрий
27. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XXVII

Князь Воротынский

Ананьев Геннадий Андреевич
Приключения:
исторические приключения
5.00
рейтинг книги
Князь Воротынский

Прозрение (сборник)

Ле Гуин Урсула Кребер
12. Вся Ле Гуин
Фантастика:
фэнтези
6.25
рейтинг книги
Прозрение (сборник)

Разгон

Загребельный Павел Архипович
Проза:
современная проза
5.00
рейтинг книги
Разгон

Том 12. Из 'Автобиографии'. Из записных книжек 1865-1905. Избранные письма

Твен Марк
Проза:
классическая проза
5.00
рейтинг книги
Том 12. Из 'Автобиографии'. Из записных книжек 1865-1905. Избранные письма