1. Brief introductory information

2. Windows of external processes launched from Proxy32
    2.1. Launcher of the LAUNCH type
    2.2. Launcher of the VIEWER type

3. Windows of external processes launched from Windows
    3.1. Automatic capture of windows of external processes launched from Windows (AUTOGRAB)
    3.2. Manual capture of windows of external processes launched from Windows (Manual GRAB)
        3.2.1. Manual capture 1 (Hold-LeftCtrl-and-Hold-Left-Button-for-1-second Manual GRAB)
        3.2.2. Manual capture 2 (Start-Capture-then-click-on-the-Window-Title Manual GRAB)
        3.2.3. Manual capture 3 (Select-From-the-list-of-Windows Manual GRAB)

4. Releasing windows of external processes from the workspace

5. Working with windows of external processes inside of the workspace

1. Brief introductory information

In Windows operating system user starts processes (applications/programs) and interact with them. Interaction is performed via windows that are created by the process. If process does not create its own window, operating system start such process in the Windows Console window. Usually, process creates one or several windows for interaction with the user. There are many processes that can be running at any given time, therefore, there will be many windows present on the user's desktop. Windows Operating system allows user to organize those windows on the desktop in a convenient way. System Shell Windows Explorer is expanding windows management functionality by adding TaskBar to the regular Window Desktop. Proxy32 application is creating windows process that in turn creates three windows on the Windows Desktop (Main window, LauncherTree window and Selector window). In addition, Proxy32 allows user to create windows of the built-in terminal and windows of the built-in script editor in the workspaces inside of the main window. Windows that are located in the workspaces inside of the main window are controlled via functions of the main window and not by the functions of the Windows Explorer. In particular, windows that are located in the workspaces inside of the main window are not represented on the Windows TaskBar. Therefore, proxy32 process creates 3 top-level windows (on the Windows Desktop) and two types of the windows inside of the main window. In addition, Proxy32 process can create various dialog windows to interact with the user. All those windows are created by the Proxy32 code and, therefore, they are considered to be internal in regards to Proxy32. Windows that are created by other Windows applications (for example, Notepad) are considered to be windows of external processes, because they are not created by the code of Proxy32 process. One of the most important features of Proxy32 is "Workspace Manager" that allows to manage windows of the built-in terminal and windows of the built-in script editor inside of the main window. It would be nice if Proxy32 "Workspace Manager" could also manage windows of external processes like Notepad (along with windows of the built-in terminal and windows of the built-in script editor) by first placing them inside of the workspaces in the main window. Therefore, Proxy32 has the capability to place windows of external processes inside of the workspace, where they can be managed by Proxy32 "Workspace Manager", become "active" and receive results of COMMAND launcher execution.

In order for "Workspace Manager" to manage windows of external processes such windows have to be first placed (captured) inside of the workspaces in the main window. Proxy32 allows to capture windows of external process both manually and automatically. Manual way is when user select the window to be captured by mouse pointer or selects name of the window to be captured from the list of the windows names. Automatic way is when Proxy32 scans internal list of windows in the system and automatically selects windows to be captured by using some criteria that was set by user in advance.

In the Windows operating system to create window programmer first has to register in the system the template that describes main parameters of the window to be created. This template must be registered under the name that is unique in the system. In Windows terminology name that is given to the template of the window is called "class of window". For example, there may be 20 Notepad windows open in the system at the same time, and all those 20 windows may have completely different titles. But all those 20 windows will have the same class name ("Notepad"), as they are using the same template (that is registered in the system by the Notepad application) when they are created by the system. Window Class unlike the window title is not visible to the user, but Proxy32 is capable to check class of any window in the system internally to decide whether such window is satisfying criteria that is given by the user. When specifying criteria that tells Proxy32 how to select windows for automatic capture into workspace, user should give two parameters:

For the window to be captured both parameters should match their patterns, given by the user in the regular expression format. For example, to automatically capture particular Notepad window user should specify class pattern as "Notepad" and title pattern to match the title of this particular Notepad window, for example, "file.txt - Notepad". In order to automatically capture all 20 Notepad windows that are open in the system, user should specify class pattern as "Notepad" and title pattern ".*" to match title of any window.

Window title is very convenient parameter to identify the window, but, unfortunately, it can change multiple times during the lifetime of the window under control of the application that created this window. Threfore, using only window title to identify the window is not enough. Window class allows to differentiate one type of the window from another as it is the internal name of the template from which window is created. Class allows to differentiate from each other windows that are created by different applications and also it allows to differentiate from each other different types of the windows created by the same process. For example, Notepad application creates window of the class "Notepad", and WordPad application creates window of the class "WordPadClass". This will allow to differentiate window of Notepad from the window of WordPad even if both windows have the same titles.

