Phantom for Windows 1.7.30
New Features and Bugfixes

How to upgrade
Read the 1.7.27 PhantomScript Reference Guide online

1.7.30 Release
Sort performance improved
Performance of Sort has been improved by over 10x.

1.7.27 Release
File compression support
The CompressFile and UncompressFile statements have been added.

XML Support
The following statements have been added to support processing of XML data: XMLMatch, XMLSelect, XMLSelectText, and XMLTransform. The first three listed use XPath expressions for selection.

JSON Support
These statements facilitate the processing of JSON-formatted data: JSONAddArray, JSONAddBoolean, JSONAddNull, JSONAddNumber, JSONAddObject, JSONAddString, JSONArrayAsList, JSONGetKeys, JSONGetType, JSONGetValue, and JSONDelete.

Improved networking functions
Added InternetHead and InternetDelete statements to complete HTTP protocol support. Added optional Headers parameter to InternetGet and InternetPost. Added optional OutputFile parameter to InternetGet. Response headers are returned as Result of InternetPost, InternetHead, InternetDelete, and InternetGet when OutputFile is present.

Bugfixes
1.7.21 Fixed memory leak in WriteConnection.
1.7.23 Fixed problem creating exe's when the length of the script exceeded 16 KBytes.
1.7.27 Fixed network-related bugs: Improved network receive performance by more than 10x. The CLOSE event is now returned for aborted connections in WaitForConnectionEvent. Fixed a problem with CloseConnection where sometimes not all data that had been sent would actually be transmitted to the receiver.

1.7.20 Release
HMAC
The HMAC statement computes a keyed-hash message authentication code using the SHA-1 hash algorithm as defined in RFC 2104.

1.7.19 Release
WaitForWindowTestIntervalMs
The WaitForWindowTestIntervalMs intrinsic variable allows adjustment of the interval between successive tests for the presence or absence of the window specified in a WaitForWindow, WaitForWindowClose, or SetWindow statement.

1.7.18 Release
WaitForProcessExit fixed
Fixed problem where WaitForProcessExit never returned due to a change in Windows behavior apparently introduced by a Microsoft security update.

1.7.17 Release
Bugfixes
Fixed end-of-file recognition bug.
Fixed problem that caused input files to be modified in certain circumstances when reading.

1.7.16 Release
Bugfix
Fixed bug in RegExSplit which caused text after the last capture expression to be lost. (This is a very rare use of RegexSplit.)

1.7.15 Release
URLEncode and URLDecode
URLEncode and URLDecode statements have been added for processing of strings passed to and from webpage forms.

Regular Expressions

Perl-compatible regular expression statements have been added enabling advanced processing of strings. The statements are RegExGrep, RegExMatch, RegExReplace, and RegExSplit.

Bugfixes

Under certain circumstances, a crash or data corruption could occur when returning from a procedure in which a local composite variable was used.

Nested procedure calls sometimes received argument values from higher in the call tree.

TCP connections were not closed properly at script termination.

1.7.9 Release

Remove error reports from ProcessExeFile

ProcessExeFile no longer writes error messages to the log file for non-accessible processes.

Improved playback synchronization with Internet Explorer

Required installation steps:
1. Install new version of Phantom for Windows.
2. Run the IEHelper PhantomScript and click on Remove IEHelper.
3. Reboot your computer.
4. Delete the file IEHelper.DLL from the Phantom directory (usually c:\Program Files\P1\Phantom).
5. Run the IEHelper PhantomScript and click on Yes to install IEHelper.

Bugfixes
Fix problem where selecting No from popup error dialog sometimes caused a crash.

Fix problem playing back backslash with German keyboard layout.

Fix problem where a MessageBox statement after a successful WaitForWindow statement caused the task bar in Windows NT 4 SP6 to become unresponsive until the message box was dismissed. (This problem was not reproducable in Windows 2000 or XP.)

Fix daylight savings time calculation bug

1.7.2 Release

WaitForMatch MatchPercent parameter added
The WaitForMatch MatchPercent parameter allows you to specify that the screen image need not precisely match the saved image it is being compared with. 100% indicates an exact match is required, while 0% indicates that no match at all is required.

