Книга: Программирование на языке Ruby
14.5.1. Расширение Win32API
14.5.1. Расширение Win32API
Расширение Win32API
— исключительно мощный инструмент, если вы собираетесь программировать на относительно низком уровне. Оно позволяет вызывать из Ruby функции Windows API, находящиеся в любой DLL.
Указанная функция становится объектом, а методу new передаются параметры, точно описывающие функцию. Первый параметр — строка, идентифицирующая DLL, в которой находится функция (например, crtdll
). Второй параметр — имя самой функции, третий — массив строк, описывающих типы параметров функции (массив импорта), а четвертый — строка, описывающая тип возвращаемого значения (строка экспорта).
Массив импорта может содержать следующие значения (регистр не играет роли):
I целое
L число
N число
P указатель на строку
Строка экспорта также может содержать любое из этих значений, а также значение «V», означающее «void».
После того как объект создан, можно обратиться к его методу call
для вызова функции Windows. Синоним — Call
.
В примере ниже мы вызываем функцию GetCursorPos
, которая возвращает указатель на структуру POINT
. Эта структура состоит из двух полей типа long
. Чтобы получить их значения, мы можем воспользоваться методом unpack
:
require 'Win32API'
result = "0"*8 # Восемь байтов (достаточно для двух long).
getCursorXY = Win32API.new("user32","GetCursorPos",["P"],"V")
getCursorXY.call(result)
x, y = result.unpack("LL") # Два long.
В данном случае функция вернула составные двоичные данные, а иногда такие данные нужно подать на вход функции. Понятно, что для этого нужно воспользоваться методом pack
, который упакует данные в строку.
У описанной техники может быть много применений. Еще два примера приведены в разделах 10.1.20 и 14.1.1.
- 14.5. Сценарии на платформе Microsoft Windows
- InterBase Super Server для Windows
- Интеграция с платформой Windows NT
- Часы в Windows показывают неправильное время
- Классическая архитектура на Windows NT (Yaffil CS)
- Новые функции API для работы с Blob и массивами
- Рекомендуемое расширение для файлов баз данных - *.ib
- Расширение механизма событий
- 4.2. Центр уведомлений Windows 10
- 24.1. Расширение возможностей Панели задач
- Загрузочные дискеты и Live CD для Windows
- 6.8. Разгон видеокарты на Windows 10