Нет, это не ошибка в движке Хабры, и не повтор статьи, опубликованной на прошлой неделе и посвященной технологии WiDi. В этот раз мы поговорим о том, как разработчики могут использовать WiDi в своих приложениях. А Вы знали, что для работы с WiDi существует WiDi Extension SDK? Нет? Тогда эта статья для Вас.
Кому из разработчиков это может пригодиться? По идее это может ограничиваться только фантазией разработчика. Идеи лежащие на поверхности — это программы для воспроизведения видео или аудио с визуализацией, программы для просмотра фото. Умная программа может определить наличие WiDi в системе и предложить пользователю отображать воспроизводимый контент на экране телевизора. Возможно, что на данный момент эта тема не слишком актуальна — WiDi адаптеров в настоящий момент не так уж и много.
Но в ближайшем будущем, после того как WiDi адаптеры начнут устанавливать сразу в телевизоры, например компания LG уже продемонстрировала первый телевизор на CES 2012 и собирается начать их выпуск в этом году, данная тема заинтересует многих разработчиков.
Для разработчиков, желающих встроить функционал для работы с WiDi в свои приложения, компания Intel выпустила Intel WiDi Extensions SDK. Данный SDK позволяет:
В SDK Вы найдете документацию, файлы, необходимые для включения в проект и примеры на C++, C#.
Кстати, для разработки приложения, работающего с WiDi, не обязательно иметь железо, поддерживающее данную технологию. Такое железо понадобится только для тестирования.
Начнем встраивать функционал для работы с WiDi в свою программу.
Для начала необходимо перейти на сайт и скачать Intel WiDi Extensions SDK. Внутри архива лежит дистрибутив, содержащий сам SDK. Сохраняем, распаковываем, устанавливаем.
Создаем наше тестовое приложение, подключаем к проекту заголовочный файл
Первое, что необходимо сделать, это создать и инициализировать IWiDiExtensions
Все функции WiDi API являются асинхронными. Для уведомления о результате выполненной операции используются оконные сообщения, посылаемые окну, хэндл которого был передан при вызове функции Initialize.
Для того, чтобы получить уведомление об успешном окончании инициализации, окно приложения должно уметь обрабатывать сообщение WM_WIDI_INITIALIZED.
Для получения уведомления об ошибке, возникшей в процессе инициализации, используется сообщение WM_WIDI_INITIALIZATION_FAILED. Параметр wParam обработчика сообщения WM_WIDI_INITIALIZATION_FAILED будет содержать соответствующий код ошибки:
После успешной инициализации можно приступать к поиску доступных WiDi адаптеров. Делается это с помощью функции StartScanForAdapters
Для уведомления о найденном адаптере используется сообщение WM_WIDI_ADAPTER_DISCOVERED. Параметр lParam будет указатель на идентификатор адаптера. Данный идентификатор необходим для подключения к выбранному адаптеру.
После окончания поиска окно получит сообщение WM_WIDI_SCAN_COMPLETE. Параметр wParam будет содержать код, анализ которого поможет определить, по какой причине было завершено сканирование:
Если было обнаружено одно и более устройство, можно приступать к подключению. Подключение осуществляется вызовом функции StartConnectionToAdapter.
После успешного подключения окно получит сообщение WM_WIDI_CONNECTED. В случае возникновения проблем — WM_WIDI_DISCONNECT_FAILED, параметр wParam будет содержать код:
В параметр lParam будет передан идентификатор адаптера.
На этом пока все. Для получения более подробной информации о возможностях WiDi Extensions SDK Вы можете изучить документацию, которая поставляется в комплекте с SDK. Будут вопросы — задавайте здесь, в комментариях, либо на форуме Intel Software Network.
Кому из разработчиков это может пригодиться? По идее это может ограничиваться только фантазией разработчика. Идеи лежащие на поверхности — это программы для воспроизведения видео или аудио с визуализацией, программы для просмотра фото. Умная программа может определить наличие WiDi в системе и предложить пользователю отображать воспроизводимый контент на экране телевизора. Возможно, что на данный момент эта тема не слишком актуальна — WiDi адаптеров в настоящий момент не так уж и много.
Но в ближайшем будущем, после того как WiDi адаптеры начнут устанавливать сразу в телевизоры, например компания LG уже продемонстрировала первый телевизор на CES 2012 и собирается начать их выпуск в этом году, данная тема заинтересует многих разработчиков.
Для разработчиков, желающих встроить функционал для работы с WiDi в свои приложения, компания Intel выпустила Intel WiDi Extensions SDK. Данный SDK позволяет:
- Определять наличие и работоспособность WiDi
- Поиск и определение адаптеров готовых к подключению
- Подключение к адаптеру
- Изменение параметров экрана, режима отображения (клонировать экран, расширить рабочий стол на второй экран)
В SDK Вы найдете документацию, файлы, необходимые для включения в проект и примеры на C++, C#.
Кстати, для разработки приложения, работающего с WiDi, не обязательно иметь железо, поддерживающее данную технологию. Такое железо понадобится только для тестирования.
Начнем встраивать функционал для работы с WiDi в свою программу.
Для начала необходимо перейти на сайт и скачать Intel WiDi Extensions SDK. Внутри архива лежит дистрибутив, содержащий сам SDK. Сохраняем, распаковываем, устанавливаем.
Создаем наше тестовое приложение, подключаем к проекту заголовочный файл
#include <IntelWiDiExtensions_i.h>
Первое, что необходимо сделать, это создать и инициализировать IWiDiExtensions
HRESULT hr;
hr = CoCreateInstance(CLSID_WiDiExtensions, NULL, CLSCTX_INPROC_SERVER, __uuidof(IWiDiExtensions), (LPVOID*)&m_pWiDi);
if(hr == S_OK)
{
hr = m_pWiDi->Initialize((DWORD)m_hWnd);
}
Все функции WiDi API являются асинхронными. Для уведомления о результате выполненной операции используются оконные сообщения, посылаемые окну, хэндл которого был передан при вызове функции Initialize.
HRESULT Initialize(
HWND windowHandle
);
Для того, чтобы получить уведомление об успешном окончании инициализации, окно приложения должно уметь обрабатывать сообщение WM_WIDI_INITIALIZED.
Для получения уведомления об ошибке, возникшей в процессе инициализации, используется сообщение WM_WIDI_INITIALIZATION_FAILED. Параметр wParam обработчика сообщения WM_WIDI_INITIALIZATION_FAILED будет содержать соответствующий код ошибки:
RC_WIDI_APP_NOT_FOUND // Не установлено приложение для работы с WiDi
RC_WIDI_FAILED_TO_START // Не удалось запустить приложение для работы с WiDi
RC_INTERNAL_ERROR // Произошла внутренняя ошибка
RC_WIDI_APPLICATION_ERROR // Неизвестная ошибка
После успешной инициализации можно приступать к поиску доступных WiDi адаптеров. Делается это с помощью функции StartScanForAdapters
HRESULT StartScanForAdapters();
Для уведомления о найденном адаптере используется сообщение WM_WIDI_ADAPTER_DISCOVERED. Параметр lParam будет указатель на идентификатор адаптера. Данный идентификатор необходим для подключения к выбранному адаптеру.
После окончания поиска окно получит сообщение WM_WIDI_SCAN_COMPLETE. Параметр wParam будет содержать код, анализ которого поможет определить, по какой причине было завершено сканирование:
RC_SUCCESS // Поиск успешно завершен
RC_UNABLE_TO_START_SCAN // Поиск не удалось запустить
RC_INTERNAL_ERROR // Произошла внутренняя ошибка
RC_WIDI_APPLICATION_ERROR // Произошла внутренняя ошибка приложения для работы с WiDi
RC_CONNECT_CANCELLED_SCAN // Поиск был прерван
Если было обнаружено одно и более устройство, можно приступать к подключению. Подключение осуществляется вызовом функции StartConnectionToAdapter.
HRESULT StartConnectionToAdapter(
BSTR AdapterUniqueID,
int SourceScreenResolution,
int TargetScreenResolution,
ScreenMode Mode
);
После успешного подключения окно получит сообщение WM_WIDI_CONNECTED. В случае возникновения проблем — WM_WIDI_DISCONNECT_FAILED, параметр wParam будет содержать код:
RC_CONNECTION_DROPPED // Подключение не было установлено
RC_USER_DISCONNECT // Подключение было прервано пользователем
В параметр lParam будет передан идентификатор адаптера.
На этом пока все. Для получения более подробной информации о возможностях WiDi Extensions SDK Вы можете изучить документацию, которая поставляется в комплекте с SDK. Будут вопросы — задавайте здесь, в комментариях, либо на форуме Intel Software Network.