As class is internal system name of the template from which window is created, user has to use special means to find out the class of the window in order to be able to configure window selection criteria for capturing window into Proxy32 workspace. For example, to find out that WordPad application creates window with the class "WordPadClass" one can use two approaches:

2. Windows of external processes launched from Proxy32

2.1. Launcher of the LAUNCH type

Launcher of the LAUNCH type allows user to start and Windows application (for example, Putty, NotePad, FireFox etc) and capture its window into workspace. When creating Launcher of the LAUNCH type user should specify content for several text input fields:

When LAUNCH launcher is executed, command line is passed to the system to start application that is given in this command line. Application is starting and its start up directory is set according to the content of the start up directory field of the LAUNCH launcher. For the next 5 seconds Proxy32 is trying to capture one of the windows of the started application using the patterns for window class and title that were specified by user in the configuration of the LAUNCH launcher. Proxy32 scans all newly created by application windows trying to find a window that has class and title matching the patterns that are specified by user in the configuration of the LAUNCH launcher. If such window is found within 5 seconds, it is captured inside of the current workspace and Proxy32 will set for this window new title that is provided by the user in the tooltips field in the configuration of the LAUNCH launcher. If such window is not found within 5 seconds then execution of the LAUNCH launcher is completed. If launched application has created any windows then all such windows will be left on Windows Desktop and will not be captured into Proxy32 workspace.

After first launcher of the type LAUNCH or VIEWER has started executing user will not be able to start second launcher of the type LAUNCH or VIEWER until Proxy32 finishes search for the window that was initiated by first launcher (this search is taking no more than 5 seconds).

2.2. Launcher of the VIEWER type

Launcher of the type LAUNCH is very flexible, but it requires from the user to supply large amount of the information to configure the launcher. For the particular scenario, when user specifies only path to the file or its web address and wants this file to be opened by particular Windows application that is associated with this file type or with the type of the web address, VIEWER launcher can be used instead of the LAUNCH launcher.

When creating VIEWER launcher user should specify content for several text fields:

During execution of the VIEWER launcher the field that contains path to the local file or web-address is used to find row in the special table that keeps global configuration for all VIEWER launchers and is saved separately from LauncherTree. This table can be edited with Proxy32 VIEWER configuration dialog (that can be invoked by command "Put external windows into workspace/Edit VIEWER Definitions" in the popup menu of the main window). This table is saved on exit into the file "ViewerDefinition.xml" that is located in the Proxy32 startup directory and loaded from this file on every start of Proxy32. Every row in this table contains following fields:

When VIEWER launcher is executed the field that contains path to the local file or web address is used to find the row in the global table of VIEWER configuration. All rows in this table (starting from the first) are sequentially tested until the row is found for which regular expression pattern in the first field of the row is matching path to local file or web address that is stored in the VIEWER launcher that is being executed.

When such row is found Proxy32 will build command line to launch VIEWER application. To do so, Proxy32 takes path to the executable module configured in this row and then after the separating space adds to it path to local file or web address that is stored in the VIEWER launcher that is being executed. Resulting command line is passed to the system for launch. The rest of the execution of the VIEWER launcher is the same as for LAUNCH launcher except that needed configuration information is taken from the row that was found in the global table of VIEWER configuration.

When VIEWER launcher is executed, command line is passed to the system to start application that is given in this command line. Application is starting and its start up directory is set according to the content of the start up directory field in the row that was found in the global table of VIEWER configuration. For the next 5 seconds Proxy32 is trying to capture one of the windows of the started application using the patterns for window class and title that were specified by user in the the row that was found in the global table of VIEWER configuration. Proxy32 scans all newly created by application windows trying to find a window that has class and title matching the patterns that are specified by user in the the row that was found in the global table of VIEWER configuration. If such window is found within 5 seconds, it is captured inside of the current workspace and Proxy32 will set for this window new title that is provided by the user in the tooltips field in the configuration of the VIEWER launcher. If such window is not found within 5 seconds then execution of the VIEWER launcher is completed. If launched application has created any windows then all such windows will be left on Windows Desktop and will not be captured into Proxy32 workspace.

After first launcher of the type LAUNCH or VIEWER has started executing user will not be able to start second launcher of the type LAUNCH or VIEWER until Proxy32 finishes search for the window that was initiated by first launcher (this search is taking no more than 5 seconds).