1.7 Release

Improved recording with Internet Explorer
The IEHelper Internet Explorer helper is now included in the Phantom for Windows kit. Installing this helper allows the Phantom recorder to synchronize with page loading in the Internet explorer. Execute the IEHelper.txt script to install, uninstall, and configure IEHelper.

Recorder enhancements
Changes to the Phantom recorder now make the recorder more accurate, addressing a number of problems related to timing and ordering of recorded events and recording of combination keystrokes.

Command Line Enhancements
The Phantom command line now allows you to ensure that the Phantom instance started to execute a script terminates when the script is finished, even if the ExitPhantom statement is not included in the script. The new WAIT command line keyword allows you to direct Phantom to delay execution of the specified script until Phantom instances executing incompatible scripts have terminated.

Scheduler bugfix
A problem scheduling scripts to run once-only with on a date in the past that caused Phantom to hang has been fixed.

WaitForMatch Enhancements
The interval used by the WaitForMatch between comparisons of screen content is now determned by the new WaitForMatchTestIntervalMs intrinsic variable. The WaitForMatchXTolerance and WaitForMatchYTolerance intrinisc variables allow you matching ofnimages that are not placed precisely in the same location as when the recording was done.

 

1.6i Release

Automatic Timeout Detection
Phantom now has the capability to include timeouts on the synchronization statements that wait for windows to appear. By default, a message is displayed to the user when a timeout occurs, but this behavior can be customized. See the The Phantom Options Dialog for information on enabling and disabling this feature.

Customization of the Recording Process
Phantom now allows you to tailor recorder output to include your own site-specific code. This can, in many instances, eliminate the necessity to repetitively edit the recorder output to add the same error handling and boilerplate code. This feature is most useful when large numbers of Phantom scripts are created as when, for example, Phantom is used to monitor the health of a large suite of enterprise applications. See Customizing the Recording Process for more information.

New PhantomScript features related to error handling
The new ScriptError and the CurrentScriptFile, LastWindowCaption, and LastWindowClass intrinsic variables provide information to aid in generating error messages from Phantom scripts.

Windows Messaging
We have added the following statements to allow sending and receiving Windows messages: PostWindowsMessage, SendWindowsMessage, and WaitForWindowsMessage

Bugfixes

A number of problems with scheduling of scripts have been fixed.
A problem assigning hotkeys for script execution has been fixed.

A problem with the new ProgressBar dialog item was corrected.

1.6 Release
Script comments
The comments included in scripts generated by the Phantom recorder are now more informative. Also, you can cause the recorder to omit comments from recorded scripts from the Phantom Options Dialog.

ProgressBar
The ProgressBar dialog item allows you to display the percentage of a long-running task that is complete.

Automatic Popup Error Dialogs
Phantom now produces popup error dialogs when an error occurs during script execution. This feature can be selectively enabled and disabled using the SetPhantom options ErrorPopupsOn, ErrorPopupsOff, SuspendErrorPopups, and RestoreErrorPopups.

TerminateOnError and ContinueOnError
Phantom now allows you to specify whether script execution is to continue or not when an error occurs. You specify this using the SetPhantom options TerminateOnError and ContinueOnError.

Alternative Keyboard Layouts
Phantom now supports alternative keyboard layouts for both record and playback. This allows using Phantom with non-US English language settings.

WaitForKeystroke
WaitForKeystroke allows you to wait for the user to enter one of a specified set of keystrokes and then determine which one was entered.

Record Hotkey
In the Phantom Options Dialog, you can now specify a hot key to start and end recording so you can begin and end recording without accessing the Phantom Control Panel.

Record-to-Clipboard
The new Record-to-Clipboard hotkey starts a recording that instead of being saved in a file, is written to the Windows clipboard from where it can be pasted into a PhantomScript Editor session. This feature is useful for adding error and exception handling features after the basic script has been recorded for the success case.


PhantomScript Editor and Debugger enhancements
The PhantomScript debugger and the PhantomScript Editor now remember their last position and window size and, when next invoked assume their previous positions. The PhantomScript Editor now provides the option of setting the font face and size.

