1. Краткая вводная информация

2. Окна внешних процессов, запускаемых из Proxy32
    2.1. Пускач типа LAUNCH
    2.2. Пускач типа VIEWER

3. Окна внешних процессов, запускаемых из Windows
    3.1. Автоматический захват окон внешних процессов, запускаемых из Windows (AUTOGRAB)
    3.2. Ручной захват окон внешних процессов, запускаемых из Windows (Manual GRAB)
        3.2.1. Ручной захват 1 (Hold-LeftCtrl-and-Hold-Left-Button-for-1-second Manual GRAB)
        3.2.2. Ручной захват 2 (Start-Capture-then-click-on-the-Window-Title Manual GRAB)
        3.2.3. Ручной захват 3 (Select-From-the-list-of-Windows Manual GRAB)

4. Освобождение окон внешних процессов из рабочего пространства

5. Работа с окнами внешних процессов внутри рабочего пространства

1. Краткая вводная информация

В операционной системе Windows пользователь в процессе работы запускает процессы (програмы) и взаимодействует с ними. Взаимодействие происходит через окна. Если процесс не создает окно сам, то система запускает его в окне Windows Console. Обычно процесс создает одно или несколько окон для взаимодействия с пользователем. Поскольку одновременно обычно запущено много процессов, то на рабочем столе присутствует много окон и Windows дает пользователю возможность организовывать эти окна на рабочем столе удобным для пользователя способом. Системная оболочка Windows Explorer расширяет возможности управления окнами, добавляя панель задач (Taskbar) к обычному рабочему столу Windows. Программа Proxy32 является процессом Windows и создает 3-и окна на рабочем столе Windows (Главное окно, дерево пускачей и Selector). Кроме того, процес Proxy32 позволяет создавать окна встроенного терминала и редактора скриптов в рабочих пространствах внутри главного окна. Окна, которые находятся в рабочих пространствах внутри главного окна, управляются функциями главного окна, а не функциями Windows Explorer, в частности, внутренние окна не представлены на панели задач Windows. Таким образом, процесс Proxy32 создает 3 окна верхнего уровня (на рабочем столе Windows) и два типа окон внутри главного окна. Кроме того, процесс Proxy32 может создавать окна различных диалогов для взаимодействия с пользователем. Все эти окна создаются кодом программы Proxy32 , поэтому они считаются внутренними по отношению к Proxy32. Окна, создаваемые другими программами Windows, например, Notepad, считаются окнами внешних процессов, потому что они не создаются программой Proxy32. Одной из важных функций Proxy32 является менеджер рабочих пространств, который позволяет управлять окнами встроенного терминала и встроенного редактора скриптов внутри главного окна. Менеджер рабочих пространств Proxy32 был бы также полезен, если бы он позволял управлять окнами внешних процессов, например, Notepad наряду с окнами встроенного терминала и встроенного редактора скриптов внутри главного окна. В Proxy32 окна внешних процессов могут помещаться внутрь рабочих пространств, где они могут управляться менеджером рабочих пространств, становиться "активными" и принимать результаты выполнения пускача COMMAND.

Для того, чтобы менеджер рабочих пространств мог управлять окнами внешних процессов, эти окна сначала должны быть помещены внутрь рабочего пространства в главном окне. В Proxy32 окна внешних процессов могут помещаться внутрь рабочих пространств, как вручную, так и автоматически. Вручную - это, когда пользователь выбирает окно внешнего процесса мышкой или выбирает имя окна внешнего процесса из списка имен. Автоматически - это, когда программа Proxy32 сама выбирает окно внешнего процесса по некоторому критерию, который был задан пользователем заранее.

В операционной системе Windows перед тем, как создавать окно, программист должен зарегистрировать в системе шаблон, описывающий основные конструктивные параметры окна. Этот шаблон имеет уникальное имя в системе, и это имя в терминологии Windows называется классом (Class) окна. Например, в системе может быть открыто 20 окон программы Notepad и все эти 20 окон могут иметь совершенно разные заголовки. Однако, все эти 20 окон будут иметь класс Notepad, поскольку они все созданы из шаблона с названием Notepad, который зарегистрирован в системе программой Notepad. Класс окна в отличие от заголовка окна не виден пользователю, однако программа Proxy32 может проверять класс окна для того, чтобы решить, удовлетворяет ли данное окно критерию, заданному пользователем. Когда пользователь задает критерий, по которому программа Proxy32 должна автоматически выбирать окна внешних процессов для перемещения их внутрь рабочего пространства, он может задать два параметра:

