CloseWindow
CloseWindow>window_title
Attempts to close the specified window. The window_title may contain the * symbol at the end to indicate a substring match.
If the WIN_USEHANDLE variable is set to 1 window_title must be a window handle.
Note:
Please note: this command simply sends the internal Windows WM_CLOSE message to the target window. This is the internal instruction to tell the window to close. However, applications all interpret this instruction differently and there is no guarantee that it will cause the window to close. If CloseWindow fails to close the window we recommend simulating user input to close it instead (e.g. by sending ALT-F4 or equivalent).If the specified window is the main window of an application, then that application will begin to close down. Any processing that the application does on exit will be carried out as usual.
If the last character of the window title specified is an asterisk (*), script will attempt to close the first window whose title matches the text entered exactly. If it cannot make an exact match it then looks at all windows and selects the first one it finds whose title contains the entered text (using a case-insensitive search). This solves the problem with applications such as Word or Netscape which change their titles depending on the document loaded. It is best to try to provide an exact (including case) window title to ensure the correct window is found, as many applications have multiple invisible windows with similar names. Specifying text without a trailing asterisk will force script to only look for an exact match.
It is possible to limit the type of windows this command affects using the WF_TYPE variable:
Let>WF_TYPE=0 // No Child Windows
Let>WF_TYPE=1 // ALLWindows (Default)
Let>WF_TYPE=2 // Visible Windows Only
Let>WF_TYPE=3 // Child Windows Only
A Regular Expression can be used in window_title if WIN_REGEX is set to 1.
Abbreviation : Clo
See also: GetWindowPos & GetActiveWindow
CloseWindow Example
CloseWindow>notepad*
FindWindowWithText
FindWindowWithText>text_to_find,setfocus_flag,result_variable
This function attempts to locate a window containing somewhere within it the text specified in text_to_find. setfocus_flag can be set to 1 or 0. If set to 1, the function will activate the window it finds containing the specified text. If a window is found, result_variable will contain the found window's title text. If no window is found it will contain "NOT FOUND".
If the WIN_USEHANDLE variable is set to 1 result_variable will contain the window's handle.
Note:
Not all text can be detected successfully. Some applications, such as Word Processors, in order to provide their more complex functionality have to display text in the form of graphics, so do not manifest textual data to other applications. FindWindowWithText uses the same routines as the View System Windows tool. So to see what text can be detected at any particular time use the View System Windows tool.This function is useful when an application has two windows with the same name, and allows the correct one to be located and focused.
Abbreviation : Fin
FindWindowWithText Example
FindWindowWithText>Continue,1,windowname
GetActiveWindow
GetActiveWindow>window_title,X,Y[,Width,Height]
Retrieves information about the current active window. The window title, and top left coordinates of the active window are stored in window_title, X and Y.
If the WIN_USEHANDLE variable is set to 1 window_title will contain the window's handle.
The optional parameters Width and Height will return the width and height of the window respectively.
If GAW_TYPE is set to 1 (default is 0) this command will retrieve information about the active child window of the active foreground window. If there are no child windows window_title will be set to an empty string. For default behaviour set GAW_TYPE back to 0.
Abbreviation : GAW
GetWindowChildList
GetWindowChildList>parent_handle,child_list
Returns a list of child objects/windows belonging to the specified parent handle.
By default child_list returns a list of window titles/captions. If WIN_USEHANDLE it set to 1 child_list will be a list of handles.
GetWindowHandle
GetWindowHandle>window_title,handle
Returns the window handle of the window specified by it's window title.
Window handles are assigned when a window is created by the system so they change from session to session. Using window handles is more reliable than using window titles which are not unique and may require substring matching. You can use GetWindowHandle to retrieve the window handle and then refer to it subsequently in other window commands when you need to access that window by setting WIN_USEHANDLE to 1. See also GetActiveWindow which can return the handle of the currently active window.
The window_title may contain the * symbol at the end to indicate a substring match.
If the last character of the window title specified is an asterisk (*), script will attempt to locate the first window whose title matches the text entered exactly. If it cannot make an exact match it then looks at all windows and stops at the first one it finds whose title contains the entered text (using a case-insensitive search). This solves the problem with applications such as Word or Netscape which change their titles depending on the document loaded. It is best to try to provide an exact (including case) window title to ensure the correct window is found, as many applications have multiple invisible windows with similar names. Specifying text without a trailing asterisk will force script to only look for an exact match.
A Regular Expression can be used in window_title if WIN_REGEX is set to 1.
Abbreviation: GWH
See also: GetActiveWindow
GetWindowHandle Example
GetWindowHandle>Notepad*,notepad_hwnd
Let>WIN_USEHANDLE=1
SetFocus>notepad_hwnd
GetWindowList
GetWindowList>window_list
Returns a list of open top-level window titles. The list is delimited by carriage-return-line-feed pairs (CRLF).
To return window handles instead of window titles first set the WIN_USEHANDLE variable to 1.
Abbreviation: GWL
GetWindowList Example
//Loop through a list of windows
GetWindowList>winlist
Separate>winlist,CRLF,windows
Let>k=1
Repeat>k
Let>this=windows_%k%
MessageModal>this
Let>k=k+1
Until>k>windows_count
//Populate a dialog combo box with a window list
GetWindowList>Dialog1.msComboBox1.Items.Text
ResetDialogAction>Dialog1
GetWindowNames
GetWindowNames>handle,title,class
Given a window handle GetWindowNames will return the window's title caption and class name in the title and class variables.
Abbreviation: GWN
GetWindowNames Example
Let>WIN_USEHANDLE=1
GetWindowList>allWindows
Separate>allWindows,CRLF,wins
If>wins_count>0
Let>k=0
Repeat>k
Let>k=k+1
Let>this_window=wins_%k%
GetWindowNames>this_window,strTitle,strClass
// ....
Until>k=wins_count
GetWindowParent
GetWindowParent>handle,parent_type,result
Returns the parent handle of the object with the given handle. parent_type can be one of the following:
- 1: Retrieve the parent window
- 2: Retrieve the root parent window
- 3: Retrieve the root owner window
GetWindowPos
GetWindowPos>window_title,X,Y
Locates the window specified in window_title and retrieves its upper left screen coordinates. X and Y are variables in which to store the coordinates. window_title may be a variable or literal.
If the WIN_USEHANDLE variable is set to 1 window_title must be a window handle.
The window_title may contain the * symbol at the end to indicate a substring match.
If the last character of the window title specified is an asterisk (*), script will attempt to setfocus to the first window whose title matches the text entered exactly. If it cannot make an exact match it then looks at all windows and sets focus to the first one it finds whose title contains the entered text (using a case-insensitive search). This solves the problem with applications such as Word or Netscape which change their titles depending on the document loaded. It is best to try to provide an exact (including case) window title to ensure the correct window is found, as many applications have multiple invisible windows with similar names. Specifying text without a trailing asterisk will force script to only look for an exact match.
A Regular Expression can be used in window_title if WIN_REGEX is set to 1.
Abbreviation : GWP
GetWindowPos Example
GetWindowPos>My Computer,XWindowPos,YWindowPos
The following example achieves the same result as the MouseMoveRel command, moving to the point 10,10 relative to Notepad :
GetWindowPos>notepad*,npX,npY
Add>npX,10
Add>npY,10
MouseMove>npX,npY
GetWindowProces
GetWindowProcess>window_title,process_id,process_name
Retrieves the process ID and process name (filename) of the process that the specified window belongs to.
If the WIN_USEHANDLE variable is set to 1 window_title must be a window handle.
The window_title may contain the * symbol at the end to indicate a substring match.
If the last character of the window title specified is an asterisk (*), script will attempt to setfocus to the first window whose title matches the text entered exactly. If it cannot make an exact match it then looks at all windows and sets focus to the first one it finds whose title contains the entered text (using a case-insensitive search). This solves the problem with applications such as Word or Netscape which change their titles depending on the document loaded. It is best to try to provide an exact (including case) window title to ensure the correct window is found, as many applications have multiple invisible windows with similar names. Specifying text without a trailing asterisk will force script to only look for an exact match.
A Regular Expression can be used in window_title if WIN_REGEX is set to 1.
Abbreviation: GPW
GetWindowProces Example
GPW>Notepad*,pid,name
MessageModal>%pid% %name%
GetWindowSize
GetWindowSize>window_title,Width,Height
Locates the window specified in window_title and retrieves its width and height dimensions.
If the WIN_USEHANDLE variable is set to 1 window_title must be a window handle.
The window_title may contain the * symbol at the end to indicate a substring match.
If the last character of the window title specified is an asterisk (*), script will attempt to setfocus to the first window whose title matches the text entered exactly. If it cannot make an exact match it then looks at all windows and sets focus to the first one it finds whose title contains the entered text (using a case-insensitive search). This solves the problem with applications such as Word or Netscape which change their titles depending on the document loaded. It is best to try to provide an exact (including case) window title to ensure the correct window is found, as many applications have multiple invisible windows with similar names. Specifying text without a trailing asterisk will force script to only look for an exact match.
A Regular Expression can be used in window_title if WIN_REGEX is set to 1.
Abbreviation : GWS
GetWindowSize Example
GetWindowSize>My Computer,nWidth,nHeight
MessageModal>Dimensions: %nWidth%,%nHeight%
GetWindowText
GetWindowText>window_title,text
GetWindowText retrieves all the detectable text contained within the specified window. Specify the window using the exact window title. The text is retrieved as a list with each object's text on a new line.
If the WIN_USEHANDLE variable is set to 1 window_title must be a window handle.
GetWindowText retrieves the published text property of the specified window/object. Not all text that you see on the screen is retrievable in this way. Some text is painted via lower level routines and some text is graphical. Some objects, such as labels, are not windowed controls, and therefore text associated with them cannot be retrieved with GetWindowText. Try the new GetTextAtPoint, GetTextInRect and GetWindowTextEx commands which use lower level hooks to trap more text.
Abbreviation : GWT
GetWindowText Example
GetWindowText>Document - WordPad,WordPadText
IfWindowOpen
IfWindowOpen
IfWindowOpen>window_title[,label_name[,false_label_name]]
statements
[ [Else
else statements]
Endif ]
Checks to see if the specified window is open. If so the first statements are executed. Otherwise the else statements are executed. Optionally, instead of Else and Endif a label or subroutine name can be specified.
When label names are specified the command causes the script to continue from the specified label without running any other lines of code in between. If a second false label is specified, execution will jump to that label if the expression resolves false. Subroutine names can also be specified. When specifying a subroutine name execution will jump to that subroutine and return to the line after the If statement when the subroutine has completed.
The window_title may contain the * symbol at the end to indicate a wildcard.
If the WIN_USEHANDLE variable is set to 1 window_title must be a window handle.
If the last character of the window title specified is an asterisk (*), script will first attempt to find the first window whose title matches the text entered exactly. If it cannot make an exact match it then looks at all windows and selects the first one it finds whose title contains the entered text. This solves the problem with applications such as Word or Netscape which change their titles depending on the document loaded. It is best to try to provide an exact (including case) window title to ensure the correct window is found, as many applications have multiple invisible windows with similar names. Specifying text without a trailing asterisk will force script to only look for an exact match.
It is possible to limit the type of windows this command effects using the WF_TYPE variable:
Let>WF_TYPE=0 - No Child Windows Let>WF_TYPE=1 - ALL Windows (Default) Let>WF_TYPE=2 - Visible Windows OnlyAbbreviation : IfW
IfWindowOpen Example
IfWindowOpen>Notepad - [Untitled],donotepad
..
..
Label>donotepad
or, with a wildcard :
IfWindowOpen>notepad*,donotepad
..
..
Label>donotepad
IfNotWindowOpen
IfNotWindowOpen
IfNotWindowOpen>window_title[,label_name[,false_label_name]] statements [ [Else else statements] Endif ]The opposite of IfWindowOpen but with the boolean logic reversed. See IfWindowOpen for usage.
MoveWindow
MoveWindow>window_title,new_X,new_Y
Moves the window with the specified window title to the new coordinates. new_X,new_Y denotes the new upper left corner position. The window_title may contain the * symbol at the end to indicate a substring match.
If the WIN_USEHANDLE variable is set to 1 window_title must be a window handle.
If the last character of the window title specified is an asterisk (*), script will attempt to move the first window whose title matches the text entered exactly. If it cannot make an exact match it then looks at all windows and selects the first one it finds whose title contains the entered text (using a case-insensitive search). This solves the problem with applications such as Word or Netscape which change their titles depending on the document loaded. It is best to try to provide an exact (including case) window title to ensure the correct window is found, as many applications have multiple invisible windows with similar names. Specifying text without a trailing asterisk will force script to only look for an exact match.
It is possible to limit the type of windows this command affects using the WF_TYPE variable:
Let>WF_TYPE=0 // No Child Windows
Let>WF_TYPE=1 // ALL Windows (Default)
Let>WF_TYPE=2 // Visible Windows Only
A Regular Expression can be used in window_title if WIN_REGEX is set to 1.
Abbreviation : MVW
See also: ResizeWindow
MoveWindow Example
MoveWindow>notepad*,5,5
ResizeWindow
ResizeWindow>window_title,new_width,new_height
Resizes the window with the specified window with the new width and height dimensions. The window_title may contain the * symbol at the end to indicate a substring match.
If the WIN_USEHANDLE variable is set to 1 window_title must be a window handle.
If the last character of the window title specified is an asterisk (*), script will attempt to move the first window whose title matches the text entered exactly. If it cannot make an exact match it then looks at all windows and selects the first one it finds whose title contains the entered text (using a case-insensitive search). This solves the problem with applications such as Word or Netscape which change their titles depending on the document loaded. It is best to try to provide an exact (including case) window title to ensure the correct window is found, as many applications have multiple invisible windows with similar names. Specifying text without a trailing asterisk will force script to only look for an exact match.
It is possible to limit the type of windows this command affects using the WF_TYPE variable:
Let>WF_TYPE=0 // No Child Windows
Let>WF_TYPE=1 // ALL Windows (Default)
Let>WF_TYPE=2 // Visible Windows Only
A Regular Expression can be used in window_title if WIN_REGEX is set to 1.
Abbreviation : RSW
See also: MoveWindow
ResizeWindow Example
ResizeWindow>notepad*,500,300
SetFocus
SetFocus>window_title
Sets focus to the specified window. The window_title may contain the * symbol at the end to indicate a substring match.
If the WIN_USEHANDLE variable is set to 1 window_title must be a window handle.
If the last character of the window title specified is an asterisk (*), script will attempt to move the first window whose title matches the text entered exactly. If it cannot make an exact match it then looks at all windows and selects the first one it finds whose title contains the entered text (using a case-insensitive search). This solves the problem with applications such as Word or Netscape which change their titles depending on the document loaded. It is best to try to provide an exact (including case) window title to ensure the correct window is found, as many applications have multiple invisible windows with similar names. Specifying text without a trailing asterisk will force script to only look for an exact match.
To summarise:
SetFocus>window_title
Searches for a window title matching window_title fully and case-sensitively.
SetFocus>window_title*
First performs an exact case-sensitive match as above and if nothing found does a case-insensitive substring search where window_title can be anywhere within the matching window title.
For more control regular expressions can be used if WIN_REGEX is first set to 1.
To set focus to child windows, such as MDI children, first use SetFocus to focus the application, and then issue a second SetFocus for the child window. In most cases it is necessary to add the * symbol for child windows.
It is possible to limit the type of windows this command affects using the WF_TYPE variable:
Let>WF_TYPE=0 // No Child Windows
Let>WF_TYPE=1 // ALL Windows (Default)
Let>WF_TYPE=2 // Visible Windows Only
Let>WF_TYPE=3 // Child Windows Only
Abbreviation : Set
SetFocus Example
SetFocus>notepad*
Child Window Example:
SetFocus>Word* SetFocus>google*
RegEx Example:
//find first matching window that starts with 1 or more printable characters and ends with "Notepad" (e.g. Untitled - Notepad)
Let>WIN_REGEX=1 SetFocus>.+Notepad$
ShutDownWindows
ShutDownWindows>shutdown_type
Use this command to shutdown or reboot the machine. Set shutdown_type appropriatly as follows:
- 0: Shutdown
- 1: Reboot
- 2: Logoff
- 3: Forced Shutdown
- 4: Forced Reboot
- 5: Forced Logoff
The last three options should be used with care as they will force running processes to terminate and this can cause applications to lose data as they are not being allowed to close down gracefully.
Abbreviation : SDW
ShutDownWindows Example
//Reboot Workstation ShutDownWindows>1
WaitWindowChanged
WaitWindowChanged>timeout
This command causes script to wait until the foreground window changes. I.e. the foreground window's title (caption) changes, or a different window becomes the foreground window. If it doesn't change within the number of seconds specified in Timout, the command stops waiting and the variable WWC_RESULT is set to FALSE. WWC_RESULT is TRUE if the command terminated because the foreground window changed within the specified time. if Timeout is set to 0, the command will wait indefinitely.
Abbreviation : WWX
WaitWindowClosed
WaitWindowClosed>window_title
Waits for a specified window to close. Execution of the script will not continue until the window with the specified title text is no longer present or a specified timeout value is exceeded. The window title may contain the * symbol at the end to indicate a substring match.
If the WIN_USEHANDLE variable is set to 1 window_title must be a window handle.
If the last character of the window title specified is an asterisk (*), script will first attempt to find the first window whose title matches the text entered exactly. If it cannot make an exact match it then looks at all windows and selects the first one it finds whose title contains the entered text (using a case-insensitive search). This solves the problem with applications such as Word or Netscape which change their titles depending on the document loaded. It is best to try to provide an exact (including case) window title to ensure the correct window is found, as many applications have multiple invisible windows with similar names. Specifying text without a trailing asterisk will force script to only look for an exact match.
The system variable WW_TIMEOUT can be used to set the number of seconds after which this command should timeout. If set to zero (the default) the timeout will not occur and the command will continue indefinitely. If WW_TIMEOUT is used, WW_RESULT will indicate whether or not the command ended successfully. If it timed out WW_RESULT will be set to FALSE. If the window it was waiting for closed within the timeout setting, the WW_RESULT value will be set to TRUE.
It is possible to limit the type of windows this command affects using the WF_TYPE variable:
Let>WF_TYPE=0 // No Child Windows
Let>WF_TYPE=1 // ALL Windows (Default)
Let>WF_TYPE=2 // Visible Windows Only
Let>WF_TYPE=3 // Child Windows Only
A Regular Expression can be used in window_title if WIN_REGEX is set to 1.
By definition this function continually enumerates and loops through the list of windows open on the system. This is an intensive process and you may therefore see CPU usage increase during the wait. For most people this is not a problem. However, if you wish to reduce CPU usage you can set WIN_SLEEP to 1 at the expense of processing time (in theory setting WIN_SLEEP to 1 will slow the function down while reducing CPU usage).
Abbreviation : WWC
WaitWindowClosed Example
//With a timeout check Let>WW_TIMEOUT=10
WaitWindowClosed>Progress If>WW_RESULT=FALSE
MessageModal>Timedout Endif
WaitWindowFocused
WaitWindowFocused>window_title
Waits for a specified window to open/appear and be focused (the foreground window). Execution of the script will not continue until a window with the specified title text appears and is focused or a specified timeout value is exceeded. The window title may contain the * symbol at the end to indicate a substring match.
If the WIN_USEHANDLE variable is set to 1 window_title must be a window handle.
If the last character of the window title specified is an asterisk (*), script will first attempt to find the first window whose title matches the text entered exactly. If it cannot make an exact match it then looks at all windows and selects the first one it finds whose title contains the entered text (using a case-insensitive search). This solves the problem with applications such as Word or Netscape which change their titles depending on the document loaded. It is best to try to provide an exact (including case) window title to ensure the correct window is found, as many applications have multiple invisible windows with similar names. Specifying text without a trailing asterisk will force script to only look for an exact match.
The system variable WW_TIMEOUT can be used to set the number of seconds after which this command should timeout. If set to zero (the default) the timeout will not occur and the command will continue indefinitely. If WW_TIMEOUT is used, WW_RESULT will indicate whether or not the command ended successfully. If it timed out WW_RESULT will be set to FALSE. If the window it was waiting for closed within the timeout setting, the WW_RESULT value will be set to TRUE.
It is possible to limit the type of windows this command affects using the WF_TYPE variable:
Let>WF_TYPE=0 // No Child Windows
Let>WF_TYPE=1 // ALL Windows (Default)
Let>WF_TYPE=2 // Visible Windows Only
Let>WF_TYPE=3 // Child Windows Only
A Regular Expression can be used in window_title if WIN_REGEX is set to 1.
By definition this function continually enumerates and loops through the list of windows open on the system. This is an intensive process and you may therefore see CPU usage increase during the wait. For most people this is not a problem. However, if you wish to reduce CPU usage you can set WIN_SLEEP to 1 at the expense of processing time (in theory setting WIN_SLEEP to 1 will slow the function down while reducing CPU usage).
Abbreviation : WWF
WaitWindowFocused Example
Run Program>c:\program files\msoffice\winword.exe
WaitWindowFocused>microsoft word*
//With timeout checking
Let>WW_TIMEOUT=30
WaitWindowFocused>microsoft word*
If>WW_RESULT=FALSE
MessageModal>Error starting Word!
Endif
WaitWindowOpen
WaitWindowOpen>window_title
Waits for a specified window to open/appear. Execution of the script will not continue until a window with the specified title text appears or a specified timeout value is exceeded. The window title may contain the * symbol at the end to indicate a substring match.
If the WIN_USEHANDLE variable is set to 1 window_title must be a window handle.
If the last character of the window title specified is an asterisk (*), script will first attempt to find the first window whose title matches the text entered exactly. If it cannot make an exact match it then looks at all windows and selects the first one it finds whose title contains the entered text (using a case-insensitive search). This solves the problem with applications such as Word or Netscape which change their titles depending on the document loaded. It is best to try to provide an exact (including case) window title to ensure the correct window is found, as many applications have multiple invisible windows with similar names. Specifying text without a trailing asterisk will force script to only look for an exact match.
The system variable WW_TIMEOUT can be used to set the number of seconds after which this command should timeout. If set to zero (the default) the timeout will not occur and the command will continue indefinitely. If WW_TIMEOUT is used, WW_RESULT will indicate whether or not the command ended successfully. If it timed out WW_RESULT will be set to FALSE. If the window it was waiting for closed within the timeout setting, the WW_RESULT value will be set to TRUE.
It is possible to limit the type of windows this command affects using the WF_TYPE variable:
Let>WF_TYPE=0 // No Child Windows
Let>WF_TYPE=1 // ALL Windows (Default)
Let>WF_TYPE=2 // Visible Windows Only
Let>WF_TYPE=3 // Child Windows Only
A Regular Expression can be used in window_title if WIN_REGEX is set to 1.
By definition this function continually enumerates and loops through the list of windows open on the system. This is an intensive process and you may therefore see CPU usage increase during the wait. For most people this is not a problem. However, if you wish to reduce CPU usage you can set WIN_SLEEP to 1 at the expense of processing time (in theory setting WIN_SLEEP to 1 will slow the function down while reducing CPU usage).
Abbreviation : WWO
WaitWindowOpen Example
Run Program>c:\program files\msoffice\winword.exe
WaitWindowOpen>microsoft word*
//With timeout checking
Let>WW_TIMEOUT=30
WaitWindowOpen>microsoft word*
If>WW_RESULT=FALSE
MessageModal>Error starting Word!
Endif
WindowAction
WindowAction>Action,window_title
Use this function to restore, minimize, maximize or close a window.
Action can be any one of the following:
- 0: Restore the window
- 1: Maximize the window
- 2: Minimize the window
- 3: Close the window
If the WIN_USEHANDLE variable is set to 1 window_title must be a window handle.
Specify the window name in window_title. The window_title may contain the * symbol at the end to indicate a substring match.
If the last character of the window title specified is an asterisk (*), script will first attempt to find the first window whose title matches the text entered exactly. If it cannot make an exact match it then looks at all windows and selects the first one it finds whose title contains the entered text (using a case-insensitive search). This solves the problem with applications such as Word or Netscape which change their titles depending on the document loaded. It is best to try to provide an exact (including case) window title to ensure the correct window is found, as many applications have multiple invisible windows with similar names. Specifying text without a trailing asterisk will force script to only look for an exact match.
It is possible to limit the type of windows this command affects using the WF_TYPE variable:
Let>WF_TYPE=0 // No Child Windows Let>WF_TYPE=1 // ALL Windows (Default) Let>WF_TYPE=2 // Visible Windows Only Let>WF_TYPE=3 // Child Windows OnlyA Regular Expression can be used in window_title if WIN_REGEX is set to 1.
Abbreviation : WIN
WindowAction Example
Run Program>c:\program files\msoffice\winword.exe
WaitWindowOpen>microsoft word*
//With timeout checking
Let>WW_TIMEOUT=30
WaitWindowOpen>microsoft word*
If>WW_RESULT=FALSE
MessageModal>Error starting Word!
Endif
Comments
0 comments
Please sign in to leave a comment.