CommandLine variable enables drag-and-drop activation
The new CommandLine intrinsic variable provides access to the command line parameters used to invoke a Phantom-generated executable. When a Phantom-generated executable is invoked by a drag-and-drop operation, the name of the dropped object is included in the command line parameters.

CopyFile now copies web pages
The CopyFile statement has been enhanced to support copying from a URL (a web page address) as well as from a file on the local computer. This makes it extremely easy to read web pages from within a Phantom script.

InternetGet and InternetPost
The new InternetGet and InternetPost statements allow you to retrieve webpages from the Internet in the same manner as a web browser.

HostIsAvailable and Ping
The new HostIsAvailable and Ping statements allow you to determine the status of Internet hosts.

IPAddress
The new IPAddress statement allows you to determine the numeric address corresponding to a specified Internet hostname.

WritePrinter
The new WritePrinter statement allows you to send an arbitrary string to a specified printer.

Tokenize
The new Tokenize statement creates lists of tokens from an input string based on specifiers provided as arguments.

New Date and Time functions
The TimeZone, UTCDate, UTCTime statements provide access to the current time zone name and Coordinated Universal Time (UTC) date and time. The DayNumberFromDate and DateFromDayNumber functions enable date calculations such as days-between-dates, days-since, days-until, future-date and past-date.

WaitForProcessReady
The new WaitForProcessReady statement allows a script to wait until a specified process is ready to accept input with no input events pending.

WaitForRightButtonClick
The new WaitForRightButtonClick statement allows a script to wait until the user presses the right mouse button.

Keyed Value Lists
A keyed value list is a hashed structure that provides extremely fast lookup of values that have been stored with an associated key. The statements InsertKeyedValue, FindKeyedValue, DeleteKeyedValue, KeyList and the KeyedValueHashTableSize intrinsic variable provide access to keyed value lists. (Keyed value lists are referred to in other contexts by such terms as maps, hash lists, associative arrays, and dictionaries .)

Call and Gosub indirection
Call and Gosub now accept expressions calculated at runtime in place of the literal name of the procedure or subroutine. This allows determination of the target of a Call or Gosub to be deferred until run time.

New math functions
The mathematics functions Floor, Ceiling, and AbsoluteValue have been added.

MakeExeFromScript
The new MakeExeFromScript statement allows you to create exe files from scripts and to create very small executables (typically less than 50 KBytes) that make use of the new PHANTOM.DLL. This makes the distribution of large numbers of script executables more space efficient.

New process synchronization features
The new statements WaitForMutex, ReleaseMutex, CloseMutex, WaitForSemaphore, ReleaseSemaphore, and CloseSemaphore provide methods to synchronize the activities of multiple processes. These processes may be executing Phantom-generated executables or other programs that use these synchronization mechanisms.

Image InputBuffer support
The InputBuffer parameter of the Image dialog item allows a bitmap image stored in a PhantomScript variable to be used as an image source as well as a bitmap file as was previously the case.

Debugger popup menu item
The PhantomScript debugger can now be invoked via the right-click menu of the Phantom control panel.

Changes to variable scoping rules
Changes have been made to the rules for Variable Scoping in PhantomScript. The change most likely to have a significant effect on existing scripts is that variables declared as having local scope (using the Local statement) are no longer accessible from within called procedures. To make a variable visible from within a called procedure, you must now declare it as having global scope (using the Global statement).

Multiple execution
Phantom now executes statements that do not involve delivering keystrokes or mouse actions without invoking the journal playback functions of Windows. This allows multiple Phantom scripts and executables to execute faster, without mutual interference, and without interfering with user input actions.

WaitForWindow NoActivate
The new NoActivate parameter on WaitForWindow allows you to wait for a window to appear without forcing it to the foreground or giving it the input focus.