Для того, чтобы окно было выбрано, оба параметра окна должны соответствовать их шаблонам (pattern), которые пользователь задает в формате regular expressions. Например, для того, чтобы захватить конкретное окно Notepad пользователь должен задать класс окна как "Notepad", а также задать конкретный заголовок окна, например, "file.txt - Notepad". Для того, чтобы захватить все 20 окон Notepad, открытые в системе, пользователь должен задать класс окна как "Notepad", а также задать шаблон для заголовка окна как ".*", при этом любой заголовок окна будет удовлетворять заданному шаблону.

Заголовок окна является удобным параметром, чтобы отличать одно окно от другого, но, к сожалению, он может изменяться много раз за время жизни окна под управлением самой программы, которая создала окно. Поэтому использование только заголовка не является достаточным. Класс окна позволяет отличать один тип окна от другого, поскольку класс - это внутреннее системное имя шаблона, из которого это окно создается. Класс позволяет отличать друг от друга как окна, создаваемые различными процессами, так и различные типы окон, создаваемые одним процессом. Например, программа Notepad создает окно класса Notepad, а программа WordPad создает окно класса WordPadClass. Это позволяет различить окно программы Notepad от окна программы WordPad даже, если эти два окна имеют одинаковые заголовки.

Поскольку класс - это внутреннее системное имя шаблона, из которого это окно создается, то пользователь должен использовать специальные средства, чтобы узнать класс окна для написания критерия выбора окна. Например, для того, чтобы узнать, что программа WordPad создает окно класса WordPadClass можно использовать два подхода:

2. Окна внешних процессов, запускаемых из Proxy32

2.1. Пускач типа LAUNCH

Пускач типа LAUNCH позволяет пользователю запустить любую программу Windows(например, Putty, NotePad, FireFox и др.) и захватить ее окно и поместить его внутрь рабочего пространства. При создании пускача LAUNCH пользователь должен задать несколько текстовых полей:

При выполнении пускача LAUNCH командная строка программы передается в систему для запуска. Программа запускается, а ее начальная директория задается в соответствии с содержимым стартовой директории пускача LAUNCH. В течение 5-ти секунд после запуска программы Proxy32 пытается захватить одно из окон, созданных программой, используя для этого шаблоны для класса и заголовка окна, заданные пользователем в конфигурации пускача LAUNCH. Proxy32 сканирует все вновь созданные программой окна, пытаясь найти окно, у которого класс и заголовок соответствуют шаблонам, заданным пользователем в конфигурации пускача LAUNCH. Если такое окно найдено в пределах 5-ти секунд, то оно захватывается внутрь рабочего пространства и ему присваивается новый заголовок, который задан пользователем в поле тултипсов пускача LAUNCH. Если такое окно не найдено в пределах 5-ти секунд, то выполнение пускача LAUNCH прекращается, а все окна запущенной программы остаются на рабочем столе Windows, а не внутри рабочего пространства.

После выполнения первого пускача LAUNCH или VIEWER пользователь не может запустить второй пускач LAUNCH или VIEWER, пока продолжается поиск окон программы, которая запущена первым пускачем (не больше 5-ти секунд).

2.2. Пускач типа VIEWER

Пускач типа LAUNCH является очень гибким, но он требует от пользователя задавать большое количество информации в своей конфигурации. Для частного случая, когда пользователь задает путь к файлу или его web адрес и хочет, чтобы файл автоматически открывался приложением Windows, которое ассоциировано с типом этого файла или web адреса, то можно использовать пускач типа VIEWER.

При создании пускача VIEWER пользователь должен задать несколько текстовых полей:

При выполнении пускача VIEWER поле, которое содержит путь к локальному файлу или web адресу, используется, чтобы найти строку в специальной таблице, которая задает глобальную конфигурацию для всех пускачей типа VIEWER и хранится отдельно от дерева пускачей. Эта таблица может редактироваться с помощью диалога конфигурации вьювера Proxy32 (который вызывается пунктом "Put external windows into workspace/Edit VIEWER Definitions" всплывающего меню главного окна). Эта таблица сохраняется при выходе из программы в файле "ViewerDefinition.xml", который находится в стартовой директории программы Proxy32, и загружается из этого файла при каждом старте программы Proxy32. Каждая строка в этой таблице содержит следующие поля:

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