VIEWER launcher has one very important property. Local files that are referred from VIEWER/SCRIPT/I-SCRIPT launchers are considered linked to the LauncherTree. That means that during the export/import of the tree or subtree that contains launcher referring to the local file, referred local file is also exported/imported together with the referring tree/subtree.

3. Windows of external processes launched from Windows

3.1. Automatic capture of windows of external processes launched from Windows (AUTOGRAB)

Proxy32 allows automatic capture of the windows of the external processes that are launched from Windows. This function is referred to as AUTOGRAB. Proxy32 automatically scans all newly created windows in the system to see if they match to any row in the global AUTOGRAB configuration table.

This table can be edited with the Proxy32 AUTOGRAB configuration edit dialog (that is invoked by command "Put external windows into workspace/Edit AUTOGAB patterns" in the popup menu of the main window). This table is saved on exit in the file "AutograbDefinition.xml" that is located in the Proxy32 startup directory and loaded from this file on every start of Proxy32. Every row in this table contains following fields:

For every new window Proxy32 will sequentially step through all rows in the AUTOGRAB configuration table until the row is found for which class and title on the new window are matching regular expression patterns that are specified in the last two fields of this row. If such row is found then new window is captured inside of the workspace.

Every individual AUTOGRAB configuration row can be enabled or disabled with the check mark that is located in the second field when editing AUTOGRAB configuration table with the Proxy32 AUTOGRAB configuration edit dialog (that is invoked by command "Put external windows into workspace/Edit AUTOGAB patterns" in the popup menu of the main window). In addition, scanning and capture of the new windows can be completely disabled by un-checking the option "Put external windows into workspace/EnableAUTOGRAB" in the popup menu of the main window.

3.2. Manual capture of windows of external processes launched from Windows (Manual GRAB)

3.2.1. Manual capture 1 (Hold-LeftCtrl-and-Hold-Left-Button-for-1-second Manual GRAB)

User should simultaneously hold in the pressed state left Control key and also hold in the pressed state left mouse button while mouse pointer is located on the titlebar of the window being captured. While doing so, mouse pointer should be located both on the titlebar of the window being captured and above the internal part of the main window. If all those conditions are satisfied for at least one second, window of the external process will be captured and and placed inside of the current workspace (if this window is not yet inside of the workspace) or it will be released from the workspace (if it is already inside of the workspace). Requirement to hold mouse pointer on the titlebar of the window being captured does not allow to capture windows that do not have titlebar. In the Options Dialog there is a check mark that allows to bypass this limitation. If this check mark is set, one can hold mouse pointer on the any part of the window being captured, therefore, allowing to capture windows that do not have the titlebar. This option is off by default.

3.2.2. Manual capture 2 (Start-Capture-then-click-on-the-Window-Title Manual GRAB)

User should start process of capturing of the window of the external process by selecting command "Put external windows into workspace/GRAB external window into workspace by clicking inside of the grabbed window" in the popup menu of the main window. Then user should click left mouse button on the titlebar of the window of external process to capture it inside of the workspace. Requirement to click mouse pointer on the titlebar of the window being captured does not allow to capture windows that do not have titlebar. In the Options Dialog there is a check mark that allows to bypass this limitation. If this check mark is set, one can click mouse pointer on the any part of the window being captured, therefore, allowing to capture windows that do not have the titlebar. This option is off by default.

3.2.3. Manual capture 3 (Select-From-the-list-of-Windows Manual GRAB)

User should start process of capturing of the window of the external process by selecting command "Put external windows into workspace/GRAB external window into workspace by selecting grabbed window name from the list" in the popup menu of the main window. Then user should select name of the window from the list to capture it inside of the workspace. List will contain only names of the windows that have titlebar. This does not allow to capture windows that do not have titlebar. In the Options Dialog there is a check mark that allows to bypass this limitation. If this check mark is set, list will also contain the names of the windows that do not have titlebar, therefore, allowing to capture windows that do not have the titlebar. This option is off by default.

4. Releasing windows of external processes from the workspace

Windows of the external processes that were captured inside of the workspace can be released from the workpspace and placed back on Windows Desktop. This can be done, for example, with the procedure described in section 3.2.1. In addition, in the popup menu of the main window thre are two commands : "Put external windows into workspace/RELEASE SELECTED external window in the list" and "Put external windows into workspace/RELEASE ALL external window in the list". First command is releasing window of the external process that is selected in the Selector window. This window is also active and labelled with the red label with the word "ACTIVE". Second command releases all windows of the external processes that are captured by Proxy32. When Proxy32 is closed all captured windows of external processes are closed automatically. If external process that has created closed window does not finish its work automatically on closing its window then Proxy32 will kill such external process before finishing its work.

