Создание собственных HTML-схем рабочего стола для Runpad Pro



Рабочий стол Runpad Pro представлен ввиде обычной локальной HTML-страницы, взаимодействие которой с интерфейсом Runpad Pro осуществляется через JavaScript/VBScript.
Таким образом, можно создавать интерфейс практически любой сложности с использованием Dynamic-HTML и Flash - технологий.
Однако, для создания собственной схемы среднего уровня сложности достаточно лишь небольших знаний HTML и скриптов.

Для создания HTML-страниц можно использовать любой редактор текста (например, блокнот) или специализированные программы.
Для тестирования созданной схемы рекомендуется использовать прилагаемую утилиту.
Также прилагаются несколько готовых схем-примеров, в которых можно посмотреть принцип работы.

Необходимо, чтобы схема правильно работала только в Internet Explorer. Проверку в остальных браузерах делать необязательно. Тестовая программа, как и сам Runpad Pro используют именно Internet Explorer для отображения схемы.

Схема должна представлять собой динамическую страницу, которая будет отображать закладки и дополнительные элементы (такие как статусная строка и пр.), которые будет запрашивать от Runpad Pro.
Также страница должна реагировать на несколько событий, поступаемых от Runpad Pro и передавать в Runpad Pro некоторые события.
В принципе, схема может не реагировать на все события и не отображать все возможные элементы - это зависит от ее интерфейса и желаний разработчика.

Для реагирования на события от Runpad Pro достаточно описать внутри тега HEAD соответствующие функции (список ниже) на языках скриптов (JavaScript/VBScript).
Для запроса данных от Runpad Pro или вызова методов Runpad Pro нужно использовать вызовы вида external.Name, где Name - имя метода, функции или переменной-параметра (список ниже).


Перечень параметров и функций, которые можно запрашивать от Runpad Pro:

external.getMachineLoc - возвращает строку местоположения машины (название организации)
external.getMachineDesc - возвращает строку описания машины (или номер машины)
external.getVipSessionName - возвращает имя VIP-сессии (если она начата)
external.getStatusString - возвращает статусную строку (в ней не может быть HTML-тегов!)
external.getInfoText - возвращает HTML-текст рекламно-информационного блока (его может и не быть)
external.getNumSheets - возвращает кол-во закладок, видимых в текущий момент
external.getSheetName(idx) - возвращает название закладки по ее индексу (индекс от 0 до getNumSheets-1)
external.isSheetActive(idx) - возвращает true если закладка активна (индекс от 0 до getNumSheets-1)
external.getSheetBGPic(idx) - возвращает имя файла картинки для соотв. закладки (индекс от 0 до getNumSheets-1)
external.isPageShaded - возвращает true если страница должна быть затемнена


Перечень методов, которые нужно вызывать для передачи информации/событий в Runpad Pro:

external.setSheetActive(idx,active) - установка активности закладки (индекс от 0 до getNumSheets-1). Второй параметр сообщает о статусе активности закладки (true - активна, false - нет). Данный метод следует вызывать при клике на закладку, однако обновлять страницу после этого не следует(!), т.к. сразу после вызова должно прийти событие OnActiveSheetChanged(), в котором должно быть обновление.


Перечень прочих методов:

external.doShellExec(path[,args]) - позволяет запускать приложения или внешние ссылки URL (второй параметр не является обязательным).
Примеры вызова:
<a href="javascript:;" onclick="external.doShellExec('http://runpad-shell.com')">ClickMe</a>
<a href="javascript:;" onclick="external.doShellExec('calc.exe')">ClickMe</a>
<a href="javascript:;" onclick="external.doShellExec('c:\\windows\\system32\\sol.exe','-c -r -parm')">ClickMe</a>
<a href="javascript:;" onclick="external.doShellExec('c:\\program files\\far\\far.exe')">ClickMe</a>
<a href="javascript:;" onclick="external.doShellExec('%ProgramFiles%\\far\\far.exe')">ClickMe</a>
<a href="javascript:;" onclick="external.doShellExec('F:\\games\\legacy_doom\\launcher.exe')">ClickMe</a>
<a href="javascript:;" onclick="external.doShellExec('F:/games/legacy_doom/launcher.exe')">ClickMe</a>
external.getInputText(title,hint) - вызывает окошко ввода текста с заголовком title и подсказкой hint, после ввода пользователем текста возвращает строку (или пустую строку если пользователь отказался от ввода).
external.inputWrapper(el) - позволяет ввести текст в текстовое поле el (пример вызова: <input type="text" onclick="external.inputWrapper(this)">)
external.alert(text) - аналог javascript:alert(text)


Перечень функций-событий, которые может вызывать в любой момент Runpad Pro:

OnStatusStringChanged() - событие приходит после изменения статусной строки. Схема должна запросить новую строку через external.getStatusString и подменить ее текст на новый. При этом обновлять всю страницу целиком крайне не рекомендуется!
OnActiveSheetChanged() - событие приходит после изменения статуса активности закладки. Схема должна обновить закладки так, чтобы было видно, какая (какие) закладки сейчас активны, используя external.isSheetActive(). При этом обновлять всю страницу целиком крайне не рекомендуется!
OnPageShaded() - событие приходит после изменения статуса затемнения страницы (статус возвращает external.isPageShaded)


Общие требования и рекомендации:

• Схема должна быть одностраничной и в ней будут запрещены к показу всплывающие окна и сообщения
• Схема не должна быть сильно нагруженной анимациями, бегущими строками и пр., т.к. это может повлиять на быстродействие и постоянную загрузку процессора
• Допускается использование Flash. Например, можно сделать flash-часы. Однако, опять же следует учесть возможную загрузку процессора и тогда, по возможности, сделать их без секундной стрелки, чтобы обновление не происходило каждую секунду (как пример).
• Схема, использующая картинки (external.getSheetBGPic) будет потреблять значительно больше памяти, чем схема без картинок. Также будет дольше происходить ее загрузка
• При изменении статусной строки или активной закладки не нужно делать полную перезагрузку страницы, т.к. это будет весьма некрасиво выглядеть и занимать некоторое время
• Не следует надеяться, что при загрузке страницы активной закладки не будет - необходимо запрашивать статус каждый раз при отрисовке
• Не следует надеяться, что при загрузке страницы она не должна быть затемненной
• Кодировка для страницы должна быть win-1251