Когда такая строка найдена, Proxy32 строит командную строку для запуска VIEWER. Для этого к полю, которое содержит путь к выполняемому exe модулю программы, после пробела добавляется имя файла или web адрес, заданный в выполняемом пускаче VIEWER. Полученная командная строка передается в систему для запуска. Дальнейший процесс выполнения пускача VIEWER совпадает с процессом выполнения пускача LAUNCH за исключением того, что необходимые для выполнения пускача текстовые поля берутся из найденной строки в таблице конфигурации VIEWER.

При выполнении пускача VIEWER командная строка программы передается в систему для запуска. Программа запускается, а ее начальная директория задается в соответствии с содержимым поля стартовой директории в найденной строке в таблице конфигурации VIEWER. В течение 5-ти секунд после запуска программы Proxy32 пытается захватить одно из окон, созданных программой, используя для этого шаблоны для класса и заголовка окна, заданные пользователем в конфигурации пускача VIEWER. Proxy32 сканирует все вновь созданные программой окна, пытаясь найти окно, у которого класс и заголовок соответствуют шаблонам, заданным пользователем в найденной строке в таблице конфигурации VIEWER. Если такое окно найдено в пределах 5-ти секунд, то оно захватывается внутрь рабочего пространства и ему присваивается новый заголовок, который задан пользователем в поле тултипсов пускача VIEWER. Если такое окно не найдено в пределах 5-ти секунд, то выполнение пускача VIEWER прекращается, а все окна запущенной программы остаются на рабочем столе Windows, а не внутри рабочего пространства.

После выполнения первого пускача LAUNCH или VIEWER пользователь не может запустить второй пускач LAUNCH или VIEWER, пока продолжается поиск окон программы, которая запущена первым пускачем (не больше 5-ти секунд).

Пускач VIEWER имеет еще одно важное свойство. Локальные файлы, на которые ссылаются пускачи VIEWER/SCRIPT/I-SCRIPT считаются привязанными (linked) к дереву пускачей. Это значит. что в если в процессе экспорта/импорта дерева пускачей экспортируется/импортируется пускач который ссылается на файл, то файл, на который ссылается пускач, также экспортируется/импортируется вместе с деревом.

3. Окна внешних процессов, запускаемых из Windows

3.1. Автоматический захват окон внешних процессов, запускаемых из Windows (AUTOGRAB)

Proxy32 позволяет автоматически захватывать окна внешних процессов, запускаемых из Windows. Эта функция обозначается термином AUTOGRAB, что переводится как автоматический захват. Proxy32 автоматически сканирует все новые окна, создаваемые в системе, и проверяет их на соответствие таблице конфигурации AUTOGRAB.

Эта таблица может редактироваться с помощью диалога редактированияконфигурации AUTOGRAB Proxy32 (который вызывается пунктом "Put external windows into workspace/Edit AUTOGAB patterns" всплывающего меню главного окна). Эта таблица сохраняется при выходе из программы в файле "AutograbDefinition.xml", который находится в стартовой директории программы Proxy32, и загружается из этого файла при каждом старте программы Proxy32. Каждая строка в этой таблице содержит следующие поля:

Для каждого нового окна Proxy32 просматривает все строки таблицы конфигурации AUTOGAB последовательно, начиная с первой, до тех пор пока не будет найдена строка, для которой класс и заголовок нового окна соответствуют шаблонам, заданным пользователем в этой строке. Если такая строка найдена, то это новое окно захватывается внутрь рабочего пространства.

Каждая индивидуальная строка захвата может быть разрешена или запрещена с помощью галочки, которая находится во втором поле строки при редактировании таблицы конфигурации AUTOGRAB с помощью диалога редактирования конфигурации AUTOGRAB Proxy32 (который вызывается пунктом "Put external windows into workspace/Edit AUTOGAB patterns" всплывающего меню главного окна). Кроме того, сканирование и захват новых окон может быть запрещено полностью с помощью пункта "Put external windows into workspace/EnableAUTOGRAB" всплывающего меню главного окна.

3.2. Ручной захват окон внешних процессов, запускаемых из Windows (Manual GRAB)

3.2.1. Ручной захват 1 (Hold-LeftCtrl-and-Hold-Left-Button-for-1-second Manual GRAB)

Пользователь должен одновременно удерживать в нажатом состоянии левую клавишу Control а также удерживать в нажатом состоянии левую кнопку мыши на заголовке захватываемого окна. При этом указатель мыши должен быть расположен на заголовке захватываемого окна и одновременно поверх внутренней части главного окна. Если все эти условия выполнены на протяжении как минимум одной секунды, окно внешнего процесса будет захвачено и помещено внутрь рабочего пространства (если оно не внутри рабочего пространства) или освобождено из рабочего пространства (если оно уже находится внутри рабочего пространства). Требование удерживать указатель мышки на заголовке окна не позволяет захватывать окна, у которых нет заголовка. В диалоге опций имеется галочка, которая позволяет обойти это ограничение. Если эта галочка выбрана, то можно удерживать указатель мышки на любой части захватываемого окна, позволяя теми самым захватывать окна, у которых нет заголовка. Эта опция выключена по умолчанию.