5. Working with windows of external processes inside of the workspace

Proxy32 allows to place windows of external processes (Notepad, Wordpad, Firefox etc) inside of the workspace to group them together with the windows of the Proxy32 built-in terminal. Windows of the external processes are also displayed in the list in the Selector window and behave mostly like windows of the built-in terminal with a few exceptions.

Active window of the external process is labelled by the red sticker with the word "ACTIVE".

Technically, external processes can control position, size and focus of the windows that they create and this may result in unpredictable behavior of such windows inside of the workspace. Luckily, Notepad, Wordpad, Firefox etc do not try to control behavior of their windows against user wish and, therefore, their windows can be successfully used inside of workspace.

Title of the window of the external process can be changed but it cannot be edited in place as for the window of the built-in terminal. Besides, the title can be later changed by the external process that has created the window if such functionality is built into its program (for example, external terminal PuTTY can change title of its own window by the command from the remote computer). Proxy32 built-in terminal can also change title of its own window by the command from the remote computer, but this functionality is initially disabled until user decides to change setting of the built-in terminal.

Unlike window of the Proxy32 built-in terminal (that contains built-in modules to execute COMMANDs, SCRIPTs and PLUGINs that are started from the LauncherTree) active window of the external process can receive only COMMANDs (but not SCRIPTs or PLUGINs) from the LauncherTree. When COMMAND is executed active window of external process is brought to the front and receives keyboard focus, then text of the COMMAND (after substitution of the parameters) is injected into system keyboard buffer as if it was typed by user from the keyboard. From system keyboard buffer command text is automatically passed into the active window of external process into the text field that has keyboard focus (text cursor) at this particular moment. For example, it could be text field to enter user name or password on the web page that is currently displayed in the web browser (if browser window is "active"). In this example, command text can contain user name and password separated by the tabulation character. If before executing such command user has placed text cursor (keyboard focus) into the field for entering user name on the web page then command first will enter user name into the field for entering user name. Then tabulation character that is present in the text of the command will move text cursor (keyboard focus) into the text field for entering password on the same web page and command will continue by entering password into this field. Proxy32 has global setting that lets user to choose what line terminator will be sent at the end of the COMMAND text if COMMAND is executed to the active window of external process. By default COMMAND is ended by sending "new line" character. When COMMAND is executed this character is automatically appended to the text that is put by user into COMMAND launcher. Two other options are to append nothing or to append "carriage return" character followed by "new line" character. "New line" character (that is automatically added to COMMAND text after password) will trigger pressing of the "Login" button on the same web page. As a result, executing single COMMAND launcher (double click on the COMMAND launcher that contains user name, tabulation character, password and implicitly, "new line" character) can replace the whole login procedure as if it was executed by user manually via keyboard. Additional benefit is that user name and password can be stored in the substitution parameters of Proxy32 and, if saved in PROXYPASSWORD substitution parameters, they will not be visible as open text.

Figures below show Proxy32 configuration to automatically execute "Login" for "Google checkout" web page. First, user opens web page in the browser by double-clicking on the VIEWER launcher (that contains web page address and this web page address via file "ViewerDefinition.xml" specifies to use particular browser and how to capture its window inside of the workspace). This will make newly created browser window active inside of the workspace and keyboard focus will be placed into the text field for entering user name (first text field on the web page). The text field to place keyboard focus is selected either via design of the web page or by default behavior of the browser (to place keyboard focus to the first text field on the web-page). Then user initiates "Login" procedure by double clicking on the COMMAND launcher (that contains user name, tabulation character, password and implicitly, "new line" character) and it is executed as if user manually did login via keyboard. To execute COMMAND launcher without receiving dialog asking user to supply values for substitution parameters user should assign values to both named PROXYPASSWORD parameters ("Google checkout user name" and "Google checkout password") and set them to "do not ask again" mode in advance via Proxy32 parameters editing dialog. To invoke Proxy32 parameters editing dialog user can, for example, right-click on the COMMAND launcher and select "Edit Parms/Passwords..." from the right-click popup menu.

Tree

Tree

COMMAND EDITOR DIALOG

COMMAND EDITOR DIALOG

VIEWER EDITOR DIALOG

VIEWER EDITOR DIALOG

PARAMETERS AND PASSWORD EDITOR

PARAMETERS AND PASSWORD EDITOR

Note.

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