Bugfixes
Problems handling lists and tables with empty items have been corrected.
The statements WindowClass and WindowCaption now properly return information for child windows. (Previously, in some cases information for the specified window's parent window was returned.)
Procedures from library files included using the IncludeFile statement are now included in executables created with Phantom.
Dialog navigation with Tab and arrow keys now works properly in non-modal dialog boxes.
The Alt and Ctrl keys are recorded now even when they are not accompanied by another key.
A bug which could cause corruption of data files opened by Phantom has been corrected.

1.5k Release
SetPhantom TraceInit statement added
The SetPhantom TraceInit statement initializes the current trace file and places header information in it including the Phantom version, Windows version, and the date and time.

Support for non-string registry values
The GetRegistryValueType and SetRegistryValue2 statements have been added and the GetRegistryValue statement has been enhanced to allow storing and retrieving a number of registry data types other than string.

Key statements accepts variable as argument.
The Key statement now accepts variables and expressions containing keystroke designations as arguments. Previously, only literal keystroke designations were accepted.

Scheduler performance improvements.
Significant improvements in scheduler performance when large numbers of scripts (e.g. hundreds) are scheduled have been achieved in this release. Prior to this release, interaction with the Scheduler dialog and actions that occur at script termination performed very slowly when large numbers of scripts were scheduled.

Bugfix in DeleteRow
A problem with the DeleteRow statement that caused table rows to become mixed up has been fixed.

1.5j Release
Additional date functions added.
The new date functions DayOfWeek, DayOfYear, and DaylightSavings have been added.


Schedule refresh
The statement RefreshSchedule has been added to allow scripts to cause the Phantom to reload the schedule from disk.

1.5i Release
Popup menu problem fixed
A problem that caused erroneous entries in the Phantom script list to be created when the minimized Phantom icon was double-clicked has been fixed.

Phantom Control Panel Title Bar
The Phantom Control Panel title bar now shows the name of the script being executed and the color of Phantom's icon indicates Phantom's current state: blue for idle, green for playback, and red for recording.

1.5h Release
Popup menu problems in Windows95/98 fixed
Problems with the popup menu displayed when Phantom is minimized to the system tray specific to Windows 95 and 98 have been fixed.

1.5g Release
SetWindowCaption
The new SetWindowCaption statement allows you to change the text of window captions. (The window caption is normally the text that appears in the window's title bar.)

SetPhantom FastPlay
SetPhantom FastPlay now allows you to set the fast playback settings from within a Phantom script. Previously, these settings were only accessible from the Phantom Options dialog.

FindItem
FindItem, when applied to a list containing composite variables, now searches for variables within the list whose parent variable value matches the search criteria. This allows lists of composite variables to be used as a sort of "dictionary" or "map", where the parent value is used as a key to retrieve the entire composite variable. For example, a collection of employee records could be maintained in a list of composite variables with the employee badge number as the parent variable's value. This would allow easy retrieval by badge number.

1.5f Release
Network connection bugfix
A problem wherein the second invocation of a Phantom networking script would sometimes hang under Windows NT SP6 has been fixed.

1.5e Release
Parsing and constructing binary data buffers
The following new statements provide the capability of extracting data from and constructing binary data buffers: ExtractInteger, ExtractLong, ExtractShort, ExtractWord, ExtractByte, ExtractChar, ExtractBytes, ExtractString, SkipBytes, InsertInteger, InsertLong, InsertShort, InsertWord, InsertByte, InsertChar, InsertBytes, and InsertString.

Recording quotation marks
A problem related to recording quotation marks (double-quotes) has been fixed. Quotation marks are now recorded as <Shft-'> (a shifted apostrophe).

1.5d Release
ConnectTimeout
The new ConnectTimeout intrinsic variable allows you to decrease the default Windows timeout for OpenConnection. This allows quicker detection of non-responding hosts.

1.5c Release
Process Control and Encryption
Help file sections on Process Control and Encryption have been added. They were accidentally ommitted in earlier releases.

PhantomScript Editor
A number of formatting problems related to the use of nested parentheses and functions have been corrected and the PhantomScript Editor now detects unbalanced parentheses as well.

FileExists
The new FileExists statement determines whether a specified file exists. The file specification may include wildcards.

FileSize
FileSize now returns 0 if the specified file does not exist. Previously, the undocumented value -1 was returned.

CopyFile, MoveFile, CreateDirectory
CopyFile, MoveFile, and CreateDirectory now automatically create directories on remote drives when UNC file specifications (e.g. \\computer\c\myfiles\file.txt) are used as they do for local and mapped drives.

1.5b Release
SubString
SubString now works with binary data variables.

Scheduler BugFixes
Schedule now reports the correct day of the week in the expanded Phantom control panel.

Corrected a daylight savings time-related scheduling problem.

Corrected a problem where short scripts were sometimes invoked twice by the scheduler.

Corrected a problem where an executed once-only script could block executions of later scheduled scripts.

Changed scheduler dialog to not display script file directory prefixes.

1.5a Release
BugFixes
Fixed problem with initialization of variables in Local, Global, and Universal statements. Fixed problem with passing of quoted literals to procedures when the literal is also the name of a variable.

Fixed bug that CloseConnection on any connection closed all connections.

Fixed bug that caused incorrect evaluations of comparisons using And and Or when the entire comparison expression was enclosed in (unnecessary) parentheses.

1.5 Release
Called Procedures
The new Call and Procedure statements, along with the newly supported Local variable declaration, provide true subroutine capability to Phantom for Windows. The new IncludeFile statement supports the creation of external "libraries" of procedures to be shared between multiple PhantomScript scripts. The new SetResultValue statement allows returning values from called procedures.

SquareRoot
The new SquareRoot statement returns the square root of a number.

StringAsList
The StringAsList statement tokenizes a list based on specified token delimiters. This makes it easy, for example, to process a sentence as a list of words.

New string manipulation functions
The PatternMatch and PatternSubstitute statements have been added to PhantomScript. These statements allow flexible extract and search-and-replace operations on text strings.

New Statements for Working with HTML and other Internet Data
The ExtractHTMLLinks, MakeAbsoluteURL, ParseURL, Base64Encode, Base64Decode, UUEncode, and UUEncode provide the capability to work with Universal Resource Locators (URLs), Hypertext Markup Language (HTML) text and binary data encoded for transfer via the Internet.

Support for Binary Data Manipulation
The BitAnd, BitOr, BitNot, BitXor, HexlistFromBinary, BinaryFromHexlist, HexToDecimal and DecimalToHex statements provide translation between hexadecimal and decimal radix.

Sorting of strings containing non-ASCII characters
SortableString allows sorting of lists containing non-ASCII characters.

List performance
Performance of large list and table operations has been greatly improved.

Variable size
The 32K byte size limit on list items and persistent variables has been removed.

LoadFile and SaveFile
The new LoadFile statement allows loading the entire contents of a file into a variable without requiring opening, reading, and closing the file. Similarly, the SaveFile statement saves data to a file without requiring opening, writing, and closing the file.

Binary File and Data
Added the OpenBinaryFile, LoadFile, and ByteCount statements and the BinaryFileReadBufferSize intrinsic variable to support reading, writing, and manipulating binary data.

File Times
Added the FileAccessTime, FileCreateTime, FileModifyTime, SetFileAccessTime, and SetFileModifyTime statements to allow scripts to base decisions based on when files were created, last accessed and last modified and to set the access and modify times of files.

FirstFile and NextFile
FirstFile and NextFile no longer return the "." and ".." files. (The prior behavior required addional script statements in NextFile loops to filter out these pseudo-files.)

Composite Variables
Support for composite variables has been added. Composite variables are similar to records or structs in other languages. See Composite Variables in the Language Basics section for more information.

ComponentList
ComponentList returns the components of a composite variable.

Encryption
Data encryption support has been added with the statements Encrypt, Decrypt, RC4Encrypt, RC4Decrypt, and SetEncryptionKey.

SetPhantom Interruptable
The new Interruptable and Uninterruptable options of the SetPhantom statement allow you to disable Ctrl-Esc and Ctrl-Alt-Del actions from within Phantom scripts.

Bugfix
Fixed timed dialogs so interaction resets timer as documented.

Bugfix
StringBefore, StringBeforeLast, StringAfter, and StringAfterLast were case sensitive in certain cases. This has been fixed.

Bugfix
Fixed problem where Phantom exited when errors occurred in reading corrupt jpeg image files.