3.2.2. Ручной захват 2 (Start-Capture-then-click-on-the-Window-Title Manual GRAB)

Пользователь должен начать процесс захвата внешнего окна путем выбора команды "Put external windows into workspace/GRAB external window into workspace by clicking inside of the grabbed window" из всплывающего меню главного окна. Затем пользователь должен кликнуть левой кнопкой мышки на заголовке окна внешнего процесса, чтобы захватить это окно внутрь рабочего пространства. Требование кликнуть левой кнопкой мышки на заголовке окна не позволяет захватывать окна, у которых нет заголовка. В диалоге опций имеется галочка, которая позволяет обойти это ограничение. Если эта галочка выбрана, то можно кликнуть левой кнопкой мышки на любой части захватываемого окна, позволяя теми самым захватывать окна, у которых нет заголовка. Эта опция выключена по умолчанию.

3.2.3. Ручной захват 3 (Select-From-the-list-of-Windows Manual GRAB)

Пользователь должен начать процесс захвата внешнего окна путем выбора команды "Put external windows into workspace/GRAB external window into workspace by selecting grabbed window name from the list" из всплывающего меню главного окна. Затем пользователь должен выбрать имя захватываемого окна из списка в диалоге для того, чтобы захватить это окно внутрь рабочего пространства. В списке будут присутствовать только названия окон, у которых есть заголовки. Это не позволяет захватывать окна, у которых нет заголовка. В диалоге опций имеется галочка, которая позволяет обойти это ограничение. Если эта галочка выбрана, то в списке будут присутствовать также окна, которые не имеют заголовков, позволяя теми самым захватывать окна, у которых нет заголовка. Эта опция выключена по умолчанию.

Примечание: Под заголовком окна понимается планка или полоска заголовка (Titlebar).

4. Освобождение окон внешних процессов из рабочего пространства

Окна внешних процессов, которые были захвачены внутрь рабочего пространства могут быть освобождены из рабочего пространства и возвращены назад на рабочий стол Windows. Это может быть, например, сделано с помощью процедуры, описанной в разделе 3.2.1. Кроме того, в всплывающем меню главного окна имеется две команды: "Put external windows into workspace/RELEASE SELECTED external window in the list" и "Put external windows into workspace/RELEASE ALL external window in the list". Первая команда освобождает окно внешнего процесса, которое выбрано в окне "Selector". Это окно также является активным и помечено красной этикеткой со словом "ACTIVE". Вторая команда освобождает все захваченные окна внешних процессов. При закрытии программы Proxy32 все захваченные окна внешних процессов закрываются автоматически. Если внешний процесс, создавший закрытое окно, не прекращает свою работу автоматически при закрытии этого окна, то Proxy32 убивает такой внешний процесс перед тем, как завершить свою работу.

5. Работа с окнами внешних процессов внутри рабочего пространства

Proxy32 позволяет помещать окна внешних процессов (Notepad, Wordpad, Firefox и т.д.) внутрь рабочего пространства, чтобы группировать их вместе с окнами терминалов. Окна внешних процессов также отображаются в списке “Selector” и ведут себя в основном также как и окна встроенного терминала за несколькими исключениями.

Aктивное окно внешнего процесса помечено красной этикеткой со словом "ACTIVE".

Окна внешних процессов, в принципе, могут сами управлять своим положением, размером и фокусом клавиатуры, что может приводить к непредсказуемому поведению таких окон внутри рабочего пространства. К счастью, Notepad, Wordpad, Firefox и т.д. не пытаются сами контролировать поведение своего окна наперекор желаниям пользователя и поэтому могут быть успешно использованы внутри рабочего пространства.

Заголовок окна внешнего процесса может быть изменен, но его нельзя редактировать "на месте" как для встроенного терминала. Кроме того, заголовок может быть позднее изменен самим внешним процессом если такая функция заложена в его программу (примером служит окно внешнего терминала PuTTY, которое может изменять свой заголовок по команде с удаленного компьютера). Встроенный терминал Proxy32 тоже может изменять свой заголовок по команде с удаленного компьютера, но эта функция первоначально запрещена до тех пор пока пользователь не решит изменить настройки встроенного терминала.

В отличие от окна Proxy32 терминала (который содержит встроенные модули для выполнения команд, скриптов и плугин, запущенных из LauncherTree) активное окно внешнего процесса может принимать только команды (но не скрипты и плугины) из LauncherTree. При выполнении команды активное окно внешнего процесса поднимается на передний план и получает фокус клавиатуры, затем текст команды (после подстановки именованных параметров и паролей) вставляется в системный буфер клавиатуры так, как будто он был введен туда пользователем, нажимающим клавиши. Из системного буфера клавиатуры текст команды попадает в окно активного внешнего процесса в текстовое поле, которое в данный момент имеет фокус клавиатуры. Например, это может быть поле ввода имени пользователя или пароля на веб-странице, которая в данный момент отображается в браузере (если окно браузера выбрано в качестве активного в списке внутренних окон в “Selector”). В этом примере команда может содержать имя пользователя и пароль разделенные символом табуляции. Если в начале выполнения такой команды пользователь поставил курсор (фокус клавиатуры) в поле ввода имени пользователя на веб-странице, то команда сначала введет имя пользователя в поле ввода имени пользователя. Затем символ табуляции (содержащийся дальше в команде после имени пользователя) переведет фокус клавиатуры в поле ввода пароля на веб-странице и команда продолжит печатать теперь уже в поле ввода пароля. В программе имеется глобальная настройка которая позволяет пользователю выбрать что посылается в конце текста команды когда команда выполняется в окно внешнего процесса выбранного в списке селестора активного терминала. По умолчанию, команда автоматически завершается символом перехода на новую строку. При выполнении комады этот символ автоматически добавляется к тексту команды заданному пользователем. Две другие опции это не добавлять ничего или добавлять пару символов (возврат каретки а за ним перевод строки). Символ перехода на новую строку (который содержится в команде после пароля) вызовет срабатывание кнопки "Login" на веб-странице. В итоге выполнение одной единственной команды (двойное нажатие мышкой на команде, которая содержит имя пользователя, символ табуляции, пароль и, неявно, символ перехода на новую строку) заменяет полную процедуру "Login" как будто она была выполнена пользователем вручную с клавиатуры. Дополнительное удобство состоит в том, что имя пользователя и пароль могут храниться в именованных парамерах и паролях в программе Proxy32 и в этом случае их нельзя видеть открытым текстом при использовании и они хранятся в отдельном защищенном списке в программе Proxy32.

На рисунках внизу приведена конфигурация Proxy32 для процедуры "Login" для веб-страницы "Google checkout". Сначала пользователь запускает страницу в браузере путем двойного нажатия мышкой на VIEWER (который содержит адрес веб-страницы и этот адрес через файл "ViewerDefinition.xml" задает конкретный браузер и его настройки). При этом окно браузера становится активным окном внутри текущего рабочего пространства, а фокус клавиатуры помещается в поле ввода имени пользователя (которое является первым текстовым полем на веб-странице). После этого пользователь путем двойного нажатия мышкой на COMMAND (которая содержит имя пользователя, символ табуляции, пароль и, неявно, символ перехода на новую строку) выполняет полную процедуру “Login” как будто она была выполнена пользователем вручную с клавиатуры. Для успешного выполнения команды два именованных пароля должны быть заданы заранее в диалоге редактирования именованных параметров и паролей программы Proxy32.

Tree

Tree

COMMAND EDITOR DIALOG

COMMAND EDITOR DIALOG

VIEWER EDITOR DIALOG

VIEWER EDITOR DIALOG

PARAMETERS AND PASSWORD EDITOR

PARAMETERS AND PASSWORD EDITOR

Примечание.

Во всех случаях, когда при создании пускача требуется указать путь к локальному файлу, точка означает текущую директорию процесса Proxy32, который автоматически задает директорию, в которой находится файл Proxy32.exe в качестве своей текущей директории. В частности это справедливо для командной строки SHELL-TERMINAL, PLUGIN, для командной строки и стартовой директории LAUNCH, для указания пути к файлу в пускачах VIEWER, SCRIPT, I-SCRIPT, а также для командной строки и стартовой директории во всех строках таблицы конфигурации VIEWER, которая хранится в файле "ViewerDefinition.xml". Это не относится к ситуации, когда путь к файлу является частью команды, посылаемой на удаленное оборудование, например, в тексте пускаче COMMAND или в тексте файлов SCRIPT/I-SCRIPT, или в тексте команд, которые PLUGIN посылает на удаленное оборудование.