VoiceAttack Change Log v1.15 - Design Changes - VoiceAttack no longer requires an email address to validate registration (Standalone version only). - Improvements - General maintenance fixes and optimizations. - Bug Fixes - Fixed a critical issue where VoiceAttack would not load fully under specific conditions. v1.14 - Bug Fixes - Fixed issue with broken identifiers for command snippets. v1.12 - Design Changes - Pending 'Get User Input- Wait for Spoken Response' responses will now take precedence over commands that have identical 'When I say' phrases. - Bug Fixes - Fixed some small issues related to 'Get User Input - Wait for Spoken Response'. v1.11 - Design Changes - Changed the hotkey shortcuts for the 'Get User Input' series of screens. - Duplicating a profile now stops all running commands first before duplicating. - Updated shading of 'favorites' star icon in 'Other Stuff' screens when in dark mode. - Improvements - Added option "Follow Windows' Dark/Light Mode" to the Options screen to allow dark mode to automatically follow what Windows has as its application mode setting. - Added 'Get User Input - Wait For Key Press' feature that will allow a command to wait until a key or key combination is pressed. - Added 'Get User Input - Wait For Joystick Button Press' feature that will allow a command to wait until a joystick button or combination is pressed. - Added 'Get User Input - Wait For Mouse Button Press' feature that will allow a command to wait until a mouse button or combination is pressed. - The 'Text Variable' input box on the 'Get User Input - Wait for Spoken Response' screen will now auto-populate with a command-scoped variable named '~textResult' on add. - Added 'Exit command if speech recognition is not available' option to the 'Get User Input - Wait for Spoken Response' screen. This will keep the action from executing if speech recognition is simply not there. - Added 'Execute even if listening is disabled' option to the 'Get User Input - Wait for Spoken Response' screen. This will allow the spoken response to be detected even if listening is turned off. - Added decimal variable hold time to Add/Edit a Keypress screen. - Added decimal variable click duration to Add/Edit a mouse click screen. - Added 'Use variable joystick shortcut (Advanced)' option to the command joystick shortcuts screen. - Added 'Refresh Variable Joystick Shortcuts' action to refresh joystick shortcuts when variable values are changed. - Added 'Use variable mouse shortcut (Advanced)' option to the command mouse shortcuts screen. - Added 'Refresh Variable Mouse Shortcuts' action to refresh mouse shortcuts when variable values are changed. - Restructured mouse click screen to use dropdown boxes instead of radio box matrix. - Added triple-click mouse action to mouse click screen. - Added, 'Launch elevated as admin' to 'Run an application' action. - Added 'Append text to existing value' option to the 'Set a Text Value' action that will allow the incoming variable value to be appended to an already-existing variable value. - Added proxy function 'CompactModeEnabled', which will return true if VoiceAttack's compact mode is on. - Added proxy function 'SetCompactMode(bool Value)' which will switch VoiceAttack's compact mode on if true. - Added proxy function 'ToggleCompactMode()' which will toggle VoiceAttack's compact mode on and off. - Added token {DOUBLEQUOTE} that will render as a single double quote character. - Added token '{TAB}' that will render as a tab character (ASCII 9). - Added token '{ASCII:}' which will render an ASCII value (0-127) as text. - Added, '{STATE_SPEECHENABLED}' token that will render "1" if speech recognition is available or "0" if it is not. - Added, '{STATE_MOUSEHOOKENABLED}' token that will render "1" if mouse hooks are enabled or "0" if the mouse hook is null or not enabled for any reason. - Added, '{STATE_KEYBOARDHOOKENABLED}' token that will render "1" if keyboard hooks are enabled or "0" if the keyboard hook is null or not enabled for any reason. - Added, '{STATE_KEYCAPTION:}' token that will render as a keyboard key description of a Windows virtual key code. - Added, '{STATE_SPEECHINSTALLED}' token that will render as '1' if the speech engine VoiceAttack is using has been user-installed. '0' if not. - Added listening, keyboard, mouse and joystick enabled indicators to the Settings Summary. - Added 'speech recording device allows applications to take exclusive control' and 'speech recording device gives exclusive mode applications priority' to the Settings Summary. - Added proxy utility function 'ResourceExists' that will return true if a given resource name exits within a given resource file. - Added proxy profile function 'StartupEnabled()', which returns true if the 'Load Profile on Statup' option has a profile selected. - Added proxy profile function 'StartupInternalID()', which returns the internal id for the profile selected as the startup profile (if it exists). - Added command line parameter '-nomodkeyrelease' which indicates not to release the left and right modifier keys (shift, ctrl, alt) on profile load when VoiceAttack starts up. - Bug Fixes - Fixed an issue with the 'Duplicate' command keyboard shortcut not working from the Profile Edit screen. - Fixed an issue with 'Execute a command each time a command phrase is recognized' not firing if listening is turned off prior to command execution. - Fixed an issue with token {TXTREPLACEVAR:} that was stripping out more double quotes than it should have. - Fixed an issue with random decimal generation causing a crash under certain conditions. - Fixed various joystick setup issues. - Fixed an issue with default TTS voice not able to preview when set to Speech Platform 11 TTS and SAPI TTS is also installed. - Fixed an issue with the command list filter of the profile screen not filtering properly with commands containing more than 250 actions. - Fixed an issue where modifier keys were not registering properly in 'Add a Keypress' screen (introduced in prior beta). - Fixed an issue (for both tokens as well as the device state conditions) when checking joystick position that would cause a crash if the joystick used is a gamepad. - Fixed an issue with command snippets not persisting portions of condition actions. - Fixed an issue with inline function compilation if VoiceAttack's current directory was changed. - Fixed issue with condition device state evaluating gamepad axes. - Fixed issue with condition device state evalutating axes for joystick 3 and 4. - Fixed an issue where keyboard shortcut hook was not turned back on after editing keyboard-related actions with shortcuts turned off in some cases. - Version check with Steam edition has been turned off. - Fixed an issue with proxy WriteToLog() function not parsing tokens properly. v1.10.6 - Bug Fixes - Fixed a critical issue that was preventing exporting of profiles in certain cases. v1.10.5 - Bug Fixes - Fixed various issues with update checks (both Steam and standalone versions). v1.10.4 - Design Changes - Changed internal process by which profiles are deleted. Profiles are now flagged to be deleted and will not actually be removed until next startup of the application. Only noting this here just in case an older version of VA is sharing a .dat file with a newer version (older versions will still show the profile as available if the .dat is accessed prior to actual delete). - Blank/whitespace profile names are no longer permitted. - Any features added to playing sound from this point on will only be available for the 'Integrated Components' audio type. - Resetting default setting values from the Options screen will now close VA. - The hotkey for the Windows Misc Functions action has been changed from Ctrl + F to Ctrl + O. - Command action caption verbiage in list is now limited to the first 250 actions to increase display performance. - Changed command line parameter '-bypassPendingSpeech' to '-bypasspendingspeech' to be consistent with other command line parameters. Note that '-bypassPendingSpeech' will continue to work (just no longer documented). - Improvements - Added 'Command Snippets' feature, which allows you to store collections of actions for later use. - Added basic find capability to the command action list. - Added more detailed information for the 'mic mute/no signal' icon. - Added options 'Do not play this sound if other sounds are playing', 'Only allow a single instance of this sound', 'Do not play additional sounds while this sound is playing' and 'Play this sound regardless of the settings of other sounds' to the 'Play a Sound' and 'Play a Random Sound' actions. Note that this is only available for the 'Integrated Components' audio type. - Added options 'Do not activate this speech action if other speech is active', 'Only allow a single instance of this speech action', 'Do not activate additional speech actions while this speech is active' and 'Activate this speech regardless of the settings of other speech' to the 'Say Something with Text-To-Speech' action. Note that this is only available for the 'Integrated Components' audio type. - Added, 'Disable Additional Text-to-Speech Options' option to Profile Options > Advanced tab. This option allows profile-level bypassing of new text-to-speech options. - Added '-legacytts' command line option to bypass new text-to-speech options for all profiles. - Optimized loading time and memory usage of profiles. - Added the ability to hide/show columns in the profile editor screen. - Added the option to save the quick reference list as Comma-Separated Values (CSV) (*.csv) to the profile export screen. - Added command line parameter '-disablemainshortcuts' which will disable all hotkey shortcuts on the main screen. - Added author flagwhich will allow reverse profile renaming. By default, an imported profile will have its name updated with a numeric value if another profile already exists with the same name. Setting this flag to 1 will tell VoiceAttack to rename the existing profile in order to preserve the imported profile's name. - Added optional Boolean parameter 'SaveToProfile' to SetText, SetInt, SetDecimal, SetDate and SetBoolean proxy functions. Setting this parameter to true will instruct VoiceAttack to save the value to the profile (directly correlates to the 'Save value to profile' option on the 'Set a Text Value' screen). 'SaveToProfile' defaults to false. - Added optional Boolean parameter 'RetrieveFromProfile' to GetText, GetInt, GetDecimal, GetDate and GetBoolean proxy functions. Setting this parameter to true will instruct VoiceAttack to load the value from the profile (directly correlates to the 'Retrieve saved value' option on the 'Set a Text Value' screen). 'RetrieveFromProfile' defaults to false. - 'Wait for Spoken Response' timeout can now accept decimal variable names and any combination of tokens. - Added the ability to use a blank for the Responses input of 'Get User Input - Wait for Spoken Response', which allows for any spoken response to be captured. - Added 'Invoke VoiceAttack's mouse shortcuts' option to the Mouse Click screen. This will allow VoiceAttack's commands with mouse shortcuts to execute from VoiceAttack's own mouse actions. Some games and apps do not work well with VoiceAttack's method of restricting its own mouse clicks. This option will help with that situation. - Separated Enable/Disable Action(s) menu item on command screen into two separate menu items. - Bug Fixes - Fixed an issue where having no recording devices available to the speech engine would hang the Options screen for several seconds upon close. - Fixed various reordering issues with the command action list, including an issue where duplicating and dragging multiple items in the action list of a command would change the order of the dragged items. - Fixed a scaling issue when moving windows between monitors using 'Perform a Window Function' action. - Fixed issue with screen edge snapping in some cases. - Fixed issue with screen load position recall in some cases. - Fixed an issue with VA.Profile.SwitchTo() not working properly from within an inline function. - Fixed an issue where the 'Convert a Variable Value' values would accept variables with semicolons, or, colons without the use of tokens. - Fixed an issue where browsing in 'Run an Application' would crash if illegal characters in the path were present. - Additional fixes for issue with command keyboard shortcuts not handling key-up event when 'Do not allow key to be passed through' option is checked. - Fixed an issue with the Command Add/Edit screen where clicking 'No' to confirm cancel would disable key bindings for that screen. - Fixed issue where system summary was no longer showing installed speech engines, current culture or current ui culture. - Fixed issue with tooltips on main screen not respecting system tooltip colors. - Fixed some CSS issues in HTML export. - Fixed issue with command keyboard shortcuts not handling key-up event when 'Do not allow key to be passed through' option is checked. - Fixed issues with combo boxes and the backspace key and other minor visual glitches. - Tightened up excessive automatic scrolling with dropdown boxes when hovering near the bottom or top. - Added missing [MENU]/[APPS] indicators for Quick Input and variable keypresses. - Made some adjustments to device muting when resetting the speech engine. - Fixed an issue where groups would not retain expanded setting after adding a command in certain situations. - Fixed an issue where a deleted command would still be available for repeating. v1.10.3 - Bug Fixes - Fixed an anomaly dealing with speech engine resets that may cause devices to mute unexpectedly. v1.10.2 - Bug Fixes - Fixed an issue where resetting the speech engine with excessive noise would cause a hang until the noise was silenced. - Fixed the issue with no commands being displayed in the list if migrating from an earlier version of VA to the latest version and the list was sorted by actions. v1.10.1 - Bug Fixes - Fixed an issue where disabling the speech engine would close the application. - Fixed the ability to enter text in the 'Default text-to-speech voice' option in the Profile Options screen. - Fixed an issue where resetting the speech engine would fail to complete. v1.10 - Design Changes - VoiceAttack is now primarily a WPF application. That is, the user interface has gone through an almost 100% porting process. Theming is consistent throughout the application, including, 'Cover of Darkness (Dark Mode)'. Overall editor speed should seem a little bit snappier with this port. The ability to override VoiceAttack's language is available, but still in its development phase. - VoiceAttack now requires .Net Framework 4.8. - Token '{TXTRANDOM:}' no longer trims extra spaces from selected items. - Resize grip bars are no longer visible in the corners of resizable windows within Windows 11. - Comment action now only trims blank spaces from the end (right). - 'VA_DisplayInfo' function from the plugin interface will now display as a tooltip for the item represented in the plugin manager. - Recording screen minimum pause has been changed to 0.001 from 0.000. - If Windows Media Player is not installed, the Audio Output Type of 'Windows Media Components' will not be available on the Options screen > Audio tab. - Warning now displayed if internal sounds are played while using 'Windows Media Components' as the audio output type. - 'Use Nested Tokens' has been removed as an option from the 'Options' screen. Nested tokens will now always be rendered. - Increased pause maximum time to 9999.999 seconds. - Moved 'Dark Mode' toggle from the system menu of the main screen to the Options screen, General tab in an effort to make it more discoverable. - Improvements - Added, proxy property VA.DarkModeEnabled which returns true if VoiceAttack's dark mode is turned on and false if it is not. - Added state token '{STATE_VA_DARKMODE}' which renders '1' if VoiceAttack's dark mode is turned on and '0' if it is not. - Added, proxy property VA.LogReversed which returns true if VoiceAttack's log is displayed in reverse order (new entries at bottom) and false if it is not. - Added state token '{STATE_VA_LOGREVERSED}' which renders '1' if VoiceAttack's log is displayed in reverse order (new entries at bottom) and '0' if it is not. - Updated plugin samples to use .Net Framework 4.8. - Added, '-minimizetosystemtray' command line parameter. When VoiceAttack is minimized, its icon will be displayed in the system tray (works just like the 'Minimize to System Tray' option on the Options screen). - Updated audio components. - Added Profile Option 'Exclude global profiles'. This option will prevent global profiles from loading when a profile has this option selected. - Added 'Utilities' button to the Profile Options > Advanced tab. Three new utilities added: Clear all disabled keyboard, mouse and joystick shortcuts. - Added, 'Do not render tokens in variable values' option to 'Set a Text Value' action. - Added proxy function 'WriteToLogNoRender' which works exactly like proxy function 'WriteToLog', except that tokens will remain intact (not rendered) when output to the log. - Added, 'Do not render tokens' option to 'Write to Log' action. - Added command line parameters -logtostdout which will send log entries to STDOUT. You can pipe the output to a text file or to another app. Note that the output is not consolidated or trimmed as sometimes displayed in the main screen's log. - Added command line parameter -logtostdoutnotime which does the same as the one above, except omits the time portion of the log entry. - Added proxy event 'LogEntryAdded' which is raised any time a new entry is written to the main screen log. - Added 'Release All Keyboard Keys' feature to the Windows Misc Functions action. This will attempt to release all keys that are detected as currently pressed down. - Added 'Release All Mouse Buttons' feature to the Windows Misc Functions action. This will attempt to release all mouse buttons that are detected as currently pressed down. - Attempt to reset keyboard hotkeys on wake from Windows sleep/hibernate implemented. - Attempt to follow latest default speech device when recording devices added/removed improved. - Added, 'Execute a command each time a command phrase is recognized' to Profile Options. To allow this to be bypassed by specific commands, the option 'Do not execute additional recognition command' has been added to the Command > Advanced screen. - Added option 'Execute even if rejected for low confidence' to 'Execute a command each time a command phrase is recognized' to allow the selected command to execute even if the spoken command did not meet the set minimum confidence level. - Added token '{CMDEXECREJECTED}' that can be inspected within an 'Execute a command each time a command phrase is recognized'-executed command. The token will render "1" if the executed command was the result of the spoken command phrase being below the minimum set confidence level. A value of "0" will be rendered if the spoken command phrase has met the minimum set confidence level. - Added proxy utility function 'GetLanguageValue' that allows access to VoiceAttack's verbiage values. - 'WriteToLog()' proxy function now parses tokens. - The 'Write a Value to the Event Log' action and the 'WriteToLog()' proxy function both allow for end of line characters '\r\n' in addition to the {NEWLINE} token when indicating line breaks in the log. - Bug Fixes - Imported and duplicated profile information (author tags and ids) are now included in profile history. - Fixed various proxy event handlers that would crash VA if an exception was thrown in user code (plugins/inline functions). - Fixed issue where editing keypress modifier keys would get out of sync on edit. - Bolstered plugin areas to try to deter some crashes. - Fixed an issue with 'Execute a command each time a command phrase is recognized' blocking the executed command if 'Allow other commands to execute while this one is running' was unchecked. - Fixed issue with {CMDTARGETFOREGROUND}, {CMDTARGETMINIMIZED}, {CMDTARGETMAXIMIZED} not working if no input actions included in the command. - Fixed issue with modifier keys (ctrl, alt, shift) not working when device condition 'Only Key Pressed' was used. - Fixed issue with '-PassedText' command line parameter if used when VA set to run as an administrator and multiple literal values are passed in. - Fixed issue with copying log messages sometimes resulting in an error. - Fixed issue with default/demo profile not saving if changes were made and a new profile was created. - Attempt to fix Quick Input missing characters when targeting VoiceAttack itself. - Fixed issue where selecting multiple command actions would prevent certain right-click menu items from enabling. - Fixed issue with setting 'on recognized' and 'on unrecognized' profile options would not be available until the profile was reloaded. - Fixed issue with 'Write Text to a File' action not importing newline characters properly if imported as binary. - Fixed issue with 'Switch to another profile' by reference resetting profile if the profile being changed to happened to be the active profile. - Fixed issue with saving variables with profile on profile switch. v1.8.9 - Bug Fixes - Fixed an issue with long-running profile unload commands breaking if stopped. - Bolstered joystick device query to try to stem NTDLL.dll crashes when devices are not plugged in for an extended period. v1.8.8 - Design Changes - Recent changes to Windows 10 (version 2004+) have affected the way applications handle timing in certain ways. As a result, VoiceAttack's timings have been affected (adversely). VoiceAttack will now adjust its timing automatically if it is run in Windows 10 version 2004+. This *will* dramatically increase the execution speed of your commands for those that are affected. In order to keep the peace, the option, 'Auto-adjust cpu utilization during command execution' was added to Options>System/Advanced for those that need a little more time to make adjustments to their commands (if needed). - Profile edit screen's filter buttons will now only persist while the profile is active. If the profile is changed or if VA is shut down, the filter buttons will have their state reset. - Variable change events are no longer removed when a profile is changed. - Subcommands that are not able to locate their target window/application will now stop the entire command tree. This is indicated as a design change (and not just a bug fix) as not only would it not stop when target found, but would also continue running. This may affect existing profiles. - Installer will now attempt to install to the last location where VoiceAttack was installed, regardless if going between 32 and 64-bit installers. - Improvements - A 64-bit version of VoiceAttack is now available as a full release. - Added token '{STATE_VA_IS64BIT}' which returns '1' if the VoiceAttack process is 64-bit, and '0' if it is not. - Added proxy function State.Is64Bit() which returns true if the VoiceAttack process is 64-bit, and false if it is not. - Naming of pasted commands in the, 'Edit Profile' screen has been updated to be more sequential. - Refactored/reorganized most code. Probably not something anybody will notice - just want it to be indicated here. - Generating a settings summary now has the option to either write to file or be copied directly to clipboard. - Added, 'Set Always on Top' and 'Unset Always on Top' to the 'Perform a Windows Function' display selections. These attempt to set/unset the target window's 'always on top' state. - Added, 'Change Opacity' option to 'Perform a Windows Function' action. This will allow you to attempt to change the opacity of a target window to a set percentage. - For loop with indexer now shows indexer name in action list. - Plugin context now displayed in action list. - Added proxy Utility functions MinimizeUI() and RestoreUI() for hiding/showing VA from inline functions or plugins. - 'Listen once then stop listening' hotkey, 'listening' sound has been restored for joystick and mouse control. - Added command line parameter -bypassimpropershutdowncheck which will make VoiceAttack not display the, 'Improper Shutdown' screen on launch. This is to help with debugging plugins in cases where VA gets shut down improperly. - Bug Fixes - Fixed issue with 'Listen Once' where listening icon would get out of sync. - Fixed issue with keyboard hotkeys not saving in certain situations. - Fixed issue where rapidly clicking the, 'Apply' button on the Profile Edit screen could cause a crash. - Fixed various minor UI glitches on mouse move screen. - Fixed issue with Record screen hotkey selection screens allowing keys to be passed through to the recorder. - Fixed issue where saving and recalling the mouse location in concurrently-executing commands could cause a crash. - Fixed issue with Captured Audio file browser crash if path did not exist. - Fixed issue where plugin selection on Plugin screen would allow free text to be entered (which would subsequently cause a crash). - Fixed Set a Decimal Value random caption formatting issue with whole numbers ending with zero not displaying properly. - Fixed issue with, 'Wait for spoken response' where items with additional spaces would not be recognized. - Fixed issue with 'Set integer value' screen not disabling proper controls if 'Clear value' was selected on edit. - Fixed issue with composite (prefix/suffix) commands not being allowed to be added even if they were in different composite groups. - Variable change events are no longer called twice when values are saved to the profile. - Fixed issue where spamming a search character when opening the profile edit screen would cause a crash. - Fixed issue with .vax import where an improper shutdown message may be presented when VoiceAttack restarts. - Fixed issue where indicating a command trigger would allow a blank command 'when I say' value. - Included missing joystick 3 and 4 POV tokens. - Fixed issue with restricted continuous recognition failing to execute command immediately following a spoken 'start listening' action. - Fixed {WINDOWMINIMIZED} and {WINDOWMAXIMIZED} tokens not working against 64-bit processes (64-bit version only). - Main screen now restores properly if minimized to system tray and a second instance of VA is launched. - Fixed issue with passed values getting added multiple times, causing a crash. - Stopping all commands now indicates any queues that are stopped. - Fixed issue with {CMD_WILDCARDKEY} token not showing wildcard expression if the expression was the full command. v1.8.7 - Design Changes - Command queue stop actions on a non-started queue will now clear the queue. - Tokens in TTS ('Say Something With Text-to-Speech') will now be rendered before any dynamic TTS. Previously this was the other way around. - New installations of VoiceAttack will now have, 'Check for updates' selected by default. - Fixed issue with functions that involve window dimensions including dimensions of window shadows. Mouse move actions and mouse position tokens (and possibly other areas) will be affected by this change. - Passed command values that are indicated as blank will now have their corresponding variable set to 'Not set' instead of just omitting the value. For example, passing "1;2;;3" to a command's, 'passed integers' will result in the following variable creation: ~passedInteger1 = 1 ~passedInteger2 = 2 ~passedInteger3 = Not set ~passedInteger4 = 3 - Disabling profile initialization commands from the, 'Load Options' screen now also prevents profile unload commands from being invoked. - Audio cleanup was made a little bit less eager in order to keep sounds from disrupting each other. Added a command line argument of -eageraudiocleanup to revert back to the original method. - Improvements - Added a settings summary to Options > General > System Info. This summary can be saved and referenced so you can view/share most of your settings in one list. - 'Send command to this target' can now accept tokens at the command and profile levels. - Increased number of spoken responses for the, 'Wait for Spoken Response' action from 250 to 500. - Added TextVariableChanged, IntegerVariableChanged, DecimalVariableChanged, BooleanVariableChanged and DateVariableChanged to the proxy. This will allow variables with a suffix of '#' to raise change events if their values change. - Added, 'CommandExecuting' and 'CommandExecuted' events to the proxy object for use within inline functions so that your inline function can be notified when a command is about to execute and when a command has completed executing. Note that the 'Enable proxy command events' option (Advanced/Experimental Command Options screen) must be selected for each command that is to fire either of these events. - Added token, '{CMDEXISTS:name}' that renders '1' if a command (spoken phrase) exists. '0' if not. - Added command line parameter '-loadoptions' which will launch VA with the load options screen (the same as holding down CTRL + Shift at startup). - Key press and Recorder screens will now allow for key presses emitted from VA itself. - Command-passed date and decimal values can now contain literal values, as long as the literal values are expressed using the invariant culture. - Added option, 'Evaluate passed values when command is queued' to the Enqueue Command action. This option will allow the enqueued command's passed values to be evaluated when the command is queued (rather than when the command is executed). - Added the ability to pass values to commands from the command line using -passedText, -passedInteger, -passedDecimal, -passedBoolean, -passedDate. - Added item, 'Reset Keyboard Shortcuts' to the Windows Misc Functions actions. This will attempt to reset VoiceAttack's keyboard shortcuts/hotkeys if something has caused VoiceAttack's keyboard hook to be overridden. - Bug Fixes - Fixed issue with command queue actions not rendering tokens. - Fixed issue with command line parameters not being picked up when running VoiceAttack's registration screen. - Fixed help document not showing up when F1 pressed on various screens. - Fixed various threading issues with 'Get Input' actions. - Fixed excessive overhead between down/up key sequence for quick input when delay is zero. - Fixed issue with TTS mass update button not becoming available if volume or rate changed. - Fixed issue with joystick options screen loaded from command screen's joystick setup not assigning a stick if no sticks were already assigned. - Fixed issue with joystick options screen loaded from command screen's joystick setup crashing if all sticks were unassigned. - Fixed issue with -passedText command line parameter losing quotes if the, 'Run VoiceAttack as an administrator' setting turned on. - Fixed issue where '-listeningoff' and '-listeningon' command line parameters were being overridden by hotkey state on startup. - Importing a profile now verifies that commands indicated on the, 'Profile Exec' tab actually exist within the exported profile. - Fixed listening icon not updating if, 'Reject Pending Speech' was turned on and speech was occurring. - Fixed issue with passed values in 'Execute another Command' screen and 'Enqueue command' screen were not cleared out on edit. - Fixed issue with {TXTREPLACEVAR} token where if the, 'from' parameter was blank the token replacement will freeze the command. - Fixed an issue with joystick button screens not working until refreshed if more than two buttons were already down when the screen loads. - Fixed issue with command actions dragging if mouse dragged from scrollbar. - Fixed issue with system beep when hitting Alt + E from main screen. - Fixed issue where semicolons in passed text values were not being processed properly if contained in a literal value. - Fixed issue where InternalID (for both command and profile) was being copied on duplication. - Fixed issue where dragging out of the condition builder list would cause an exception. - Fixed issue where hitting Alt + K to open the key press screen would cause the Alt key to be held down. - Fixed threading issue when using command-shared variables. - Resolved a threading issue while using passed values for executing/queued commands. - Fixed an issue where using wildcards at the start of a phrase containing dynamic command segments would result in unrecognized phrases. - Resolved issue with command hotkeys (keyboard, mouse, joystick) double-firing if 'release only' selected in conjunction with other options (long press, double tap). - Fixed issue with joystick hotkey screen not picking up button presses when the options screen is opened and joystick is newly assigned. - 'Prevent Speech Engine From Changing Microphone Volume' feature crashes VA with some versions of Windows. Some checks are done to help prevent this (hopefully). - 'Listen once then stop listening' hotkey, 'listening' sound has been restored. v1.8.6 - Design Changes - The following tokens were returning 'Not Set' in error when the underlying function yielded a null value. In order to make these tokens more consistent with the rest of the system, they have been updated to return, 'Not set': {TXTSUBSTR:}, {CMDSEGMENT:} - The following tokens were returning blank '' in error when the underlying function yielded a null value. In order to make these tokens more consistent with the rest of the system, they have been updated to return, 'Not set': {TXTURL:}, {TXTNUM:}, {TXTALPHA:}, {TXTWORDTONUM:}, {TXTTITLE} - The following tokens were returning blank '' in error when the variable passed was not set. In order to make these tokens more consistent with the rest of the system, they have been updated to return, '0': {PROCESSCOUNT:}, {WINDOWCOUNT:} - Plugin and inline function execution in the unregistered version is restricted if the command that is executing is a multipart/dynamic/composite command or a subcommand. - Improvements - Added, 'Passed Values' feature to, 'Execute Another Command' and 'Enqueue Command' actions. This allows for you to specify (via semicolon-delimited lists) sets of values to pass to commands. The values that are passed to the commands are converted to a standard set of command-scoped variables that are accessible only to the executed command. Think of this as being able to have parameters for commands o_O - Added ability for passed values to indicate variable names fully or partially with tokens. - Added passed value functionality to proxy command function Execute(). - Command actions can now be reordered by dragging. - Added the ability to edit multiple commands at once, via the 'Command Multi-Edit' screen. - Added the ability to delete multiple commands at once. - Added, 'Do not add command to queue if already enqueued' option to the 'Enqueue Command' action. This will prevent a command from being added to a named queue if the command already exists in the queue. - 'Say Something with Text-To-Speech' action screen is now sizable. - Export as HTML now allows you to filter out commands where, 'When I Say' is disabled. - Snap to edge is back (for those that remember it years ago) for all VoiceAttack screens. - Added command line parameter -snapdistance to allow you to adjust (in pixels) how close to the screen edge a VoiceAttack screen can be before it snaps to the edge. Set this value to zero to turn off snapping. The default value is 20, with a maximum value of 500. - Stopping command processing will now attempt to release mouse buttons left in a pressed-down state. - Added Proxy attribute, 'Dictation'. Dictation has four functions: Start(out String Message), Stop(), IsOn() and ClearBuffer(Boolean LastStatementOnly, out String Message). These work similarly to the corresponding dictation actions. - Added task bar and system tray item, 'Relocate to Primary Display' which moves all open forms over to the primary display. This is useful when a VoiceAttack screen is opened on a monitor that has been turned off or disconnected and Windows still thinks it should be there ;) There is also a new command line parameter, '-relocate' which can be used to perform this action as well. - Added, 'Advanced' button to the Command edit screen to hold advanced and experimental command options. - Added advanced/experimental command option, 'Resource balance offset' which controls VoiceAttack's action throttling in places where it may be needed (turbo switch for your command - at a cost ;)). - Added advanced/experimental command option, 'Do not execute this command if it is already running'. This keeps the current command from executing if another instance is already in progress. - Added option, 'Do not execute this command if it is already running' to the, 'Execute Another Command' screen. This will prevent a command from executing if it's currently running. - VoiceAttackFault.txt will now provide last execution information for each enabled plugin (Windows Event Log and VoiceAttackFault.txt). - Added token, '{CMDACTIVECOUNT:}' that renders the number of running instances of the indicated command. - Added proxy Command function ActiveCount(String name) and ActiveCount(Guid InternalId) which return an integer count of the number of running instances of the indicated command. - Added token '{CMDALREADYEXECUTING}' - This provides a way to test if the current command is already executing in another instance. The rendered value will be, '1' if the command is already executing, or '0' if not. - Added proxy Command function AlreadyExecuting() which returns a Boolean true if the current command is already executing in another instance. False if it is not. - Command line parameters -darkon and -darkoff have been updated to change, 'dark mode' on both the launched and running instance of VA. - Added Loop Continue action which will cause a looping section to skip on to its next iteration without breaking the loop. - Added option, 'Consolidate Duplicate Entries' to the right-click menu of the main screen's log. This will allow VoiceAttack's log to consolidate repeated items into one line, instead of filling up the log with the same item, over and over again. - Added token, '{STATE_AUDIOOUTPUTTYPE}' which renders the currently-selected audio output type as indicated on the Options > Audio tab. The rendered values are "Legacy", "Windows", and "Integrated". - Added proxy State function 'AudioOutputType()' which returns the same values as the {STATE_AUDIOOUTPUTTYPE} token above. - Added group header right-click option, 'Select All Items In This Category', which selects all items in a group on the Profile edit screen. - Added, 'Prefetch' to random sounds. This will load either the selected list or an entire directory (use with caution for obvious reasons). - Improved timing of {STATE_AUDIOCOUNT} token to be a little bit more forgiving when checking for counts immediately following the playback of a sound file when using Windows Media Components. - Counts added to groups on Profile edit screen. - Added option, 'Disable F1 Help' to the Options > General tab. This disables VoiceAttack's reaction to pressing F1 for help. - Bug Fixes - Various scaling issues addressed, including initial resizable form sizes when scaling changes. - Renamed proxy command Execute() parameters to allow for named parameters. - Fixed issue with proxy ProfileChanged event locking up if certain commands were executed with, 'WaitForReturn' set to true. - Stability improvements for several proxy functions. - Fixed threading issue with proxy function, 'CommandExists()'. - Fixed issue with reading resource sounds from VB.Net-based libraries. - Fixed issue with lockup while previewing TTS while using the {CMDSEGMENT:} token. v1.8.5 - Bug Fixes - Fixed issue with category grouping introduced in a late-arriving bug fix. - Fixed issue with {NEXTPROFILE_AT2} and {NEXTPROFILE_AT3} showing contents of {NEXTPROFILE_AT1}. v1.8.4 - Design Changes - Commands that have a value of, 'not set' for, 'When I say' will now be ignored. This generally occurs when a token is used and a variable that the token references is not set. - Prefetched audio will no longer display an error log entry if tokens are used and the resulting path results contains, 'Not set'. - {CMDWHENISAY} token was only returning the lower-cased passed value (name) when command was executed via the, 'Execute another command' action by name. This now returns the full, 'when i say' value for the command. This is kind of a bug fix, but it is listed up here in case you are depending on this value for whatever reason. - Improvements - Added keyboard, joystick and mouse button shortcut, 'double tap' mode which will allow the execution of a command when a keyboard, joystick or mouse button shortcut is pressed twice. Note that there is also an advanced additional option with this feature that will allow you to execute the same command with a single press. - Added token, '{CMDDOUBLETAPINVOKED}' that renders, '1' if a command is executed as a result of a double tap and '0' if it is not. - Added Boolean function, 'IsDoubleTapInvoked' to the proxy's Command object. This will return true if the executing command was executed as a result of a double tap. False if it was not. - Added keyboard, mouse and joystick shortcut, 'long press' mode which will allow the execution of a command when a shortcut is pressed for a longer period. Note that there is also an advanced additional option with this feature that will allow you to execute the same command with a short/standard press. - Added token, '{CMDLONGPRESSINVOKED}' that renders, '1' if a command is executed as a result of a long press and '0' if it is not. - Added Boolean function, 'IsLongPressInvoked' to the proxy's Command object. This will return true if the executing command was executed as a result of a long press. False if it was not. - Added, 'bleem', 'glomm', 'hiccup', 'leaveit', 'lookatme', 'revfast', 'revslow', and 'smack' as sound resources. - Added option, 'Stop after all commands complete' to the start action on the, 'Queue Action' screen. This tells the started queue to stop automatically once all the items in the queue finish executing. - Enqueued commands now receive command-scoped variable values. - Added, 'Always execute' command option that will allow a command to execute even if other commands are blocking. - Added time stamp to inline function output log. - Added option button to joystick button shortcut screen, plus a little bit of extra verbiage to indicate when no joysticks are enabled/assigned. - Added token, '{STATE_TTSCOUNT}' which renders the number of actively playing text to speech synths. Renders, '-1' if any error occurs. - Added '{STATE_SPEECHCULTURE}' that returns the culture name for the speech engine (for instance, 'en-US' or 'de-DE'). - Added token, '{LASTSPOKEN}' which renders the value captured from the speech engine, recognized as a command or not. - Added token '{PREVIOUSSPOKEN}' which renders the previous value captured from the speech engine, recognized as a command or not. - Added token {TXTOCCURRENCES} that will render the number of times a text string appears in another text string. - Added token {TXTREGEXREPLACE} that will allow you to replace text in one string with the text of another using regular expression matching. - Added profile-level author flag which will allow you to specify a nice message to the end user when commands are prohibited from being imported (used with the flag). - Added profile-level author flag which will allow you to specify a nice message to the end user when profiles are are prohibited from being duplicated (used with the flag). - Added command line option -noexport that indicates when a profile is exported as a binary .vap that the resulting profile cannot be exported as binary or XML when imported. - Command line parameter -datadir now parses environment variables. - Added command line option, '-restore' that will restore the VA window to a normal window state if minimized, maximized or minimized to the system tray. - Added, 'Right Ctrl', 'Right Alt', 'Right Shift', 'Right Win' as selections when clicking the key icons on the, 'Key Press' screen. - Bug Fixes - Fixed issue with {CMDSEGMENT} token rendering spurious values if the command was executed in any way other than by spoken phrase. If {CMDSEGMENT} is used in a command executed by mouse, keyboard or joystick, 'Not set' will be rendered. - Fixed issue with many volume sliders appearing in the Windows volume mixer if Windows Media Components was selected as the audio type. - Fixed issue with profile change action not being ignored if withing a command being called on profile unload. - Fixed issue with repeated commands holding on to locally-scoped variables. - Fixed issue where if a TTS voice was invalid, TTS would not stop if commands were stopped. - Fixed issue with category rename not changing if only letter casing changed. - Fixed issue with 'ProfileChanged' event not firing if a command is called on profile unload. - Fixed issue with, 'Get User Input' screens not getting focus when opened. - Fixed issue with relative movement checkbox not saving properly on edit on the Mouse Move action screen. - Fixed issue with System.Threading.AbandonedMutexException being logged if two instances of VA were running and one of the instances was shutting down. - Commands where, 'Ignore Command' actions exist did not include spoken phrase info for use in various tokens. This has been fixed. - Fixed issue with single-instance TTS not maintaining default TTS voice. - Fixed issue with TTS UI not enabling certain controls if SSML error was encountered. - Fixed issue with CLM author tag displaying blank when set. - Fixed issue with prefetched audio failing to resume prefetching if an exception was raised. - Fixed issue with browsing for file name with illegal characters in, 'Capture a Screenshot' action. - Fixed issue where screen shot causing certain color values to be transparent. - Fixed caption display issue with joystick buttons on command screen. - Fixed Category Rename screen not trimming spaces. - Several command line options were fixed to work when VoiceAttack is minimized to the system tray. - Fixed issue with joystick hotkey profile override not including sticks 3 and 4 in configuration. - Fixed issue with multipart dynamic composite command segments (say that five times) not fully populating. - Fixed issue when editing a command's command type was not updating the speech recognition engine. - Fixed issue with internal sound resource file not being accessible if a startup path was used. - Fixed low visual contrast on selected commands in profile list when command triggers were disabled. - Fixed crash issue with, 'Execute command by name' screen. - Fixed issue with log quiet mode not displaying log entry from, 'WriteToLog' proxy function even if option was set to do so. - Fixed UI issue with highlight disappearing when adding specified pauses. - Fixed issue with proxy method WriteToLog crashing VA in certain instances if null was passed in. - Fixed issue with some resizable screens not displaying all controls when opened for the first time. - Fixed issue with, 'Stop command if target window focus is lost' not working if the target app is not open. - Fixed issue with, 'Resume command if focus is regained' not stopping the paused command if the target process is terminated. - Fixed right-click context menu not working right on export and import command screens. - Fixed issue with multiple simultaneous sounds directed to multiple devices may cause the sounds to sometimes be played through the same device. - Fixed issue with recorder actions not being picked up as changes. - Recorder actions committed to the command screen now have an, 'undo'. - Null values written to log no longer crash VA when tool tip is presented (now displays, 'Log entry is a null value'). - Fixed issue with actions modified warning not being the topmost form when, 'always on top' is selected. v1.8.3 - Bug Fixes - Fixed an issue that caused some to not be able to have access to a working speech engine without running as an administrator. v1.8.2 - Improvements - Added extra verbiage to speech engine error screen to suggest running VA as an admin (due to potential permission issues). Not necessarily an improvement (but not a bug fix). - Bug Fixes - Fixed issue with minimize on startup and minimize to system tray not working together. v1.8.1 - Steam version only - Bug Fixes - Fixed issue with export/import screens crashing application. v1.8 - Design Changes - .Net Framework 4.7.2 is now required. This is to aid in ongoing plugin / inline function development. - Global targeting settings have been removed from the main screen. You can still target applications by using the profile and command, 'Send commands to this target' options. These options are located in the Profile Options and Command screens, respectively. - Complete UI overhaul using new controls to help with screen scaling. The first round of updates is intended to reproduce the UI of the original controls as much as possible. - 'Compact Mode' button has been removed and replaced by, 'Compact Mode' menu option in the system menu (icon in the top-left corner). - Default audio output type is now, 'Integrated Components' when VA is first installed (used to be Windows Media Components). - Exporting a profile now defaults to exporting as a compressed binary. This is labeled simply as, 'VoiceAttack Profile' in the profile export dropdown. Exporting as XML has been renamed, 'VoiceAttack Profile Expanded as XML'. - Creating a new profile will stop any running commands when the, 'Add Profile' screen is opened. - Improvements - Added support for selecting from four joystick devices (up from 2). - Added, 'Loop Start - Repeat Indefinitely (Infinite Loop)' that starts a looping block that loops continuously. - Added text-to-speech effect sets. Effect sets are a combination of sound effects that you can apply to tts voices for a custom sound. You can manage effect sets in two ways: from the Options screen and from the, 'Say something with TTS' screen. Effect sets can be exported and imported and are saved in a new .dat file in VoiceAttack's .dat folder (named, VAEffects.dat). Effects currently include echo, reverb, distortion, flanger, phaser, 'auto wah', chorus and pitch shift. - Added access to VoiceAttack's internal sounds from the, 'Play a Sound' and 'Play a Random Sound' screens. The path to the internal sounds is, 'internal:', followed by the name of the sound. For example, 'internal:Abinkle' will play the, 'Abinkle' sound. For convenience, the file input box is now a drop-down list that will allow you to select the sounds. - Added, 'Capture a Screenshot' action that allows you to capture the active window, primary screen, entire desktop or region to the clipboard, a file or to a folder (with automatically-named files). - Updated Options > Audio > Feature On Sound, Feature Off Sound and Stop Commands Sound dropdowns to preview sounds when values are changed. - Added some new sounds to VoiceAttack's internal sounds: 'cutsthru', 'hooweehoo', jarmouth', 'later', 'pom', 'powerplus', 'quitter', 'sapsapsap', 'shieldhit', 'squeepatpat', 'tonk' and, 'why'. 'Stop' and, 'start' are added as selections (they used to only be available as default selections). - Added advanced ability to access sounds in your own resource files. - Added, 'Active Window' as an option to, 'Set Audio Volume' action. - First round of sound file caching has been added. The maximum size of the cache (up to 256 mb) can be set from the Options > Audio tab with the 'Audio Cache Size' option. Set to zero to disable audio caching. Note that audio caching is only available when, 'Integrated Components' is selected as the audio output type. - 'Prefetch' option added to the, 'Play a sound' action. This will allow a sound file to be loaded into memory when the profile is changed. Prefetching audio is only available when 'Integrated Components' is selected as the audio output type. - 'Disable Audio Prefetch' option added to Options > System/Advanced tab. This will allow an override of any profiles that have 'play a sound' actions that also have, 'prefetch' enabled. - 'Preserve Prefetched Audio on Profile Change' option added to Options > System/Advanced tab to allow the retention of prefetched audio between profile loads. - Added, '-prefetchstats' command line parameter that will display a brief summary of prefetched items in the log on profile change. - Added, 'Reset Active Profile' system menu item. This works the same as the, 'Reset Active Profile' action, which means that this will invoke everything that normally occurs during a profile change (without actually changing the profile). - Added proxy Profile function 'ProfileInternalIDs()' which returns an array of GUIDs of all profiles that have non-null internal ids. - Added {STATE_JOYSTICK1ISGAMEPAD}, {STATE_JOYSTICK2ISGAMEPAD}, {STATE_JOYSTICK3ISGAMEPAD}, {STATE_JOYSTICK4ISGAMEPAD} tokens to indicate if the corresponding joystick has been designated as a gamepad controller in VA. If the joystick is a gamepad controller, the rendered value will be "1". If the joystick is not indicated as a gamepad controller, "0" will be rendered. - Added proxy State.Joystick Boolean functions, 'Joystick1IsGamePad()','Joystick2IsGamePad()', 'Joystick3IsGamePad()', 'Joystick4IsGamePad()' that correspond to the new tokens added above. - Added {STATE_JOYSTICK1LEFTTRIGGER}, {STATE_JOYSTICK2LEFTTRIGGER}, {STATE_JOYSTICK3LEFTTRIGGER}, {STATE_JOYSTICK4LEFTTRIGGER}, {STATE_JOYSTICK1RIGHTTRIGGER}, {STATE_JOYSTICK2RIGHTTRIGGER}, {STATE_JOYSTICK3RIGHTTRIGGER}, {STATE_JOYSTICK4RIGHTTRIGGER} that return the value of the left and right triggers (gamepad controllers only). The rendered value range is "0" to "255". If the stick is unavailable or not indicated as a a gamepad controller, the rendered value will be "-1". - Added proxy State.Joystick integer functions, 'Joystick1LeftTrigger()', 'Joystick2LeftTrigger()', 'Joystick3LeftTrigger()', 'Joystick4LeftTrigger()', 'Joystick1RightTrigger()', 'Joystick2RightTrigger()', 'Joystick3RightTrigger()', 'Joystick4RightTrigger()' that return a value of 0 to 255 if the joystick is indicated as a gamepad controller, or -1 if the joystick is not indicated as a gamepad controller (or is unavailable). - Added proxy State.Joystick methods for joystick 3 and joystick 4. - Added optional parameter, 'CompletedAction' to proxy.Command.Execute (both by command name and by internal id). This parameter allows you to specify a callback function that is called when the executed command completes. This is a test feature - which means it may or may not remain as an exposed feature. - Command screen now has a warning box that is displayed if canceled with actions changed. - Added {STATE_JOYSTICK1LEFTTRIGGER} {STATE_JOYSTICK2LEFTTRIGGER} {STATE_JOYSTICK3LEFTTRIGGER} {STATE_JOYSTICK4LEFTTRIGGER} {STATE_JOYSTICK1RIGHTTRIGGER} {STATE_JOYSTICK2RIGHTTRIGGER} {STATE_JOYSTICK3RIGHTTRIGGER} {STATE_JOYSTICK4RIGHTTRIGGER} tokens to check left/right joystick trigger values. Note this is for devices listed as, 'Gamepad Controller (1-4)' only. - Added, 'Toggle Listening', 'Toggle Hotkeys', 'Toggle Joysticks' and 'Toggle Mouse' actions. These toggle the various inputs - if they're on, they are turned off. If they're off, they are turned on. - Comment actions are now searched from the profile edit screen's filter box. - 'Set a Boolean Value' screen now includes a random ('coin flip') option. - Bug Fixes - Fixed issue with adding integer variables with names that had any uppercase characters. - Improved some sound file handling when files are previewed and do not exist in the, 'Play a Sound' and 'Play a Random Sound' action screens. - Fixed issue where reading text into a variable from a stream that does not end would cause the command to not be able to be stopped. - Fixed issue with {TXTLASXTPOS} not working right with an empty string and a variable that does not exist. - Fixed issue with {RANDOM}, {CONDITIONFORMAT}, {INTFORMAT}, {SMALLFORMAT} always returning a comma for the thousand separator regardless of locale. - Fixed issue with sounds not stopping properly when stopped while using, 'Integrated Components'. - Fixed issue with keyboard hook disconnect after multiple, rapid, 'stop command' executions. - Fixed mouse hook issue where loading may cause brief delay on startup. - Fixed some issues with joystick z-axis tokens breaking when using a device designated as 'Gamepad Controller (1-4)'. - Fixed issue with TTS and blank entries resulting in an exception log entry or exception message box in preview. v1.7.8 - Design Changes - Getting a target by window class name now requires the use of the prefix, '+'. For example, if you are searching for a window that has a class name, 'foo', simply search for, '+foo'. - Improvements - Targeting for subcommands optimized. - Added, SetOpacity(int value) method to the proxy object. Works exactly like the -opacity command line parameter. v1.7.7 - Bug Fixes - Fixed issue with users that have corrupt user.config files not working any more. - Fixed issue with legacy plugins no longer working if the profile was changed or commands stopped. - Fixed issue with proxy command Execute() method not executing commands referenced by internal id in linked profiles. - Improvements - Added proxy property, 'IsTrial' that returns true if VoiceAttack is in trial (non-registered) mode. v1.7.6 - Design Changes - Replaced sliders for sound/tts offset on Options > Audio tab with numeric input boxes. - Improvements - Added character prefix helpers to targets. If '^' is prepended to the, 'send commands to' target, the target search is limited to only window titles. If '~' is prepended, only process names are searched. If '+' is prepended, only class names are searched. For example: '^*notepad*' will only search all window titles that contain, 'notepad'. - Added, 'End at Position' to, 'Play a sound' action. - Added workaround for wireless Xbox controllers. Controllers identifying as gamepads will now show an additional option of 'Gamepad controller' in the selection list. This also adds support for left and right triggers as buttons 11 and 12. - Added joystick POV, 'button' support to conditions. - Speed improvement for importing profiles (more noticeable with profiles with a large number of commands). - Updated main screen images to be a bit more scalable. - Sounds folder and apps folder in Options > General are now browsable by clicking. - Startup tip that advises to add more commands now a tiny bit smarter about displaying within default profile. - Added, 'ProfileNames()' function to vaProxy that returns a string array of all profile names. - Added action support for changing default communication recording and playback devices. - Added -inputcomms, -inputcommsx, -outputcomms and -outputcommsx command line parameters that change Windows' default recording and playback communication devices. - Added, 'Set Windows Default Communications Playback/Recording Device on Startup' option to Options > Audio tab. - Added tokens {STATE_DEFAULTPLAYBACKCOMMS} and {STATE_DEFAULTRECORDINGCOMMS} that render the names of the default communications playback and recording devices. - Added proxy State string functions DefaultPlaybackComms() and DefaultRecordingComms() that return Windows' default communications playback and recording devices. - Added token {TXTWORDTONUM} which replaces "zero" through "nine" with "0" through "9". This is simply to help a bit with the way the speech engine interprets single-digit numbers. - Added, 'Wait for X seconds between keys' option for Quick Input that allows a pause between key release and the next key press. - Added command line parameter -priority which adjust the process priority of VoiceAttack. The values can be, 'low', 'belownormal', 'normal', 'abovenormal', 'high', and 'realtime' (all without quotes). Note that running with a value of, 'realtime' requires VA to be run as an administrator. This only works against a newly-created instance of VA and does not work against a running instance. Example: -prority high runs VA with a high-priority process. - Added token, '{CMD_WILDCARDKEY}' which returns the non-variable portion of a wildcard spoken phrase. - Added proxy Command function, 'WildcardKey()' which returns the non-variable portion of a wildcard spoken phrase. - Added proxy function, 'Close()' which closes VoiceAttack (same as clicking the close button on the main screen). - Added a, 'stop commands' button to the profile screen that will stop commands/sounds (works just like the one on the main screen). - VoiceAttackFault.txt is now written to C:\Users\YOUR_USER_NAME\AppData\Roaming\VoiceAttack if it cannot be written to the installation directory. - Added, '{ACTIVEWINDOWPATH}' token that renders the executable path of the active window. - Added 'ActiveWindowPath()' method to the proxy's Utility object. This returns the executable path of the active window. - Added, 'Execute(string CommandName, optional Boolean WaitForReturn, optional Boolean AsSubcommand) and Execute(Guid InternalID, optional Boolean WaitForReturn, optional Boolean AsSubcommand) methods to the proxy's Command object. This overload adds the, 'AsSubcommand' option which allows the executed command to be executed as a subcommand to the calling command. This allows the executed command to gain certain attributes, such as the command-shared variables as well as non-blocking when the calling command is executed synchronously. - Log message regarding privileges not being elevated and running as admin on startup now has a right-click, 'Stop showing this message' which hides the message. This can be reset by running VA with the (new) -resetwarnings command line parameter. - Startup tip that advises to add more commands can now be right-clicked and switched off (use -resetwarnings to turn this back on). - Updated the System Info button on the Options > General tab to include shortcuts to MSInfo and DxDiag. - Increased the line height of profiles exported as html. - Added information links to the bottom of the, 'Perform a Window Function' action screen that allow you to view information about the active window such as the window title, process name, location, size and underlying class name. Clicking each of these will copy their values into their respective input boxes. - Added option, 'Run VoiceAttack as an Administrator' to the Options > System/Advanced tab. This will attempt to allow running as an administrator (without all that right-clicking). - Added command line parameter, '-clearasadmin' to clear the, 'Run as an Administrator' setting (in case 'Run as an Administrator causes some type of situation that cannot be broken). - Added command line parameter, '-asadmin' to attempt to launch VoiceAttack as an administrator for the current session. - Reduced the overall height of the Options screen to help with lower-resolution setups. - Bug Fixes - Fixed issue with {CMD_BEFORE} token sometimes truncating output. - Fixed issue with Utilities flyout menu items not working if speech engine is not enabled. - Fixed issue with copying and pasting commands into a profile that has an flag set. - Fixed issue when deleting a command that is referenced within the profile's options page not also removing the reference. - Fixed issue where selecting the same profile from the dropdown list would still fire the profile unload command. - Fixed mouse shortcut threading issue that would cause VA to momentarily hang under certain conditions. - Attempt to not briefly display red, 'mute' icon when speech engine goes unavailable in certain configurations. - Fixed issue with KeyPress screen mass update dialogs sometimes causing VA to crash. - Fixed an issue with pasting/duplicating condition builder items. - Several action caption corrections. - Fixed issue with restricting mouse movement not working unless other mouse actions are turned on. - Restrict mouse movement/block mouse input is now cancelled if a, 'Stop all commands' action is executed. (Not implemented on a single command kill - the check would be too costly to see if other commands overlap). v1.7.5 - Improvements - Added option, 'Allow command segment info for composite commands' to System/Advanced screen. This option will allow the bypass of processing command segments for composite (prefix/suffix) commands. This will prevent performance bottlenecks imposed on those that do not use command segments for composite commands. v1.7.4 - Design changes - Changed, 'Profile Options' button from icon to an actual button that says, 'Options' - this is to make the button more noticeable as the icon kind of escapes notice. - Changed proxy GetCommand() to Command.Name(). GetCommand() is still available at the proxy level for backward compatibility. - Changed proxy CommandExists(String commandName) to Command.Exists(String commandName). CommandExists(String commandName) is still available for backward-compatibility. - Changed proxy CommandActive(String commandName) to Command.Active(String commandName). CommandActive(String commandName) is still available for backward-compatibility. - Changed proxy GetProfileName() to Profile.Name(). GetProfileName() is still available at the proxy level for backward compatibility. - Changed proxy ExecuteCommand(String commandName, Boolean waitForReturn = false) to Command.Execute(String commandName, Boolean waitForReturn = false). ExecuteCommand() is still available at the proxy level for backward compatibility. - Moved proxy ParseTokens(string Value) to the proxy Utility class. ParseTokens(string Value) is still available at the proxy level for backward compatibility. - Moved proxy GetAuthorID(), GetProductID(), GetAuthorTag1(), GetAuthorTag2(), GetAuthorTag3() to Profile.AuthorID(), Profile.AuthorTag1(), Profile.AuthorTag2(), ProfileAuthorTag3(). GetAuthorID(), GetProductID(), GetAuthorTag1(), GetAuthorTag2(), GetAuthorTag3() are all still available for backward-compatibility. - Moved proxy ExtractPhrases(string Phrases) and ExtractPhrases(string Phrases, optional Boolean TrimSpaces, optional Boolean Lowercase) to the proxy Utility class. Both are still available for backward- compatibility. - Moved proxy CapturedAudio(int Type) to Utility.CapturedAudio(int Type). CapturedAudio(int Type) is still available for backward-compatibility. - Improvements - Added a somewhat experimental option, 'Recognition' on the command edit screen as a test to try to get a little bit more speed out of speech recognition. The three options are: 'Normal' - which processes the command the same way VA always has which is waiting until the speech engine fully completes a speech event before, 'recognizing' a spoken phrase. 'Continuous Speech' - which attempts to find your spoken phrases within continuous speech (that is, *while* the speech engine is still engaged in the speech processing). 'Restricted continuous speech' - which works just like, 'continuous speech' (above), but restricts what is detected as a spoken phrase to the start of the speech event. Hands down, this option is my new favorite thing could have justified a full release on its own ;) - Rearranged command screen in order to accommodate those with a screen height of 768 pixels. - Added -running command line parameter that writes 0 to stdout if no instances of VoiceAttack are currently running, and 1 if an instance of VoiceAttack is running. - Added, 'Evaluate 'Not Set' as false' to the Set a True/False (Boolean) Value screen's toggle option. - Added command line parameters '-darkon' and '-darkoff' to turn on and off the dark mode setting on the main screen ('Cover of Darkness'). Note these only affect the launched instance. - Added experimental command line parameters '-noclasses' and '-noprocs' to exclude class names and process names when searching for applications, respectively. This is to help speed up processing by eliminating items that are not used (that is, if a window is not found by window title, the check will conclude sooner rather than continuing to check for either processes or class names). These are considered experimental as they are included for various testing. If testing is positive for these items, they will become UI elements in a future release. - Added, 'Reset Speech Recognition' menu item to the system menu on the main screen. Selecting this will reset the speech engine (and not reset the entire profile). - Added media keys to Quick Input / Variable Keypress / Variable Hotkeys - [VOLUMEMUTE], [VOLUMEDOWN], [VOLUMEUP], [NEXTTRACK], [PREVTRACK], [STOP], [PLAYPAUSE]. - Added author flag element to the command-level flags. This flag will allow the author to indicate a friendly message for the command if the flag is set to lock the command. This overrides the element at the profile level. - Added author flag element to the profile-level flags. This flag will allow the author to indicate a message for all commands that have their element set at the command level. - Added author flag element to the profile-level flags. This flag indicates that no new commands may be added to the profile. This was implemented to prevent data loss for profiles that should be, 'included' rather than edited directly. - Added author flag element to the profile-level flags. This flag can be used to indicate a friendly message to the end user that explains why the new commands are not allowed. - Added tip to log to add some commands if there are only a few commands in your profile and the spoken phrase is unrecognized. - Added, 'Mute Speech Recognition Device' to system menu. This mutes/unmutes the recording device that the speech engine is currently using. - Added, 'Speech Engine Recording Device' as an option to, 'Recording Device' on the 'Set Audio Level' screen. This is so you can just specify whatever the speech engine is currently using without having to know exactly what device it is. - Added command line parameter, '-showcommandnames' that will make the VA log entries display the current command name when a command is executing (for debug purposes). - Added tokens, '{STATE_JOYSTICK1ENABLED}' and, '{STATE_JOYSTICK2ENABLED}' which render as '1' or '0(())' depending on whether or not the joystick is enabled. These have actually always been in there, just did not get documented o_O. - Added, '{STATE_JOYSTICKSHORTCUTS}' that renders "1" if joystick button shortcuts are on, "0" if not. Somehow this was missed long ago when these tokens were added. - Added token, '{STATE_SPEECHDEVICEMUTE}' to test if the recording device that the speech engine is using is muted or not. This renders '1' if muted, '0' if not. - Added token '{STATE_SPEECHDEVICEVOL}' this returns the volume of the recording device that the speech engine is currently using rendered as a value from '0' to '100'. - Added, 'InternalID' author flag to profiles. This is a nullable Guid (GUid?) value that can be supplied by authors to identify individual profiles. - Added, 'InternalID' author flag to commands. This is a nullable Guid (Guid?) value that can be supplied by authors to identify individual commands. - Proxy Updates - Added proxy property, 'InstallDir' to the root proxy object. This indicates the installation directory of VA. - Added proxy properties, 'SoundsDir', 'AppsDir' and 'AssembliesDir' to the root proxy object. These indicate VA's sounds directory, apps directory and assemblies directory. - Added proxy property, 'IsRelease' to the root proxy object. This is a boolean value to indicate whether or not the current version of VA is a released version. - Added proxy property, 'PluginsEnabled' to the root proxy object. This is a boolean value to indicate if plugins are enabled (from within an inline function, of course (lol)). - Added proxy property, 'NestedTokensEnabled' to the root proxy object. This is a boolean value to indicate if the nested tokens option is turned on or not. - Added, 'Command' object to the plugin/inline function proxy that contains a set of methods that pertain to VoiceAttack commands. There are new methods as well as a set of methods that were previously only available through token rendering. - Added, 'Profile' object to the proxy that contains methods that pertain to VoiceAttack profiles. There are new methods as well as a set of methods that were previously only available through token rendering. - Added, 'Queue' object to the proxy that contains methods that pertain to VoiceAttack command queues. - Added, 'State' object to the proxy that contains methods that relate to various VoiceAttack/system states. These are almost all direct ports of the state tokens that are currently available. - Added a 'Joystick' object to the new, 'State' object that has direct ports of all the joystick state tokens into typed methods. - Added, 'Utility' object to the proxy that contains some (hopefully) helpful functions. There are new methods as well as a set of methods that were previously only available through token rendering. - Added optional parameters, 'trimspaces' and 'lowercase' to the VAProxy, 'ExtractPhrases' function (both default to false). Passing in a true value for, 'trimspaces' will return all elements without leading or trailing spaces. Passing in a true value for, 'lowercase' will return all elements as lowercase. - Added, 'CommandsStopped' event to the proxy object for use within inline functions so that your inline function can be notified when the, 'Stop All Commands' action has been executed (or the button on the main screen has been pressed). - Added, 'ProfileChanging' and 'ProfileChanged' events to the proxy object for use within inline functions so that your inline function can be notified when a profile is changing or has changed. - Added, 'ApplicationFocusChanged' event to the proxy object for use within inline functions so that your inline function can be notified when a focused application has changed. This takes advantage of the auto profile switching thread, so, auto profile switching must be turned on for this event to fire. - Bug Fixes - Command not able to be executed on paste has been corrected. - Installer now removes legacy files that may cause conflicts for some users. - Fixed issue with not preventing last profile from being deleted. - Fixed command screen ui anomalies introduced in prior releases. - 'Copy To' feature from the Profile edit screen not respecting flags has been fixed. - Fixed issue where [LSHIFT] was excluded from variable hotkey processing. - 'Reset the Active Profile' action now works again when adding it. - Registry settings for Last Run now updated when options updated. - Pressing, 'F1' on the Recorder screen no longer shows the help doc if recording. - Increased 'Get User Input' text size from 64 characters to 32767. - Scroll bar for, 'Set a Text Value to the Windows Clipboard' is now turned on. - Added some crash prevention when mouse scrolling through profile list. - Fixed issue where importing commands from other profiles was not updating the speech engine. - Fixed issue where {CMDSEGMENT} token not working with composite (prefix/suffix) commands. v1.7.3 - Design Changes - Text-to-speech (TTS) simultaneous voices have been limited to three total when, 'Single TTS Instance' is not enabled. - Duplicate, 'when I say' phrases are no longer allowed when there are duplicate, disabled commands. - Moved, 'Disable Speech Recognition' from Options > System/Advanced to Options > Recognition. - Improvements - Added, 'Use variable hotkey' feature to keyboard shortcuts. This will allow you to specify a text variable to indicate the hotkey(s) to monitor for the selected command. The notation to indicate the keys to use is the same that is used for Quick Input and variable keypresses. Note that any variable changes will require the use of the newly-added, 'Refresh variable hotkeys' action. Note that only global and profile-scoped variables will work with this feature. - Added, 'Command Queues - Enqueue Command' and 'Command Queues - Queue Action' actions to the VoiceAttack Action menu. These will allow creation and control over command execution queues. Command execution queues execute commands serially (that is, one after the next) as each is completed. Queues can be named so that you can have multiple queues for various purposes. - Added, 'Refresh Variable Hotkeys' action to update VoiceAttack's hotkey monitoring after a text variable value has been changed. - Added balance (pan) feature to, 'Play a Random Sound' action. - Added variable volume and balance to the, 'Play a Random Sound' action that will override the setting of each slider bar. - Added variable volume and balance to the, 'Play a sound' action that will override the setting of each slider bar. - Execute command by name will now include composite commands (prefix + suffix). - Added, 'AuthorID' and 'ProductID' to profiles. These are GUID values that can be modified within exported XML. These values can be accessed by calling proxy methods, 'GetAuthorID()' and 'GetProductID()', respectively. - Added, 'Block potentially harmful profile actions' to Profiles Options > Advanced tab. When selected, this works to prevent the following from occurring: - Profile switch actions (action prevented) - Profile startup command execution (command not executed) - Profile unload command execution (command not executed) - Commands locked by author flag (command not executed) - Run an application actions (action prevented) - Stop process actions (action prevented) - Inline function actions (action prevented) - Plugin execution actions (action prevented) - Unrecognized catch-all command execution (command not executed) - Dictation recognized command execution (command not executed) - Added option, 'Upon import, profiles will have, 'Block potentially harmful profile actions' selected'. This will flag each imported profile so that they may be inspected prior to use. - Added, 'Advanced' tab to Profile Options screen. - Added option, 'Prevent speech engine from changing microphone volume' to Options >System > Advanced screen. This will attempt to prevent the speech engine from changing the mic volume to compensate for a quiet or loud training environment. This is a Windows-level adjustment and affects all running instances of the speech engine. *Not a replacement for a properly trained speech engine. - Added the ability to use tokens in the Responses for the, 'Wait For Spoken Response' action. There is an experimental element to this, where the speech engine is initialized to accept the variable responses WITHOUT having to reset the profile (and subsequently the speech engine). Note that the limit for responses is still 250 items. - Added mouse button down/up toggle option (Mouse > Click screen). - Updated joystick component to .Net framework 4.5 and merged libraries into one dll (VAJS.dll). - Added, 'ExtractPhrases' function to VAProxy for use in plugins and inline functions. This accepts a string containing single, multipart and dynamic phrases and will break it up into a string array of single phrases. For example, 'hello;hi;howdy' will result in an array with three elements: hello, hi and howdy. 'good[morning;day;night;gravy]' will result in an array with four elements: good morning, good day, good night, good gravy. - Added Pause shortcuts on the Command screen. The last pause value entered is now a menu item that can be added without opening the pause screen. Also, a flyout containing some common pause values is now available. This pause set can be configured by adding a semicolon delimited string to the SpecificPauseValues element in the user.config file (e.g. 0.25;1.2;3.7;88). Not sure if that's going to be officially documented or not. - Added, 'CommandActive' function to VAProxy for use in plugins and inline functions. - Added token, '{CMDACTIVE:}' to test if a command is active or not. If the command is active, '1' is rendered. If the command is not active, '0' is rendered. - Updated, '{CMDACTION}' token to also include, 'DictationRecognized' which will be rendered if the command was invoked due to a dictation phrase being recognized. - Added token, '{STATE_CULTURE}' and '{STATE_UICULTURE}' to indicate the default user locale of the system and the default user interface language, respectively. - Added tokens, '{EXPDECINV}' and '{DECINV}' to provide invariant culture support for decimal rendering. - Added token, '{QUEUESTATUS:name}' to indicate the status of the indicated queue (Such as running, idle, paused, stopped, etc.). - Added token, '{QUEUECMDCOUNT:name}' to indicate the number of commands added to the indicated queue. - Added token, '{QUEUEACTIVECMD:name}' to indicate the name of the command running within the specified queue (if applicable). - Added token, '{QUEUECOUNT}' to indicate the number of created queues. - Added token, '{CMDLASTUSEREXEC}' that indicates the number of seconds since the last command executed by spoken phrase, keyboard key press, mouse click or joystick button press. That is, it does not include subcommands, commands executed externally, right-click execute, etc. - Bug Fixes - Set Audio Level screen OK button not enabling when, 'Application' selected has been fixed. - Fixed issues with text-to-speech being easily overloaded and not completing. - Various range checking and messages regarding range checking updated for setting small int, int and decimal values. - {AUDIOPOS} token not working correctly when sounds set to, 'wait until complete' has been fixed. - Fixed radio button grouping issue on mouse click screen when involving the scroll options. - Fixed issue on mouse move screen not selecting default options when changing from mouse click to mouse move. - Fixed parsing error in {EXP} that was not using the invariant culture. - 'Wait for spoken response' and 'Restrict Mouse Movement' as favorite actions now working. v1.7.2 - Emergency Bug Fix - Fixed issue with settings conflict keeping some users from changing options. v1.7.1 - Design Changes - Added new, 'Profile Exec' tab to Profile Options/Overrides screen. Moved the command exec options to this tab (page was getting way too tall). - Removed 'Exit VoiceAttack' icon from task bar jump list. - Improvements - Added, 'Wait for Spoken Response' action to, 'Other Stuff'. This is to help provide a simple way to wait for a response from the user (without having to make several commands). Just indicate the possible responses that the user may provide (dynamic, multipart), the text variable name to hold the response and a timeout. - Added, 'Profile Unload Command' to Profile Options. This is a command that can be specified to execute immediately before a profile is unloaded. A profile is unloaded when another profile is selected, or, when VoiceAttack is shutting down. You can distinguish between the two types of unloading by checking the value of the {CMDACTION} token (see below). Note that the profile that is selected to be loaded will wait until the unload command completes, and any startup command will execute after the unload command. Note that VA's shutdown will be delayed until the command completes. - Added, 'Convert a Variable Value' screen to, 'Other Stuff'. This provides a slightly more direct (and somewhat faster) approach to converting values from one type to another (without having to use tokens). - Added individual playback and recording device selection in the, 'Set Audio Level' screen. - TTS output channel is now selectable if you are using, 'integrated components' (also included in mass update). - Added "\Shared\Assemblies" folder to VoiceAttack installation directory to serve as an additional assembly repository. This becomes an alternate location to just putting assemblies in VA's root directory. This will help mostly with inline functions that are not precompiled and with plugins/ inline functions that access common assemblies. Updated the documentation in regards to references (both inline functions and plugins). - Added, 'Block Keyboard Input' feature to, 'Other Stuff > Windows'. This will allow you to block, unblock and toggle block/unblock on various keyboard keys. - Added, 'Block Mouse Input' feature to, 'Other Stuff > Windows'. This will allow you to block, unblock and toggle block/unblock various mouse actions (click, scroll, move). This kind of does double-duty to allow speed reduction of the mouse. - Added, 'Stop command by name' option to, 'Stop another command' screen. - Added, 'Captured Audio' screen to, 'Other Stuff' screens. This is basically for fun as it gives a UI element to the plugin/inline function's CapturedAudio() function. You can play back or save the audio captured by VoiceAttack's input. - Moved/added often-used Windows speech utilities to Options > Recognition tab, 'Utilities' button. Might save a few clicks. - 'Run an application' parameter box now accepts environment variables. - Added 'Override Default Playback Device' to Options > Audio tab. This will allow you to specify a playback device to override the playback channel for all, 'Play a sound' actions when, 'Default' is selected ('Default' is what is set as Windows' default device). - Added 'Override Default Text-to-Speech Device' to Options > Audio tab. This will allow you to specify a playback device to override the playback channel for all, 'Say Something with TTS' actions when, 'Default' is selected ('Default' is what is set as Windows' default device). - Added basic plugin manager to options screen to allow enabling/disabling of individual plugins. - Device conditions now include joystick X & Y positions and mouse X & Y positions (screen and app). - Added, 'ClearLog()' method to VAProxy that simply clears the log on the main screen. - Added, 'Get User Input - Text', 'Get User Input - Choice', 'Get User Input - Integer' and 'Get User Input - Decimal' screens. These will allow you to present the user with a very basic input screen and be able to capture that input in a variable. - Main screen log can now select all with Ctrl + A and copy with Ctrl + C. - Updated import warning messages to include inline functions and plugin access. - Added, 'Disable speech recognition (this session only)' option to the load options screen. - The option, 'Show window titles' on the, 'Load Options' screen changed to, 'Show window info'. The feature that this enables will now show both the window title and the process name in the log. - Added, 'Extract Multipart and Dynamic Commands' option to HTML export. This will expand multipart and dynamic commands on to separate lines. - Last run info written to registry: HKCU/Software/VoiceAttack.com/VoiceAttack/LastRun. - Added {STATE_AUDIOLASTFILE} token which renders the file name of the last-played audio file. - Added token, '{SPACE}'. Just renders a space o_O - Added token, '{NEWLINE}'. Just renders as a new line (\r\n). - Added token, '{PROCESSEXISTS:}' that renders a '1' if the process name exists and '0' if it does not (wildcards accepted). - Added token, '{PROCESSCOUNT:}' that renders the count of processes that match the name given (wildcards accepted). - Added token, '{NEXTPROFILE}' that can be used within a profile unload command to get the name of the profile that has been selected to load after the current profile is unloaded. This token will render as empty if the profile is not unloading or if the profile is unloading due to VA shutting down. - Added tokens, '{NEXTPROFILE_AT1}', '{NEXTPROFILE_AT2}', and '{NEXTPROFILE_AT3}' that can be used within a profile unload command to get the author tags of the profile that has been selected to load after the current profile is unloaded. These tokens will render as empty if the profile is not unloading or if the profile is unloading due to VA shutting down. - Updated, '{CMDACTION}' token to also include, 'ProfileUnloadChange' and 'ProfileUnloadClose'. The command will have these action types if the profile has an unload command specified. 'ProfileUnloadChange' will be rendered if the profile is changing to another profile. 'ProfileUnloadClose' will be rendered if VoiceAttack is shutting down. - Added tokens '{PROFILE_AT1}', '{PROFILE_AT2}', and '{PROFILE_AT3}' that render each of the three author tags within the current profile. - Added tokens '{PROFILE_AT1:value}', '{PROFILE_AT2:value}', and '{PROFILE_AT3:value}' that render each of the three author tags for previously-loaded profiles specified by, 'value'. - Added tokens '{PREVIOUSPROFILE_AT1}', '{PREVIOUSPROFILE_AT2}', and '{PREVIOUSPROFILE_AT3}' that render each of the three author tags within the last-loaded profile. - Added token, '{STATE_SYSDIR}' which renders the path of the system directory. - Added token, '{STATE_WINDIR}' which renders the path of the windows directory. - Added token, '{STATE_ENV:textValue}' token which will render the Windows environment variable for the value indicated in, 'textValue'. - Added token, '{VA_ASSEMBLIES}' which renders the path of VoiceAttack's Shared\Assemblies folder. - Added tokens, '{CMDTARGETMINIMIZED}', '{CMDTARGETMAXIMIZED}', '{CMDTARGETFOREGROUND}' that render '1' if the current command's target is minimized, maximized or the foreground window. '0' if not. - Added tokens, '{WINDOWMINIMIZED:}', '{WINDOWMAXIMIZED:}', '{WINDOWFOREGROUND}' that render '1' if the windows searched for is minimized, maximized or the foreground window. '0' if not. - Added tokens, '{PROCESSSMINIMIZED:}', '{PROCESSMAXIMIZED:}', '{PROCESSFOREGROUND}' that render '1' if the process searched for has a main window that is minimized, maximized or the foreground window. '0' if not. - Added tokens, '{GUID}' and '{GUIDCLEAN}'. '{GUID}' renders a GUID (unique identifier), and '{GUIDCLEAN}' renders a GUID without any dashes. - Added tokens, '{DATETIMEFORMAT:textFormatVariable}' and '{DATETIMEFORMAT:dateVariable:textFormatVariable}'. This returns a date/time as a user-formatted string, using standard format strings. - Added tokens, '{TIMESTAMP}' and '{TIMESTAMP:dateVariable}'. This returns either the current date/time or variable date/time formatted as a four-digit year, two-digit month, two-digit day, two-digit hour (24 hour), two-digit minute, two-digit second and three-digit millisecond: 20180101123020500. This could easily be done with {DATETIMEFORMAT}, but it's more of a matter of convenience (and not having to know that the format is yyyyMMddHHssmmfff o_O). - Added function CapturedAudio(int type) to the VoiceAttack proxy object for use in plugins and inline functions. You can specify the type of audio, and what is returned is a memory stream (wave stream). - Added, 'AuthorTag1', 'AuthorTag2', 'AuthorTag3' to profile-level author flags. These are text values and can be accessed via VA proxy methods, 'GetAuthorTag1()', 'GetAuthorTag2()', 'GetAuthorTag3()' (plugins and inline functions). - 'CommandExists' function of VAProxy expanded to return all referenced commands and not just the active profile's commands. - Bug Fixes - Fixed issue with closing certain dialog boxes also closing Profile edit screen. - Fixed issue with inline function references not rendering tokens on test compile. - Fixed compile issue with assemblies located inside of, 'Shared\Assemblies'. - Fixed issue with -command parameter not working when, 'minimize to system tray' is active. - 'Train speech engine' link on, 'Tips' screen has been fixed. - Highlighted TTS remains highlighted after preview. - Fixed issue where exporting profiles as HTML would not work if expanding an, 'execute another command' if the target was a multipart/dynamic command. - Fixed issue where copying a command to another profile was not saved if the target profile was not edited. - Fixed issue with repeat last command feature not updating the repeated command on edit. - Fixed some issues with, 'dictation' that caused actual recognized commands to get mixed in with the dictation buffer. - Fixed issue with 'Run an application' not working with combined environment variables and tokens (path and working directory). - Fixed Condition Builder summary horizontal expanding issue. - Minimize to system tray on startup no longer shows icon in task bar. - Fixed issue with options screen resetting listening. - Fixed command screen repeating radio button selection issue. v1.7 - Design Changes - Options > General > Display Size is no longer applicable. What VoiceAttack will now do is allow Windows to adjust the sizing based on scale. If automatic sizing does not fit your needed requirements, v1.6.9 will still be available for use. See the VA user forum for more info. - Moving the form by dragging from open space on the form has been removed. - The 'Snap to edge' feature when moving a window to the edge of a screen has been removed. - 'Select a special action' list on, 'Other stuff' screen has been removed. - Improvements - Added device state checks to conditions. You can now check to see if your keyboard keys/ mouse button/joystick buttons are down or up. You can also check if they are the only keys/buttons down as well as check if any keys/buttons are down (or none at all). This will allow you to do stuff like say, 'Fire Weapons' and VA can react based on what keys are down. Or, if you are using a hotkey to execute a command, you can control flow of your command based on a mouse button or joystick button or keyboard key or all or none or whatever lol. For a while, this could be done with tokens, but now can be done right in the condition screen (or condition builder). - Added ability to export a VoiceAttack profile (.vap) as a compressed binary (it's still a .vap, just a binary .vap). - Added some author flags for use within VoiceAttack. See the help document section, 'VoiceAttack Author Flags' for more info. - Added, 'Global Profiles' option to the Options>General tab. This works exactly like the profile includes option that is in the profile options screen. This will allow you to pick a cascading set of profiles that will be included with when ANY profile loads. The commands in these selected profiles will be overridden by commands in the profile options and then by the commands in the active profile: Priority: - Active Profile - Referenced, included profiles from the Profile Options screen - Referenced, included profiles from the Global Profiles option on the Options screen - The main screen is now sizable. - Added, 'Repeat Command Phrases' to the Options>Recognition tab. This will allow you to specify 'repeat' phrases in a semicolon-delimited list. So, instead of saying, 'increase front shields' over and over again, you can simply say, 'repeat' or 'repeat that'. - Added an, 'Apply' button to the Profile screen. Been needing that for some time o_O - Load speed improvements for most, 'Other Stuff' screens. - Yet another attempt to allow even larger sets of commands to be added to profiles. In this go-round, dynamic commands are placed more efficiently into the speech engine for use. This will hopefully allow for a lot more dynamic commands, as well as a quicker load time. - 'Cover of Darkness' option is now in the main screen's menu. This will allow you to toggle the main screen's, 'dark mode', which was only available as a command-line parameter (the command line parameter has been removed). - Added, '-exit' command line argument to tell VoiceAttack's running instance to exit. - Added, 'MainWindowHandle' property (get) to VAProxy for use with plugins and inline functions. - Turned on basic code folding and rudimentary autocompletion (keywords and VA.*) and brace matching for inline functions. - Added some very basic auto-indenting for inline functions. - 'Perform a Window Function' Window Title box now processes text variables and tokens. - 'Perform a Window Function' Window Title has been overloaded to also search for windows by process id if the value resolves to an integer. - Automatic profile switching now allows for process name to be included. Works exactly the same as the window title stuff that's already in there (wildcards). Search priority is window title, then process name. - Adding/updating command duplicate check is now a little quicker. - Added, 'Min Unrecognized Confidence Level' option to the Options>Recognition tab. Setting this value allows you to filter the, 'Unrecognized' log items a bit. The higher the value, the more likely your, 'unrecognized' log items will be filtered out. - Added, Export/Import Settings facilities on Options>System/Advanced tab. This will allow you to backup your VoiceAttack settings and restore if needed. Note that your registration details and profile data is not saved with this information. Also, your profiles and registration data will be unaffected by an import of settings. - Added link to Options>System/Advanced tab to browse VoiceAttack's data folder. Might save a few steps explaining here and there ;) - Added token, '{PREVIOUSSPOKENCMD}' as a quick way to retrieve the previously-spoken command phrase. - Added token, '{SPOKENCMD:X}' as a way to access the history of spoken commands, starting at zero. A value of zero ({SPOKENCMD:0}) is the same as getting the value of the {LASTSPOKENCMD} token. A value of 1 is the same as getting the value of {PREVIOUSSPOKENCMD} ({SPOKENCMD:1}). A value of 2 would get the spoken phrase that was issued before the previous spoken command and so on. If no history exists for the value, a blank (empty string) is rendered. The maximum number of items in the history is 1000. - Added token, '{PREVIOUSPROFILE}' as a quick way to retrieve the previously-loaded profile name. - Added token, '{PROFILE:X}' as a way to access the history of loaded profiles, starting at zero. A value of zero ({PROFILE:0}) is the same as getting the value of the {PROFILE} token. A value of 1 is the same as getting the value of {PREVIOUSPROFILE} ({PROFILE:1}). A value of 2 would get the name of the profile loaded before the previous profile and so on. If no history exists for the value, a blank (empty string) is rendered. The maximum number of items in the history is 1000. - Moved, 'Reset Screens' button over to the System/Advanced tab of the Options screen. - Exposed, '-reverseprofilepriority' command line argument to allow for reversing, 'included' profile priority. So, for example, your active profile's commands are lower priority than the included and the included are lower than the global. - Removed restriction on global, 'Stop All Commands' hotkey that required that the selected keys are the only keys down in order for, 'Stop All Commands' to fire. - Added, 'Silence' as a choice in feature sounds (Options => Audio). Now you don't have to turn ALL the sounds off if you don't want just one of the sounds. - Added, 'Reset the Active Profile' action to reload the current profile. The profile will be reloaded, which means that any profile-scoped variables (variables prefixed with ONE '>') will be cleared. Persistent profile variables (variables prefixed with '>>') will be retained. All commands will be reloaded and any tokenized, 'when i say' phrases will be reevaluated. The speech engine will also be reloaded (of course), and any executing commands will be stopped. As you can see, this is whatever a, 'change profile' action does, just without actually changing. - Made startup a little more forgiving (well... less crashy) when selecting, 'Lightweight' variants of the Speech Platform 11 engines. - Bug Fixes - Fixed issue where playing a random sound from a directory would sometimes crash the app. - Fixed inline function indenting issue. - Fixed issue where clicking, 'Ok' on Options screen would enable listening if listening was disabled. - Fixed issue when accessing, 'not set' command-scoped variables when using subcommands. - Fixed issue where, 'Active Window' selection in, 'Perform a Windows Function' ceased to work. - Fixed inline functions set as asynchronous not showing function exception messages. v1.6.9 - Improvements - Added audio channel selection when playing random sounds. Just like single audio file playback, you will need to have, 'Integrated Components' selected as your audio output type in order for this feature to be available. - Bug Fixes - Fixed critical issue with Recorder screen causing an error on save. v1.6.8 - Improvements - Profile set load/save time performance increased. This will be mostly noticeable on larger profiles and/or profile sets. - Profile edit load time improved for larger profiles (lots of commands and/or lots of actions). - Added new action, 'Add a Loop Break' which will cause control flow within a loop to move to the End Loop action (breaking the loop). - Added, 'Default' override text-to-speech voice at the profile level. You can now specify a default voice for your profiles (instead of Microsoft David o_O). This should work when you select, 'Default' as the voice as well as if your token/variable name does not resolve to a valid voice name... that is, if the override also resolves to a valid voice name (otherwise, it's Microsoft David for you lol). - Added, 'Enable Sleep Mode' option on Systems/Advanced tab of the Options screen. When the Windows speech engine is active, Windows is prevented from going to sleep on its own. When this option is enabled, VoiceAttack will attempt to put the speech engine to sleep ('Sleep Mode') if no audio is detected after the number of seconds you specify. When the speech engine is off, Windows will then be able to sleep if it is able. To wake up the speech engine out of, 'Sleep Mode' just move the mouse, click a mouse button or press a keyboard key. - Added, 'Windows Speech Recording Device' option to options screen. This will allow you to easily view and/or modify the device that the speech engine is using (this is essentially a shortcut to the Windows setting so you don't have to dig for it). - Added the ability to provide a custom, 'interrupt' sound in place of the default sound (for stop all commands). Just provide a, 'sys_stop.wav' to the VA install directory and that sound will be used. For more info, see the, 'For fun... maybe' section in the help doc. - Also for fun (maybe)... Added three new options to the Audio tab of the Options screen: 'Stop Commands Sound', 'Feature On Sound' and, 'Feature Off Sound'. This will let you set the three base sounds (stop commands, listening on/off, mouse on/off, etc.) in VA to something maybe more similar to your setup other than the default sound ;) - Mouse clicks are a little bit more context menu friendly when not using the, 'bypass mouse targeting' option. - Export as HTML will now respect the column order from the Export screen. - Export as HTML now limits the height of all the rows to a single line (except for rows where, 'Actions' is included). - Holding down the Alt key while clicking the, 'Move Up' or, 'Move Down' buttons on the Command screen will move the selected actions to the top or to the bottom. - Removed restriction for, 'listen once' and 'toggle' options of the global listening hotkey that required the selected hotkeys to be the only keys down to operate. - Added a modifier to the, 'check for updates on startup' option which will allow you to check for new beta versions along with the usual full-release versions. - 'Active window' now a selection in the dropdown list for the, 'Perform a Window Function' action. This is so you don't have to use the '{ACTIVEWINDOWTITLE}' token to get the same result. - Removed byte order marker (BOM) from beginning of text when, 'Write to text file' is used. If this is somehow needed out there by somebody, I'll make sure to put an option in to include it. For now, it's gone. - Added token, 'STATE_VA_NESTEDTOKENSENABLED' to indicate whether or not the setting for using nested tokens is on or not. "1" will be the rendered value if nested tokens are on, "0" if they are not. - Added token, 'STATE_DIRECTORYHASFILES:textVariable' to indicate whether or not a directory contains any files. "1" will be the rendered value if files exist, "0" if not. Note that if the directory that is queried does not exist, "0" will be returned. - Bug Fixes - Fixed issue with Plugin interface v4's session state not retaining values set during, 'Invoke'. - Fixed issue with command-scoped variables not not maintaining 'not set' state when returning from a subcommand. - A little less crashy when updating the task bar icon (especially when options are changed). - Fixed issue where, 'Stop Sounds' action would not stop sound if, 'wait until complete' was checked. - Fixed issue where a disabled multi-part command would allow single elements of the multipart command to be added. - Fixed issue where environment variables would not be rendered properly when previewing sounds. - Fixed issue where columns were missing from html export sheet when columns were moved around. - Fixed issue where hitting ctrl+z (undo) or ctrl+y (redo) on command screen when, 'when I say' is focused, the command actions would be modified. v1.6.7 - Design change - Instead of forcing to use legacy audio, the default output type will be, 'Integrated Components' if Windows Media components are not installed. - Improvements - Steam security update. - Added, 'Integrated Audio' support as an audio output option. This will allow VoiceAttack to play a wide range of sound files and not require Windows Media Player (and its components) to be installed. Two additional benefits of using 'Integrated Audio' are the ability to choose the output channel (speakers, headphones, monitor, etc.) and adjust the balance (left/right) of the audio. - New tokens: '{STATE_ANYKEYDOWN}' renders "1" if any keyboard button is pressed, "0" if no keys are down. '{STATE_ANYMOUSEDOWN}' renders "1" if any of the five standard mouse buttons are pressed and "0" if no mouse buttons are pressed. '{STATE_JOYSTICK1ANYBUTTON}' renders "1" if any of the buttons on joystick 1 are down, "0" if no buttons are down. '{STATE_JOYSTICK2ANYBUTTON}' renders "1" if any of the buttons on joystick 2 are down, "0" if no buttons are down. - Bug Fixes - 'Kill a process by name' feature now processes tokens as it says it should. - Calculating integer values with capitalized variable names would cause the variables to not calculate. This has been fixed. - Mass update of TTS actions not updating everything within the same command has been fixed. v1.6.6 - Improvements - Steam security update. - Added option, 'Load Profile on Startup' to the options page. Select a profile to load at startup, regardless of last-used profile. I'm thinking this has been on the request list the longest ;) - Removed token restriction on variable pause screen. You can now use any number of tokens/literals that can resolve to either a decimal value or a decimal variable that resolves to a decimal value. - Added token, {RANDOMDEC:lowValue:highValue} - This renders a random decimal between a low value and a high value (inclusive). - Bug Fixes - Composite (prefix/suffix) commands that also have a profile override not allowing the override to be optional has been fixed. - Mic unplugged during edit no longer crashes the application. - Package import (.vax) false warnings fixed. - Profile global listening hotkey, 'prevent key from passing through' not working has been fixed. v1.6.5 - Improvements - VoiceAttack can now detect and use Microsoft Speech Platform 11 speech engines and text-to-speech synthesizers. - Added, 'Condition Builder' feature to allow compound conditions. You can now, 'AND' and 'OR' your conditional statements (If, Else If, Start Loop), and make your conditions a little easier to read with fewer duplicated actions. You can also convert your existing conditional statements by right- clicking on the action and selecting the, 'Edit with condition builder' menu item. There's a LOT going on, so I'll defer to the help document (there's a new section titled, 'Using the Condition Builder'). - First round attempt to bulk load dynamic and composite (prefix/suffix) commands more efficiently. - Added, 'Start Loop - Repeat Certain Number of Times'. There are two options. The first is to just repeat a certain number of times. The second is to repeat a certain number of times using a range with an optional specified indexer variable. This can be found in the, 'Add a Loop Start' submenu. - Added mouse event recording to the, 'Recorder' screen. You can toggle the capture of mouse click/scroll/ tilt wheel by pressing a hotkey (assignable from the recorder screen). Also, mouse position is captured via separate hotkey with application-relative coordinates available as an option. - Changed, 'Set a Date/Time' value action to allow for a variable/token when adding time. - First round attempt to isolate Steam VoiceAttack from the Steam environment to help with things like running as an admin, starting with Windows and not showing, 'in app' when VA is started last. - The "Say something with text to speech" screen voice selection dropdown now allows you to also type whatever you want in the box. This can be a text variable or literal text and/or tokens that can also resolve to a variable name. When the tts is rendered, an attempt is made to derive a voice from the name. If no valid voice is found with the rendered name, the default voice will be used. Just a note... the voice names must match exactly with what is installed in the system. - Added start/stop recording hotkey to, 'Recorder' screen, plus audio feedback for when recording starts and stops. - Added small, live coordinates update to the mouse position capture screen as a source of additional feedback. - Removed, 'Mouse Capture Hotkey' option from Options screen (Hotkey tab), since this is now configured from the mouse position capture screen. _ Updated 'capture mouse position' screen to allow for a single-key capture hotkey, configurable from the mouse capture screen. - Added a, 'mass update' feature to the Say Something with Text-To-Speech screen. Right now, this updates the voice, volume and rate only, and only across the entire profile. - Switch to another profile by name has been added as an option to the, 'Switch to another profile' action. Note that the input box can take any number of tokens to render a valid profile name. Also note that if your profile names change, this value will not be updated. - Added first-round take on importing, 'packages' (.vax) files. Packages are zipped-up profiles, sounds and apps/plugins that can be imported in one shot (see help doc section, 'VoiceAttack Profile Package Reference' and updated, 'Importing Profiles' section). - Option added to allow VoiceAttack to minimize when close button is clicked. - Added a version check for newer profiles on import. If the imported version is from a newer version of VoiceAttack, the user will get a message box stating so. - Added state token, '{STATE_SPEECHACTIVE}' which will render "1" if the speech engine is detecting speech, or "0" if the speech engine is not detecting speech. - Added new tokens, '{STATE_SYSMUTE}', '{STATE_APPMUTE}' and '{STATE_MICMUTE}'. These work exactly like '{STATE_SYSVOL}', '{STATE_APPVOL}' and '{STATE_MICVOL}', except that the test is for mute/unmute (instead of just volume being zero). A rendered value of "1" means the device/app was muted, "0" means the device/app was not muted. - Added check for NeoSpeech voices to offer warning for users to use the, 'Single TTS Instance' option. - Bug Fixes - Fixed an issue where if a jump and jump marker were in a suffix command together, and the marker preceded the jump the position pointer would be offset incorrectly. - Set Text variable by invalid URI was causing VoiceAttack to crash. This has been fixed. - Crash resulting from key up/mouse up/joystick up shortcuts when combining profiles has been fixed. - Switching profiles with startup command no longer blocked by synchronous calling command. v1.6.4 - Steam version update, security. v1.6.3 - Steam version update, security. v1.6.2 - Design Changes - Replaced, 'include profile' with the ability to include multiple, prioritized profiles on the Profile Options screen. Just click the, '...' button and add profiles to include. The higher the profile is on the list, the higher its priority. Duplicate-named commands in higher- priority profiles will be retained. Note: The current, active profile always has the highest priority. - Improvements - Added, 'Execute an Inline Function - C# or VB.net Code' command action. This will allow you to write C# or VB.net code in a function to be compiled and executed on the fly. This is for use when you want to do something a little more complicated but a plugin would just be too much to work with. From within this class (yeah... the action is named poorly... it's better than saying, 'Instantiate an inline class and execute a function') you have access to the VoiceAttack proxy object (just like you do with plugins)... execute commands, parse tokens, get/set variables, etc. There is a very basic editor included that may or may not improve over time. I've been resisting requests for a long time for this, since plugins were available. Hoping I don't regret this lol o_O - Added, 'Build Output' to the, 'Execute an Inline Function - C# or VB.net Code' screen. What this does is make the, 'Execute an Inline Function - C# or VB.net Code' screen dual-purposed by allowing you to specify a file name in which to compile your code into (the resulting file is also called an, 'assembly'). This is so you can have precompiled versions of your inline functions for whatever reasons you may need. - Added, 'Execute an Inline Function - Precompiled' action to execute the file you create using the, 'Build Output' feature outlined above. - Added token, '{CMDSEGMENT:segment}' which will allow you to extract specific portions of dynamic commands (commands that contain dynamic sections), indicated by, 'segment'. This will allow you to make more precise decisions based on what was spoken. For instance, let's say you have a complex dynamic command that you use to build several kinds of items like this: 'build [1..10][bulldogs;wolves;strikers][please;]' Then, you say, 'build 5 bulldogs' to execute that command. To find out what was built, you can check {CMDSEGMENT:2} (note that the specified, 'segment' is zero-based. So, the first segment is 0. The second is 1, and so on). The rendered value will be, 'bulldogs'. Then, you can find out how many items to build by checking {CMDSEGMENT:1}. The rendered value will be, '5' (which you can convert and use in a loop, for instance). For bonus points, you can check {CMDSEGMENT:3} and see if, 'please' was spoken and then thank the user for being so polite (or chide them if they didn't say, 'please') ;) - First pass at, 'scoped' variables. Variables can now be, 'scoped' globally (as they always have been), profile-level and command-level. In order to not triple up the user interfaces, variable names will now have a prefix associated with them. Profile-level variables will be prefixed with the, '>' character, and command-level variables will be prefixed with, '~'. Global variables will be unprefixed. So, 'myTextVariable' will be globally-scoped, '>myTextVariable' will be profile-scoped and '~myTextVariable' will be scoped at the command level. When a profile is switched, the profile-scoped variables are lost. If you want to retain a profile-scoped variable between profile changes, prefix your variables with two '>' characters. For example, '>myTextVariable' (single, '>') will be lost, '>>myTextVariable' (double '>') will be retained and will be available when you switch back to that profile. Command-scoped Variable names that are prefixed with two '~' are considered command-shared. That means that the variable will be, 'shared' among commands that are executing in the same execution chain. Basically the values are passed from one command to any subcommands and then back when control is released. Clear as mud? Some examples... First, WITHOUT command-shared variables: Command A sets text variable ~myText to 'hi'. Command A then executes Command B as a subcommand. Command B reads ~myText and it is, 'Not Set' (null). That is because ~myText is command-scoped. It is only available to Command A. WITH command-shared variables: Command A sets a shared text variable, '~~myTextVariable' to 'hello'. Command A then executes subcommand Command B. Since ~~myTextVariable is shared, Command B can then read and write ~~myTextVariable. Command B reads ~~myTextVariable as, 'hello' and then decides to set ~~myTextVariable to, 'greetings'. When Command B completes its execution and control returns to Command A, Command A will read ~~myTextVariable updated as 'greetings'. Another example is Command A executes Command B. Command B executes Command C. Command C initiates the creation of ~~myTextVariable and sets its value to 'welcome'. When Command C completes, it releases control to Command B. Command B completes and releases control to Command A. Command A reads ~~myTextVariable as, 'welcome'. The idea here is that even though the variable was created two levels down from Command A, it is still accessible to Command A. The only things that you need to be aware of is that all shared variables are passed down to subcommands. If you want values to be passed back up to the calling command, the, 'Wait until this command completes before continuing' option MUST be selected for the subcommand. This is kind of an unorthodox way to be able to pass private information between commands without having to use global variables or establish parameters or return values. Note this is experimental and will get pulled if it causes issue. Added a section to the help document called, 'Advanced Variable Control (Scope)' in regards to this. - Dynamic range has been updated to optionally accept a multiplier. This way, you can have ranges that, 'step' by the multiplier value. For instance, if you would like to specify a dynamic range that uses only 10s, you would use the following: [1..10,10]. The result would be 10, 20, 30,..., 100. - Added, 'Duplicate Profile' to the main screen. This will only be available to registered users as you can only have one profile in trial mode. - Added, 'Repeat command while keys are held down' option to command hotkey screen. If this option is selected, the invoked command will loop as long as the keys that invoked the command are held down. - Added, 'Repeat command while joystick buttons are held down' option to command hotkey screen. If this option is selected, the invoked command will loop as long as the joystick buttons that invoked the command are held down. - Added, 'Repeat command while mouse buttons are held down' option to command hotkey screen. If this option is selected, the invoked command will loop as long as the mouse buttons that invoked the command are held down. Note that the option to prevent pass-through has to be unchecked to use this feature. - Added, 'Stopped' and, 'ResetStopFlag()' to the VoiceAttack proxy object. The 'Stopped' property will allow you to query whether or not the user has issued a, 'stop all commands' action or pressed the stop commands button on the main screen. Note that the VA_StopCommand function in the plugin interface still works. This is mainly for using the proxy object within inline function actions that are run asynchronously (not waiting for the function to complete). The 'ResetStopFlag()' function will reset the flag if you want to continue for some reason (and still want to check again later). - Added, '{CMDWHENISAY}' token to indicate the full value of what is in the, 'when i say' box when a command is executed. - Added, '{CMDCOUNT}' token as an indicator for the count of executed top-level (non-subcommand) commands. - Added, '{CMDISSUBCOMMAND}' token to indicate if a command that is executing is being executed as a subcommand. - Copying a command that contains subcommands is now allowed if the subcommands that are executed are executed by name. - Added, '-uritimeout' command-line parameter to allow for changing the default timeout for the, 'Set text variable by URI' feature. This is a stopgap until proper user interface is (ever) created. - Log no longer clears when profile changes. - By special request, "Pink" has been added to the choices of log icon colors ;) This is available in the, 'write to log' action, as well as through the VoiceAttack proxy object's WriteToLog() function. - Added, 'Log Quiet Mode' option to System/Advanced tab. This will let you keep log clutter to a minimum, especially with externally-executed plugin commands occurring more and more. With this option, you can choose to allow warnings (yellow-dot entries) and/or, 'Write to log' command actions (regardless of color). Error entries (red-dot, VA generated) are never filtered. - Increased the tooltip delay across the board to 7 seconds (used to be 5). There is a setting inside the VoiceAttack user.config file that holds the tooltip display duration (the setting is called, 'ToolTipDuration'). It is expressed in milliseconds. So, if you want to extend or shorten the delay, you can change that value if you want (that value is now respected application-wide). - Added, '{TXTLASTPOS:textVariableOf / text value : textVariableIn / text value} and {TXTLASTPOS:textVariableOf / text value : textVariableIn / text value : intVariableStart / int value}' tokens to get the last position of text within other text. Note that there are two variations of this token. One with a numeric start position and one without. If you use the option without a start position, the end of the text is assumed. {TXTLASTPOS:"abc", "abc123abc"} will return "6". - Added, '{STATE_VA_PLUGINSENABLED}' token. Returns "1" if plugins are enabled, and "0" if plugins are disabled. - Added, 'append' option to, 'Write Text to a File' action. - Added, 'Begin at position' option on the, 'Play a sound' screen. This option will accept a literal, token or decimal variable. When the sound is played, the position will be set according to the number of seconds you provide (expressed as a decimal value). The sound preview screen will allow you to try this out, as long as what you are putting in the box can be rendered into a decimal at the time of preview (variables must be set first). - 'Fade in' option added to, 'Play a sound' screen. This is only available if you use, 'begin at position'. This is used to keep sounds that start at a position from sounding too harsh if started at particular points in the audio. - Added, {STATE_AUDIOCOUNT:variable/value} token. This returns the number of currently- playing instances of an audio file with a given file path. - Added, {STATE_AUDIOPOS:variable/value} token. This returns the position of a currently- playing audio file with a given file path, expressed as seconds. - All keys that are down are now released when commands are stopped (not just mod keys). - Added 'Set Audio Level' action to Windows actions. This action will allow you to mute/unmute/toggle mute/set volume/offset volume for the system audio (default playback device), the microphone (default recording device) and various apps as they relate to the Windows System Volume Mixer. - All targeting-type actions will now accept the window class name as a target. This includes, 'Send Commands To', Perform a Windows function's 'Window Title' and the new, 'Set Audio Level' application target. - Added, '{STATE_SYSVOL}' token. This renders a value between '0' and '100' based on your current system volume (default playback device). - Added, '{STATE_MICVOL}' token. This renders a value between '0' and '100' based on your current mic volume (default recording device). - Added, '{STATE_APPVOL:value}' token. This renders a value between '0' and '100' based on the indicated app volume as it relates to the System Volume Mixer. If the volume cannot be accessed (app closed for instance), a value of "-1" will be returned. The value parameter can be a variable name (without quotes: {STATE_APPVOL:myTextVariable}, or it can be a token or a literal if contained within double quotes: {STATE_APPVOL:"*windows media*"} or {STATE_APPVOL:"{TXT:myVariable}"}. The value expected for the parameter can be the window title, process name or window class name (wildcards are supported). - Added token processing support to Set Text/Small Int/Int/Date/Boolean/Decimal variable name input boxes. - Added evaluation default options to each of the condition types. If you have this option selected and you set up a condition for, as an example, a boolean variable, the boolean variable will be evaluated as false if it is not set (null). Small and large integers and decimals will evaluate as zero, text will evaluate as empty (blank) and date/time will evaluate as 1/1/0001 12 am. This option is on by default when you add a new condition start (if) statement. The option choice persists for each type. This was put in to help those that are new at this to not get confused by null values as well as maybe save a step here and there for everyone. - Updated the convert token/text for integers and small integers to accept decimal tokens. The fractional value is simply lopped off (does not round). Previously, this would result in a value of, 'not set' for the integer variable. - When selecting more than one command action in the command edit screen and adding a 'Begin a conditional statement', the begin/end actions will now wrap the selected actions. - 'Pause command when focus lost' now does not pause when the target is not focused when the command is first issued. The intended window will be focused as expected - Added command line parameter -datadir to allow a directory to be specified to hold the VoiceAttack.dat file (and its backups). - Added extra speech engine handling (trying to prevent lockup) when locking and unlocking Windows. - Bug Fixes - Fixed issue with setting text variable by URI hanging the entire user interface. - Fixed {CMDSEGMENT} token not accessing segments when used with a composite (prefix/suffix) command. - Fixed command line options not working if .exe is NOT cased correctly o_O - Fixed issue where composite (prefix/suffix) commands and Quick Input would not respect target process or lost focus/continue command. - Automatic profile switching no longer tries to switch to a deleted profile during the same running session. - Automatic profile switching for newly-created profiles is now working. - Additional handling in audio output/input options in case of broken internal components (Trying to keep the entire house from coming down from minor options). - Fixed issue where animated mouse was not ending up in the right place when, 'application coordinates' selected. - Very large dynamic number ranges would cause VA to hang and/or crash. This has been fixed up a little better. - Fixed issue where the numpad number 9 could not be used in the key press duration box on the 'Add a key press' screen. - Multiple instances of the same plugin causing VA to crash has been fixed. You'll get a warning message that only one will be used (first one in wins). - {CMD} token now shows the proper command name when, 'execute a command by name' is used with a command that is using dynamic sections. - Fixed an issue with Pause and Numlock keys not working correctly with DirectX games. - Profile-level targeting now works again. - Fixed an issue when retrieving a saved value from a profile would not work with variable names that contain tokens (variable variable names o_O). - Exporting, 'Write Text to File' actions would not preserve cr/lf. This has been fixed. - Fixed command-scoped variables not copying correctly in additional situations. I think this should cover it... o_O - Automatic profile switching a little less, 'eager' to switch to default profile. - You can now have full commands that have the same, 'when i say' values as prefixes and suffixes (again). - Fixed command-scoped variables not copying correctly in certain situations. - The, 'include commands from another profile' option not showing latest selection until fully persisting has been fixed. - Made the, 'improper shutdown' check a little bit less aggressive. - Fixed, 'improper shutdown' message when VA is restarted after registering. - When using, 'Stop a process by name' (killing a process) on the VoiceAttack process, an attempt is made to do an elegant shutdown (should not get the 'improper shutdown' message). - {STATE_KEYSTATE} token was not showing keys that were down when VoiceAttack itself was pressing them down (oddly, this is kind of by design). This should produce expected results now. - Fixed a decimal rounding to NOT use banker's rounding but to use rounding for both odd and even numbers. - Desktop ("Program Manager") not being recognized during auto profile switching has been fixed. - Output window titles option from Load Options screen now works again. - Fixed issue where using a capital letter in the profile screen's list filter would cause the filter to not work. v1.6.1 - Bug Fixes - Fixed a bug that is causing multiple instances of TTS to crash in certain cases. - Fixed a display issue for decimals in the command action list. - Fixed {STATE_JOYSTICKXPOVY} not displaying all values correctly. v1.6 - Design changes - Standard and DirectX mode have been removed. There is no longer a need to choose a mode. This was found on the key press, key recorder and quick input screens. You will need to use the key press screen's 'key chooser' feature to select any keys that are not available to you by simply typing them on your keyboard (such as, 'numpad enter' for games and some media keys). - New update to the plugin interface: Version 4. This revision adds some more methods and simplifies most of the existing interfaces. You can now execute commands and get/set variable values, parse tokens, get various environment information (and more) straight from your plugin. The eight or so parameters in the invoke and init functions have been reduced to one parameter of type dynamic (object in vb.net). I decided to go dynamic and not require a referenced interface as I expect this interface to change quite a bit and to keep up with and support that would just not be very fun for anybody. There may be an interface included to reference later, but that will be down the road if absolutely needed. The properties and methods available are documented in the VoiceAttack help file (VoiceAttackHelp.pdf in your installation directory or from the right-click menu at the top-left of the main screen). VoiceAttack is still backward-compatible with plugin interfaces going back to version 1. There is no real need to ever NOT be backward-compatible, so I don't see a need to ever remove it. Since the dynamic type is now used, This will require .Net framework 4.0. This shouldn't be a problem, as VA requires that version and you can get Express versions of Visual Studio that will allow you to build the .dll. Note in the documentation that prior versions of the plugin interface have been updated to include vaProxy (the object used to execute commands, set variables, etc) as part of the state dictionary. - Tokens can now be nested and are treated as nested by default. That means that tokens can now be inputs for other tokens. Tokens are processed from the inner-most token to the outer-most and the entire statement is reprocessed for tokens on each iteration. Since the statements are reprocessed for tokens, this can effectively cause an infinite loop or cause VA to crash (stack overflow) so use with caution when using tokens to create more tokens. Also note that text between two curly brackets { } that do not resolve in a token will be replaced with whatever is between the brackets. So, something like {hello} will be rendered as, 'hello' (no quotes). This all may cause issues with older commands that may not be set up properly, so there is an option on the options screen called, 'use nested tokens' which is turned on by default. Unchecking this will make VA process the tokens as before (v1.5.12 and earlier). Note this is a global setting and you'll want to fix up your old commands in order to continue to be able to use new commands where the tokens may be nested. If curly brackets are preceded with a pipe (|): |{ or |}, they will be rendered as literal brackets. '|{hello|}' will be rendered as, '{hello}' (no quotes). - The Quick Input indicator, '[PAUSE]' (to press the Pause/Break key) has been replaced by, '[BREAK]' in the documentation. '[PAUSE]' will still work on its own, but a new inline function, '[PAUSE:seconds]' has been introduced (see below). - Duplicating a command no longer creates a unique name. The name is now just duplicated to make it a little easier to copy and reuse. For example, 'My Command', when duplicated in earlier versions of VA would create a unique name of, 'My Command 1'. From the version on, the duplicated name will just be, 'My Command'. - Turning off keyboard shortcuts now only turns off command shortcuts. Global hotkeys (listening, command stop, mouse capture) will remain in effect. To turn these off, either turn them off in the options screen, or, to completely turn off VoiceAttack's keyboard hooks, run with the command line parameter of -nokeyboard. Remember, this is only for the keyboard hook and does not turn off key presses (output). - Recorder screen no longer, 'handles' key presses. All key presses will pass through to the target application while the recorder is, 'recording'. - Improvements - Added variable key presses to the key press screen. This will allow you to issue a key press/down/release/toggle via text variable using the same notation found in Quick Input. This is to aid (primarily) in cases where keys for various commands may change periodically (such as with key bindings for games). The idea is that keypress variables would be initialized at profile startup or by plugin activation, thereby not requiring constant, manual updating of commands each time the key bindings change in a game. Hoping to see some interesting implementations come out of this one. - Process targets (send commands to) now include windows that are not the main window handle when seeking out the target. If the window is located, an attempt will be made to make the window the top-most window for the application before input is sent to it. - 'Send commands to' on main screen, profile screen and command screen now show all open windows (versus only the active, top-level windows for each application). When commands are now sent to windows that are not the active, top-level window, an attempt is made to bring that window to the front to accept input. - Added pause indicator to Quick Input. If you add an indicator of [PAUSE:seconds] to Quick Input, typing will be paused for the indicated number of seconds. For example, if you enter, A[PAUSE:0.5]B[PAUSE:2.5]C, 'A' will be typed out, then a pause of one half second, then 'B' will be typed and then a 2.5 second pause and then, 'C'. Pretty straightforward. Note that that the [PAUSE] indicator still exists to allow you to indicate the Pause/Break button, however the documentation suggests using, '[BREAK]' instead. - Quick input / variable keypress indicators added: [SPACE] - space bar... just in case you don't like using an actual space or having a space is hard to see in the interface. [DEAD] - Dead key that's found on German and various French keyboards. This is mainly for variable key presses but will work with Quick Input. Supported layouts are German, French (France), French (Canada), Belgian French and Belgian Dutch. [ALT], [CTRL], [SHIFT] [WIN] - stateless modifiers which are only available for variable key presses (state (down/up) will be determined by the type of key action (press, down, up, toggle). [1]-[254] - if you happen to know the virtual key value (integer), you can put the value between brackets and the key will be processed accordingly (note that there is no speed increase by doing it this way... just yet another way to get things done). - Mouse up/down/left/right movement options have the option to use relative data broken out as a separate option. So, now there is an option, 'move using relative data (useful for 3D games)' which forces movement to be relative to the mouse cursor. If this option is not selected, you can then choose to move the cursor relative to the current cursor location or the location that was last set by VA. - Mouse move left and right are independent of move up and down so you can now set both the x (left/right) or y (up/down) at the same time (for diagonal movement in the same action). - Added options to move mouse left/right/up/down feature to allow moving based on current cursor position and last-set position. The, 'move based on last-set position' option will move the mouse based on the last place that VoiceAttack had set. If it's the first time run, however, the cursor position will be used. - Mouse move left/right/up/down boxes now accept numbers, tokens or integer (long... not short/conditional) variables. If the value cannot be evaluated, it will default to zero. If the value evaluates to a decimal, it is converted to an integer. - Added, 'animate mouse cursor' option to the mouse move screen. This will allow you to have the mouse move from where it originates to its destination with a more, 'natural' effect than just appearing in the destination. The option, 'ease movement' allows for the mouse to gradually reach its destination. Not selecting, 'ease movement' will move the mouse cursor in a constant motion. You can specify the number of steps over a base, 'time'. The time (in seconds) is not exact, as the more steps you add the more the time can expand. Also, if 'ease movement' is selected, the timing will actually be less. This will be handy in cases where sudden movement will cause things like menus to disappear. - Added 'scroll wheel left x clicks' and 'scroll wheel right x clicks' to mouse screen (click/scroll tab). This simulates tilting the scroll wheel to the left or right. - Added scroll wheel left/right/up/down to mouse shortcuts. You can now have a command execute for each click of the scroll wheel as well as tilting the scroll wheel left and right. Note that these are obviously very sensitive, and the left/right event repeats when held down (there is no up/down state for any of these, so use with caution). - Added VA version tokens. Might help with profiles or plugins: {STATE_VA_VERSION} - "1.5.12.15" {STATE_VA_VERSION_MAJOR} - "1" {STATE_VA_VERSION_MINOR} - "5" {STATE_VA_VERSION_BUILD} - "12" {STATE_VA_VERSION_REVISION} - "15" {STATE_VA_VERSION_ISRELEASE} - "1" is true, "0" is false. {STATE_VA_VERSION_COMPARE:textVarialbe} - "1" if VA version is greater or equal to the version number provided in, 'textVariable'. "0" if VA version is earlier. - Added {TXTSUBSTR:source:start:length} token to allow for a substring feature outside of {EXP} ({EXP} wants to do too much work and will automatically eval numbers out of a substring). If length or start position are negative, an empty string will be returned. - {CMDCONFIDENCE} token added to indicate the confidence level of a command. Values range from 0 to 100. Note this value is accessible from within the specified unrecognized catch-all command. - {CMDMINCONFIDENCE} token added to indicate the minimum confidence level set by the user for the executing command. Values range from 0 to 100. Note that if the minimum confidence level is not turned on, this value will be always be zero. - Numpad keys can now be distinguished from home cluster/alpha keys. Whether your app or game can tell the difference is now up to the app or game. This includes keys pressed by VoiceAttack as well as hotkeys that VoiceAttack processes (command shortcuts, global listening, etc). - Added 'Windows Miscellaneous Functions' to Other stuff screen. By popular demand (and some extras thrown in), VA will attempt (given proper version and user rights) to execute the following: Toggle Desktop, Lock Workstation, Log Off Current User, [Force] Sleep (Standby) PC, [Force] Hibernate PC, [Force] Restart PC, [Force] Shutdown PC, [Force] Power Off PC, Minimize All, Undo Minimize All, Open Run Dialog, Open Search Dialog, Open Window Switcher, 'Hide' and 'Show' task bar and Run Screensaver (one line of code... might as well, right?). I've resisted long enough, so here you go (lol). - If VoiceAttack is improperly closed (probably due to a crash), the load options screen will be presented to allow you to disable certain functionality. - Added the option to set the Windows default input and output device on VoiceAttack startup. This feature will also allow you to change the default input and output from the options screen, saving a trip through the system tray. This is experimental and totally for convenience (mostly mine) and may not be included later if it proves to be problematic. This is only currently available for Windows 7 or later. Sorry, Vista users... may implement for you later if there is significant demand for it. - Added command line parameter, '-input' to change your Windows default input device (microphones) from the command line. You will need to indicate your device within double quotes, and your device name must match what is listed in the dropdown list on the Options screen. Often, just updating a driver will cause the device name/description to change, so this parameter can also accept wildcards (see documentation on how wildcards are used if you are not sure what they are about). VoiceAttack will find the first match and use that device, so use with care. Note that this parameter will work against new or existing instances of VoiceAttack. This example shows how to change to a device exactly as indicated: C:\Program Files(x86)\VoiceAttack\VoiceAttack.exe -input "Speakers (4- Sennheiser 3D G4ME1)" This example shows how to select the first device that has a description that contains, 'G4ME1': C:\Program Files(x86)\VoiceAttack\VoiceAttack.exe -input "*G4ME1*" These can be put in a .bat file or used in a desktop shortcut. - Added command line parameter, '-output'. Works just like the -input one above, except it's for output (speakers/headphones). - Added command line parameters, '-inputx' and '-outputx'. These work exactly like '-input' and '-output' above, except that once the devices are changed, VoiceAttack closes immediately (does not show the user interface. Again, this is helpful if you have a desktop shortcut, batch file or launching app and want to quickly change default devices without fully launching VoiceAttack. - Option added to Load Options screen to reset automatic audio device switching on startup. - Options screen now opens on last selected tab. - Jump to marker now supports tokens. - Added, 'Black' and, 'Gray' to Write to Log icon colors. - Registration screen will now show warning if hidden characters are in registration info. - New command line parameter, '-punload' to indicate the timeout for plugins to unload in milliseconds. When plugins are unloaded on exit, VoiceAttack will wait a specified amount of time before giving up and shutting down. If the timeout is exceeded, an entry will be written to VoiceAttackFault.txt in the installation directory. The default timeout is 5000 (5 seconds). Example: C:\Program Files(x86)\VoiceAttack\VoiceAttack.exe -punload 1000 - Updated various tokens to accept literal values (mostly text-related tokens). See documentation for changes. - Added listening, shortcut, mouse, joystick and stop command icons to the VoiceAttack task bar icon plus some jump list settings (right-click on taskbar icon). Might save a step here and there. - Info box regarding not running as an administrator now shows up for registered users. Also, a warning is indicated in the log when VA is launched. Hoping this might help out those that don't know about this. - Bug fixes - Exporting a profile with certain circular references will cause the export to fail. This should be good to go. - Clearing hotkey now clears the, 'do not allow key to be passed through' check box when only modifiers are selected (alt, shift, ctrl, windows). - Closing TTS screen while preview is playing and text is selected no longer crashes. - Updates to key press to help with some compatibility issues. - Pause mass update not updating after an undo fixed. - Pasting at the end of a grouped command list throwing exception has been fixed. - Jump to marker not maintaining marker in list fixed. - First pass at curbing shutdown exceptions. - VA will now log plugin exceptions received when plugins are unloaded when VA closes. Also, plugins that do not exit in a timely manner will be logged in case it is causing VA to crash. The log entries are written to VoiceAttackFault.txt, which is located in the VA install directory. - {STATE_KEYSTATE} token not working when key press set to not pass through fixed. - Move mouse left/right/up/down moving based on previously-set values has been fixed. - Mouse click targeting now a little less heavy-handed. - Attempt to curb Error 740 when installer instructed to launch VA after installation. - {STATE_KEYSTATE:LSHIFT} now working as intended. - Fixed an issue with running out of memory while exporting extremely large profiles. - Log warning is now given if commands are right-click executed while, 'Stop Running Commands When Editing' option is turned on. - Mouse screen, 'ok' button disabled in certain circumstances now fixed. - Token parser will now not bail out when it finds extra curly brackets. - Bolstered up error trapping around some joystick functionality. v1.5.12 - Improvements - Slight profile load time increase. - Bug fixes - Fixed issue where profiles would not load if a duplicate was in a linked profile and one of the commands was set to voice-disabled. v1.5.11 - Bug fixes - Attempting to correct startup crash some are experiencing. - Write to file not writing if, 'overwrite' not selected. - Fixed issue with double-quotes causing the speech engine to crash. - Fixed issue where deleting a profile caused a double reload of the fallback profile. - Fixed issue where creating a new profile was not loading commands. - Start minimized to system tray for some not working possibly working again... maybe. - Fixed an issue with duplicate-named commands causing a crash. - Attempt to correct installer-related issues. v1.5.10 - Bug fixes - Fixed audio error and stop command issue when, 'fade out stopped audio' set. - Removed the 21-day time-constraint that is part of the trial. The trial is still just one profile with 20 commands, but the startup will be slowed incrementally over a certain number of uses. v1.5.9 - Design changes (important) - All mouse down actions will now make the application that is under the mouse the current process target (set as process target, move to foreground and focus). The process target will remain for the duration of the command. This is to simulate what a hardware mouse would do and this should be the expected behavior. The old way would maintain the process target throughout the command, and when a mouse click was used to access another process, the messages were not being sent to that other process (which was expected). If this causes problems for existing macros, my apologies. There is a new option on the Options screen to help with this: Bypass Mouse Targeting. This will keep things the old way and not potentially set a new target. - Before, if a, 'Start Listening' action was discovered *anywhere* within a command, and listening was off, the command would execute as if VoiceAttack was listening. This was for convenience and was left over from the early days when there wasn't much going on. The design has changed slightly. This behavior is still available, however, it is only available if the FIRST action in the command is a, 'Start Listening' action. Again, this is for convenience and is still a weird design decision but it's meant to be helpful and reduces some user interface clutter. - 'Cancel blocked commands' option added in v1.5.8.23 will now be true by default. The behavior up until now has been that the blocked commands would queue up and then execute once the blocking command completed. To keep that behavior, just un-select this option. - Improvements - Added new command trigger by mouse button click. You can set up any combination of the five standard mouse buttons, including mouse up (release). On the command screen, you'll now find, 'When I press mouse'. Combined with the new state tokens, this should give a fair amount of flexibility. To turn the mouse shortcuts on and off, there is an icon on the main screen, plus an icon in the notification icon in the system tray. Profile screen command list and export command list updated with new mouse column. The column will only be displayed if there are commands that have mouse triggers. There is also a filter button to hide disabled mouse commands on the profile screen. - Added new actions for mouse: Stop Mouse Shortcuts and Start Mouse Shortcuts (just like the actions for hotkeys and joysticks). - Added, '-mouseoff' and '-mouseon' command line parameters to support enable/disable mouse shortcuts. Note: These do not affect the mouse listening feature (just the command shortcuts). - Support added for four screen sizes : Normal, large, larger, largest. The setting for this is on the options screen. This is a stopgap before building a WPF version of VoiceAttack. I also wanted to be able to provide a way for the user to increase their screen size without forcing them to have to change their font size. - Added, 'Reset Screens' button to options screen that allows the reset of all screen sizes/locations to default values (in case you change resolutions and screens are too big). - Added option, 'Disable Acoustic Echo Cancellation' to attempt to aid in recognition. This is due mostly to Razer devices not working properly with the speech engine in some regards. - Moved delete, export, import and create to new, 'More' button on the main screen. The profile lists are becoming a lot longer than I had anticipated, so I've consolidated everything under one button to clean things up a bit. - Added new key press action, 'Toggle Key(s)'. If the keys are down, release them. If they are up, press them down. Note this toggles the state of all keys involved. So, if the keypress is a combo of CTRL + X and CTRL is down and X is up, toggling will release CTRL and press X. - Warning box now pops up if derived commands from a single command exceed a count of 100. - Attempt at decreasing the overall load time of profiles. Larger profiles and profiles with lots of derived commands will benefit from this the most. - Added 'Else If' action for condition blocks. Reduces the need for multiple begin/end blocks. You can finally do if/else if/else. - Added Loop start/Loop End actions. While a condition is met, you can loop a section of your command. Loops can be nested. - Added explicit 'Exit Command' action (no longer need to add a jump and set a flag unless you want to). Added this to make it a little bit more obvious. Note this also does not stop any executed subcommands (it just exits). - Added new data type: Date/Time. With the new data type comes a new Set Date/Time feature, plus an extra tab on the, Condition (If and Else If statements) and Loop start screens. There are also some new tokens that work exactly like the existing date and time tokens (except the new tokens accept a variable name). Plugin interface has been updated to include the date/time values (this is now version 3... still backward compatible). - Added dynamic responses to text-to-speech. Just as with using dynamic commands, you can now use square brackets to have more dynamic responses with text-to-speech. Before, if you wanted a random response with slight variation, you would have to explicitly indicate each variation: [fire;launch;dispatch] the [missiles;weapons;porcupine] will result in a random response of: fire the missiles fire the weapons fire the porcupine launch the missiles launch the weapons launch the porcupine dispatch the missiles dispatch the weapons dispatch the porcupine - Added the ability to inhibit the execution of multiple commands with hotkey shortcuts. This is only available if all involved commands have the, 'Shortcut is invoked only when all keys are released' option set in the, 'When I press...' Command Shortcut screen. For instance, let's say you have three commands: One that executes when F1 is released, and another that executes when CTRL + F1 is released. Before, if you pressed CTRL + F1 down and then happened to release F1 first, the command associated with F1 would execute, followed by the command associated with CTRL + F1. In this release, only the command associated with CTRL + F1 will be executed. F1 will still execute when pressed on its own. Apologies to anybody that's gotten used to this behavior, but this is the way it should have been since the beginning o_O. - Added, 'Shortcut only executes when all buttons are released' option to the joystick button trigger for commands. You can now have commands that execute on button down as well as button up... finally ;) Note that this option will eliminate superseded button-up commands (just like it does now for keyboard hotkeys). For instance, if you have button up triggers for button 'A' and 'A + B', only 'A + B' will be invoked. - Added option 'Shortcut is invoked when no other buttons are down' to joystick button trigger for commands. This provides an exclusive mode for your button/combo, so that if you have a trigger for button, 'A' and any other button is down when 'A' is pressed (or released), the command will not be invoked. - Added an advanced section to the, 'Run an application' action. In addition to the, 'wait for exit' feature that captures stdout and exit codes, there is now a 'wait for start' feature that waits until the launched application has started (that is, ready enough to be accepting windows messages). With the, 'wait for start' feature, there is also the option to set the newly launched application as the process target (Set command to target launched application). The, 'wait for start' and 'wait for exit' features can now have a specified wait time before giving up. If the launched app fails to launch properly or exit in the time specified, you can now use the, 'Exit command immediately if launch has failed or wait time exceeded' option to jump out of a command. This should help out a lot of folks having trouble with process targets. - Added, 'Exit command immediately if window/process not available' to the 'Perform a window function' action to allow you to jump out of a command if the target is not available (or the wait time is exceeded). - Set text feature, 'replace text' now accepts tokens in the 'replace' and 'replace with' fields. 'Replace' will now accept spaces and 'Replace with' will now accept a blank (empty) value. - Increased, 'add a comment' action from 64 characters (yikes!) to 512. Not really an improvement... not really a bug, either ;) - Added, 'Set command to target this window' option to the, 'Display' feature of the, 'Perform a Windows Function' action. This will allow you to change the VoiceAttack process target to the indicated window or process. This was automatic when used with, 'Active Window', but now it is not. This was a bad design choice, so it needed to be changed. Sorry to those that are using it... you'll need to update your actions and check this option. The good news is that now it changes the process target for both, 'active window' and specified process targets for the duration of the command. - 'Add pause' action on command screen is now set by flyout menu. You can choose either, 'Add pause' or, 'Add variable pause'. - Added ability to set a pause duration to a decimal variable. If the variable value is Not Set, the pause will be zero seconds. Note that decimal variables can be set to random values ;) - The 'wait for exit' option for launching applications now allows you to capture the stdout and exit codes of apps that provide them. Simply add a text variable name for stdout and/or an integer variable name for the exit code and those variables will be filled. Access the values via token or test using conditional (if) statements. - Added new action, 'Write Text to File'. This will allow you to specify text to write to a file that you choose. This action accepts tokens in both the text and file boxes. As always, use with caution ;) - Mouse move position can now be set by text or token. If the value in place is evaluated as a valid integer, the position will be used. Otherwise, no movement will occur (info given in log). If the evaluated coordinate is outside of the boundaries of the area, the boundary will still be used. - Mouse action screen organized a little bit. Move actions are now on one tab, click actions are on another. Navigating to mouse actions from the command screen is now from a flyout menu with move and click items. - Mouse move position can now be set as relative from any corner. Top-left is still default. - Added 'Move to specific location' mouse action. This will allow you to move the mouse cursor quickly to various parts of different screens. - New set of tokens for state of keyboard, mouse and joystick. What I see this being used for mostly is to alter behavior for commands based on the state of your devices. For instance, if the right mouse button is down when I say, 'fire weapons', missiles are fired instead of photons (lol). Also, if the 'x' button is down, fire both photons and missiles. There is one keyboard token: {STATE_KEYSTATE:key} 'key' parameter can be any key you can type in a token: 'A', 'B', 'C', '�', '�', '�', '�', as well as keys you can't type in a token: ENTER, TAB, LCTRL, ARROWR (see documentation for full list). So, if you want to test to see if F10 is down, just use the following token: {STATE_KEYSTATE:F10}. To test for the letter 'A', just use this token: {STATE_KEYSTATE:A} If a keyboard key is down, the replaced value of the token will be "1". If the key is not down, the value will be "0". There are five mouse tokens: {STATE_LEFTMOUSEBUTTON} {STATE_RIGHTMOUSEBUTTON} {STATE_MIDDLEMOUSEBUTTON} {STATE_FORWARDMOUSEBUTTON} {STATE_BACKMOUSEBUTTON} These should be pretty straight forward. If you want to test for the right mouse button, use token {STATE_RIGHTMOUSEBUTTON}. If the mouse button is pressed down, the replaced value will be "1". If the mouse button is not pressed, the value will be "0". Lastly, we have two joystick tokens: {STATE_JOYSTICK1BUTTON:buttonNumber} {STATE_JOYSTICK2BUTTON:buttonNumber} The, 'buttonNumber' parameter is the number of the button on the desired stick. To test if button 10 is down on joystick 2, just use this token: {STATE_JOYSTICK2BUTTON:10} Once again, if the button is down on the tested stick, the replaced value will be "1". If the button is not down, the value will be "0". - Added token {STATE_AUDIOLEVEL} token to indicate the currently reported audio level from the speech engine. The replaced value will be from "0" to "100". - Added token {STATE_LISTENING} to test if VoiceAttack is, 'listening'. If, 'listening' is on, the replaced value will be "1". If, 'listening' is off, the replaced value will be "0". - Added token {STATE_SHORTCUTS} to test if VoiceAttack's shortcuts are enabled. If shortcuts are enabled, the replaced value will be "1". Otherwise, the replaced value will be "0". - Added token {STATE_JOYSTICKBUTTONS} to test if VoiceAttack's joystick buttons are enabled. If joystick buttons are enabled, the replaced value will be "1". Otherwise, the replaced value will be "0". - Added missing POV/hat tokens (see docs for more complete details): {STATE_JOYSTICK[1|2]POVENABLED}. Indicates whether or not POV is enabled for the indicated stick. {STATE_JOYSTICK[1|2]POV[1|2|3|4]TYPE}. Indicates the type of POV switching mode set in joystick options. {STATE_JOYSTICK[1|2]POV[1|2|3|4]}. Displays the direction the indicated stick/POV controller is being pressed (depends on switching mode). {STATE_JOYSTICK[1|2]POV[1|2|3|4]_NUMERIC} - Use this token to get the numeric value of the POV (for finer level of control if the switching mode does not suit the need). - Added a whole BUNCH of new joystick state tokens to give all kinds of info about your joystick's state. You can use these for your stuff like command modifiers or as triggers if used with some fancy looping. There are like 28 different types, so, I won't list them here (they're in the docs in the tokens section). Finally a way to handle some of the, 'analog' controls on joysticks ;) - Added {STATE_CPU} and {STATE_CPU:coreNumber} tokens to return cpu usage. Per request, as I understand, this is to check if your, 'ship' is running hot ;) {STATE_CPU} will return the average for all cores. The value will be "0" to "100". {STATE_CPU:coreNumber} will allow you to specify a certain core (probably never be used, but the code to do add this is mostly what is used in the average). Just indicate the core number to check: {STATE_CPU:5} will get the cpu usage for core 5. - Added, '{STATE_RAMTOTAL}' and '{STATE_RAMAVAILABLE}' to return the total and available ram on your system in bytes. - '{CMDACTION}' token has a new return type of, 'Mouse'. - Added, '{CATEGORY}' token to allow accessing category of command. For composite commands, '{PREFIX_CATEGORY}' will get the category of the prefix, and '{SUFFIX_CATEGORY}' will get the category of the suffix. If, '{CATEGORY}' is used on a composite command, the result will be the prefix category plus the suffix category, separated by a space. - Added, '{ISCOMPOSITE}' token to allow checking if the called command is a composite command (a command that uses prefixes and suffixes). The result will be "1" if the called command is composite and "0" if it is not. - Added, '{COMPOSITEGROUP}' token to allow accessing of the composite group that the composite command belongs to. - Added '{ISLISTENINGOVERRIDE}' token to allow checking if command was called using the listening override keyword. This value will be "1" if called command was prefixed with a listening override keyword and "0" if not. - Added '{TXTPOS:txtVarOf:txtVarIn:intVarStart}' token to check the position of text (txtVarOf) within more text (txtVarIn) starting at a given point (intVarStart). It does use three variables that must be set prior to using. Notes: The text search is case-sensitive. If the text is found, the result will be the zero-based index of the start of the text, otherwise the result will be "-1". If txtVarIn or txtVarOf are not set, the result will be "-1". If intVarStart is not set, 0 is assumed (for convenience). - Added token, '{WINDOWTITLEUNDERMOUSE}' which returns the title of the window that is currently under the mouse. Another item that I was using this for testing and then just left for anyone to use. - Added token, '{WINDOWPROCESSUNDERMOUSE}' which returns the process name of the window that is currently under the mouse. Used this for testing, too (lol). - Added, '{LASTSPOKENCMD}' token to provide the last-spoken and executed command phrase. Useful from within subcommands where you need to know what was said to invoke the root command, or if you need to know what was spoken prior to the current command. - {TXTREPLACE} is now deprecated. {TXTREPLACEVAR:textVarSoure:textVarSearch:textVarReplace} is what should be used going forward for reliability. This token takes three text variables (where {TXTREPLACE} uses a text variable and two literals). If you have something simple, keep using {TXTREPLACE}. - Added token, '{STATE_FILEEXISTS:variableName}' to indicate if a file exists. The replaced value will be '1' if the file exists or '0' if it does not. Note that this takes a text variable. The variable should contain a fully-qualified path. Note that the variable can also take tokens. - Added token, '{STATE_DIRECTORYEXISTS:variableName}' to indicate if a directory exists. The replaced value will be '1' if the directory exists or '0' if it does not. Note that this takes a text variable. The variable should contain a fully-qualified path. Note that the variable can also take tokens. - Added new global hotkey option for listening: 'Listen then stop listening after recognition completes.' This turns on listening only until the speech engine recognizes speech. The command itself can be recognized or unrecognized. This is available for hotkeys, mouse and joystick button. - Listening and stop command icons on main screen now include hotkey info in tool tips. The info provided also indicates if the hotkeys are overridden at the profile level. - Added, 'Select All' and 'Select None' in command action list. 'Select all' has always been there (CTRL + A)... just needed some user interface to indicate that it's there ;) - Show latest entry only added to log as an option. - Windows environment variables (such as %WINDIR%, %APPDIR%, %PROGRAMFILES%, etc.) will be parsed out any place that takes tokens. Note that the environment variables need to be surrounded by percent signs (%). You already knew that, though ;) - Tooltip for the command count on the profile screen now shows derived command count (count of commands as a result of composite and dynamic commands as well as overrides). - Number of displayed entries in log is now user-selectable. Minimum of 20, maximum of 10000. This setting can be accessed by right-clicking on the log. - Grouping (by category) now hides the category column. - Listening, keyboard shortcuts, mouse shortcuts and joystick state are now remembered on load. So, if your listening is off when VoiceAttack is closed, listening will be off when VoiceAttack starts up the next time. Command line parameters take precedence over these. - Updated profile export to properly include referenced commands (commands used in execute and kill actions). The onus used to be on the user to include referenced commands. This is now automatic. There is now an option on the export screen to exclude referenced commands (for times when you do not want the referenced commands included. For instance, if you are exporting to HTML). - Added, 'Application Focus (Process Target) Guide' to the help documentation to give a little bit of assistance in dealing with process targets. - Holding down the left control key while clicking on the edit profile button on the main screen will now take you straight to the last command that was edited in that profile. Also, an attempt is made to highlight the last edited action in a command (hitting enter will edit the action). These are just for convenience... I used them while testing and thought it would be good to leave them exposed for everybody. - Stopped audio now fades out quickly instead of stopping abruptly. Makes things a little nicer, I think. This can be overridden in options in the audio tab. Note that this is not applicable when, 'legacy audio' is in effect. - Highlighting a portion of text in, 'Say something with text do speech' dialog now only previews the selected text instead of previewing all the text. To preview all text, either select no text or all of the text. - Added checking for some third-party apps that may interfere with VoiceAttack (TeamViewer, Synergy and Sonic Studio to start). The warnings will be indicated in the log. Also added check for Cereproc voices. A one-time warning box will pop up to let you know that the 'Single TTS Instance' option will be set for you (check the appropriate box at the bottom to prevent this for whatever reason). - Added some size checking for resizable windows that are too big if the overall screen resolution changes. - Added warning box for screens with overall height of less than 800 pixels. - Added, 'Always on top' to allow VA to be the top-most app. This is accessible through the context menu in the top-left corner of the main screen. Also, there are two new command line parameters: -alwaysontopon and -alwaysontopoff. - Added command line parameter -nospeech. This disables VoiceAttack speech recognition initialization. This is experimental and functionally incomplete (mostly from a user interface standpoint) and is used primarily for testing (that is, it is not currently supported). However, this may be a last resort for those that just can not get their speech engine to work and need to get into the software for whatever reason. - Touched up main screen icons a little bit. The person's head with a pencil sticking out of it has always been a sore spot o_O. - Each resizable screen now allow resizing from each corner and side. Resize tearing has also been reduced. - 'UNABLE TO INVOKE PLUGIN. PLUGIN NOT VALID FOR THIS VERSION OF VOICEATTACK' message is no longer displayed if plugin is unable to load due to an exception in the plugin or if the plugin can not load on successive executions. You should get a better message now that includes the exception text. - Added, 'Cancel blocked commands' option to allow the user to pick what to do with commands that are blocked by synchronous commands. In the past, the blocked commands would simply just execute after the blocking command finished. Now, you can choose to completely block those commands from ever executing. Note that this option is now on by default and is the default behavior. To revert back to the old behavior, just un-select this option. - Added command line parameter, '-verifyaudio'. This will run through all the command actions that play a sound (including random) and check for the associated file's existence. This was for development work, but now it's exposed for the user. This only runs at startup and only affects the initial running instance. - Added, '-ignorechildwindows' command line parameter to have VoiceAttack suppress its check for child (popup) windows. Some software (like Sibelius) keep a toolbox window open at all times. This will help to not bubble-up focus to that window. If need warrants, this will be made a profile-level option. For now, it's exposed in case anybody needs it. - Added, '-showloadtime' command line parameter to give an indication of the amount of time it takes to load your profile. Both the total time and the speech engine time are included. - Added, 'Stop Running Commands When Editing' option to indicate that any running commands be stopped when a profile is edited. Deselecting this option allows running commands to continue while editing occurs (use with caution). - Added a way to indicate the default profile when using automatic profile switching. The default profile is the profile that is selected when there are no other selections to be made. To indicate the default profile, simply use a single asterisk (*) as a selection in the 'Enable profile switching for the following windows' box on the profile options screen. - Slightly lessened profile thrashing when using automatic profile switching. If the process is not different, the profile should not switch (/facepalm). - New installer. Hoping this one is a little more reliable. - Mouse screen scroll values now persist for subsequent use. - Mouse screen click delay now persists for subsequent use. - TTS rate now persists for subsequent use. - Bug Fixes - Recorder screen now resizable. - Fixed issue where duplicating set decimal action was not capturing both random values. - Fixed issue where jump marker/jump located both in a suffix was not jumping to proper location. - Fixed issue with execute command by name not finding dynamic commands. - Fixed 'stop command if target window focus is lost' not unchecking if, 'repeats continuously' was selected. - More DirectX mapping issues resolved. - Updated order of event handling on startup to see if it helps with some of the exceptions that are cropping up related to the speech engine. - Fixed suffix issues when using condition actions. - Fixed issue where grouped commands was throwing an exception on key press when focused and collapsed. - Fixed issue with dynamic commands containing tokens breaking under certain conditions. - Fixed issue where exec command dialog would not save if referenced command was deleted before saving profile. - Fixed issue where if listening was suspended, 'reject pending speech' was selected, and a command was issued when the listening was off and then enabled mid-command, the command would still execute. - Fixed POV options not saving properly on joystick options page. - Added some helper functionality to work with directional keys in DirectX mode. Before, if you had numlock on and issued a command to press a directional key, the numpad numeric value for the same key would be pressed. The helper code looks for certain elements and helps produce a directional key press. - Column positions on profile screen now persisted again. - Saving a profile that does not involve a change to a spoken command phrase no longer causes the speech engine to be reset. Not really a bug... not really an improvement either ;) - Editing a command from the log that has been deleted no longer results in an edit screen with a GUID for the command name. - Perform a Window function display will now set the window as the active, foreground window when applicable. - {TXTRANDOM} token no longer removes empty entries. - Fixed issue with listening override against a composite command not offsetting suffix properly, respecting confidence or respecting process overrides. Basically, this is the code that time forgot o_O. - Fixed issue {PREFIX} and {SUFFIX} tokens not providing values if command was overridden with, 'Override listening if my spoken command begins with' prefix. - Fixed, '{CMD_AFTER}' token getting too much text. - Joystick button trigger reset to, 'Not Set' from command screen fixed. - Fixed issue where process target was not picking up all processes. - Fixed issue with command line parameters -profile and -command not allowing proper termination of the software. - First pass at quieting the DateTime exception some get on the trial startup if date format is changed. - Fixed sound file browse issue where having illegal characters in a token would cause a crash. - Executing a command with no defined triggers (completely disabled, via drop down selection or by name) as a subcommand should work now. - Fixed issue where random sounds from directory would not change directories when tokens are used and executed repeatedly with changing directory. - 'Hold down' time not displaying properly when key press type changes has been fixed. - Profile edit screen, 'cancel' and, 'done' buttons no longer lock up if a synchronous command is running. - Better handling of setting the text in the clipboard. - Commands not executing via external or mouse when listening not enabled has been fixed. - Most windows will no longer be topmost above other applications. - Fixed delete random sound from list selecting first item in the list plus the next item on the list. - Fixed mouse scroll selection enables click duration box. Also fixed persisted values getting reset. - Additional handling during app closing. - Fixed some painting artifacts on resizable forms with grids. - Fixed issue with spaces not being preserved in text replace. - Mouse click delay not enabled on add now fixed. - Launching and capturing STDOUT on a console app using the, 'hidden' attribute now hides the console app window. - Shortcut output on dynamic commands no longer shows a bracket. - DirectX mode and arrow keys should work when numlock is on or off now. - New Known Issue - Start/stop sounds do not play when pause is active. Not even sure when this started, but it looks like it's been around for a while. v1.5.8 - Improvements - Added some dynamic ability to commands. What this does is allow for quick, dynamic commands that can contain potentially optional parts. To indicate a dynamic portion of your spoken command, simply enclose the section in square brackets : [ ]. Each dynamic element within the brackets must be separated with a semicolon. Here is an example : [Greetings;Hello]computer To execute the command, you can now say : Greetings computer Hello computer Note that multipart commands are also still separated with a semicolon (as demonstrated by adding, 'Hi' to the end) : [Greetings;Hello]computer;Hi With this example, to execute the command, you can say : Greetings computer Hello computer Hi The dynamic sections don't have to just be at the beginning. They can be anywhere in the command. Also, as a side-effect, if you put a semicolon on at the end of the selections, it makes the section optional : [Greetings;Hello]computer[how are you;] You can say the following to execute the command : Greetings computer how are you Hello computer how are you Greetings computer Hello computer Note that there is a semicolon after 'how are you' to indicate that the entire section is optional. Something to consider when using this feature is that you can create a lot of permutations from very few words. Use with care :) Dynamic sections also have the ability to indicate a numeric range. This is indicated by putting in two numbers separated by an ellipsis (..). eject car [1..100] will allow you to say, 'eject car 1', 'eject car 2', 'eject car 3', etc. Using this in conjunction with the new {TXTNUM:variableName} token (see below), you can come up with some interesting solutions. - First attempt at using wildcards around full commands. That is, allowing command phrases that will execute if they are contained in the spoken phrase (or are at the beginning or end of a spoken phrase). I know I've been reluctant to include this over the years, but I think I've found a way to make it not very intrusive. Just put asterisks on both ends of your spoken phrase : '*power to shields*' to indicate, 'contains'. Put an asterisk at the end to indicate, 'starts with' : 'power to shields*'. Put an asterisk at the beginning to indicate, 'ends with' : '*power to shields'. So, if you accidentally say something like, 'Power to shields, please', your command will be found and executed. Use with care... lol. I haven't worked out all the details yet on how this will impact other screens, but I thought I needed to get the simple stuff out there to see if it's even going to fly. Note that this is for full commands only, and not for prefixes/suffixes just yet. Command wildcards that denote, 'contains' (asterisks on both ends of the command) will allow for multiple expressions to be contained in one spoken phrase. So, if you have a command named, '*rocket*' and one named '*ship*' you can say, 'rocket ship' and both commands will be executed (pretty much simultaneously... you can always uncheck, 'this command allows others to run at the same time' to process in line. There is an attempt to process the commands in the order that they are spoken as well. The order of processing is, 'ends with', then 'starts with' then, 'contains'. - I put back the ability to quickly add text to be typed out serially. The new action is called, 'Quick Input'. This was taken out a long time back (it was called, 'Quick Input') in favor of the recorder feature, since more and more folks with non-English keyboards were using VoiceAttack. 'Quick Input' should allow for the currently- supported list of locales to use the feature. The reason I put it back is because a lot of folks find the recorder cumbersome for simple stuff. Also, there are some games that do not allow the use of the clipboard paste (which is what I would recommend for fast text display). The feature simply allows you to type in text in the box and have it typed back. For the supported locales, it also should be able to do the right-alt/deadkey stuff. You will be able to specify the timing of the key presses (as always, DirectX games have a polling mechanism and are not event-driven when it comes to keyboard activity). You will be able to specify either DirectX or Standard input. Note that the text box also accepts tokens that will be replaced out at runtime. Non-character key indicators for Quick Input are below. So, let's say you want to add a tab to your Quick Input action. Just enclose the key name (TAB) in square brackets and the key will be pressed : [TAB] Your text would look something like this : Hello, there.[TAB]How are you?[ENTER] Note: The key indicators are not case-sensitive. The full list is below (in no particular order): ENTER - presses the enter key TAB - press the tab key ESC - press the escape key ESCAPE - works the same as esc BACK - press the backspace button BACKSPACE - works the same as back SHIFTDOWN - holds the left shift key down SHIFTUP - releases the left shift key RSHIFTDOWN - right shift if you need it RSHIFTUP LSHIFTDOWN - works the same as shiftdown LSHIFTUP - works the same as shiftup ALTDOWN - holds down the left alt key ALTUP - releases the leftalt key RALTDOWN - holds down the right alt key RALTUP - releases the right alt key LALTDOWN - works the same as altdown LALTUP - works the same as alt up CTRLDOWN - holds down the left ctrl key CTRLUP - releases the left ctrl key RCTRLDOWN - holds down right ctrl key RCTRLUP - releases right ctrl key LCTRLDOWN - works the same as ctrldown LCTRLUP - works the same as ctrlup WINDOWN - holds down the left win key WINUP - releases the left win key RWINDOWN - holds down the right win key RWINUP - releases the right win key LWINDOWN - works the same as windown LWINUP - works the same as winup NUM0 - numeric pad 0-9 NUM1 NUM2 NUM3 NUM4 NUM5 NUM6 NUM7 NUM8 NUM9 NUM* - numeric pad * NUM+ - numeric pad + NUM- - numeric pad - NUM. - numeric pad . NUM/ - numeric pad / NUMENTER - numeric pad enter F1 - press F keys... F1-F24 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 F16 F17 F18 F19 F20 F21 F22 F23 F24 HOME - press home key END - press end key DEL - press delete key DELETE - works the same as del INS - press insert key INSERT - works the same as ins PAGEUP - press page up PAGEDOWN - press page down ARROWR - arrow right ARROWL - arrow left ARROWU - arrow up ARROWD - arrow down CAPSLOCK - toggle capslock NUMLOCK - toggle numlock SCRLOCK - toggle scroll lock SCROLLLOCK - works the same as scrlock PRINTSCREEN - press printscreen button PAUSE - press the pause/break button - Removed 'Stop repeating if window focus lost' checkbox and replaced it with, 'Stop command if target window focus is lost' checkbox which is available whether you are looping or not. What this does is stop the command if you lose focus of the window that had the focus when the command was executed. The underlying value that is used is carried over to the new checkbox making it backward-compatible with what was in place before. This feature now also has an option, 'Resume command if focus regained'. This attempts to resume the command if you click back into the originally focused window ;) - Added 'Play a Random Sound' action. Finally... a user interface to handle random sound files (you can still do random stuff with conditions if you want to). This interface will let you choose the same options for each individual sound just as you can for single sounds. Also, there is the option for, 'suppress repeat', which will allow for a random list to seem a little more, 'random' by only playing each sound once. Note that it's, 'suppress repeat', as it does not completely eliminate the possibility of a repeat (a repeat can happen once the cycle is reset, of course). 'Play random sounds' also has the option to play from a specified directory. Just point to the directory that you want to play out of and VoiceAttack creates a random pool out of all supported sound files in that directory. This is useful if you have a set of responses that you constantly update. Just put the sound files in the directory and there is no need to add it to the random list. Note that you can also put shortcuts (.lnk) to your sound files in these directories and they will be used to locate the target file. Useful if you want to duplicate sounds for different reasons and not want to copy the the whole thing. Note that the, 'Play random sounds' interface supports multiple file edit - change the attributes of one or more files at once (volume, wait, complete). You can also add more than one file at a time as well. - First attempt at dictation. Three new actions are now included: Start and stop dictation and clear dictation buffer. All of these are considered, 'advanced' since there is no other supporting user interface, and anything in the dictation buffer must be accessed via token. The start and stop dictation actions have the option to clear what is in the dictation buffer. The clear dictation action has the option to just remove the last thing that was said. As mentioned, there is a dictation buffer that gets filled with each phrase you speak. There is the usual pause that indicates the end of your statement, and whatever was said will be added to the buffer. Nothing special here... you'll have to add your own punctuation as you normally do with the Windows speech engine. Multiple entries in the buffer are just appended to one another when you access the values from the {DICTATION} token. Recognized commands will be omitted from the dictation buffer if you speak them on their own (that is what I am testing now... the ability to be able to keep dictation going and still say, 'power to shields' and then resume dictation). Since they are blocks, you can incorporate them in your own commands with whatever spoken value you want ('open quote', 'quote', 'begin dictation'... or all of those... lol). You can incorporate your own stop and start sounds and initialize whatever variables you want to or even call a plugin. New users to VA will probably hate this approach, but I apologize. The ugly side of this is now you will experience the joy of what is the dictation ability of the Windows speech engine. It is not Dragon. Not even close. You will say things clearly and it will miss a lot. Try to speak like a robot and it seems to work a little better... o_O You've been warned :) My hope is that as the Windows speech engine improves, this will be more useful. There is a new option in the Profile Options screen called, 'Execute a command each time a dictation phrase is recognized'. Enabling this will invoke the specified command every time a dictation phrase is spoken. This could be used for plugins, playing a sound or for whatever you want (mostly for plugins). - New replacement tokens: {DICTATION} and {DICTATION:PERIOD:CAPITAL:LATEST:UPPERCASE:LOWERCASE:NEWLINE:SPACEX} The {DICTATION} token is quite simple. It is replaced with a simple dump of whatever is in the dictation buffer. So, if you said, 'This is a test of the emergency broadcast system' and then later said 'this is only a test', the result would be 'This is a test of the emergency broadcast system this is only a test'. The other token is an attempt to offer some touchup to whatever is in the buffer. The speech recognition engine may do all kinds of heinous things to your text (as you will see ;)) You can use any or all of the options listed, separated by a colon. So, if you simply wanted to add a period to the end of each spoken dictation phrase and ensure that the first character is always capitalized, you would use {DICTATION:PERIOD:CAPITAL}. The above example would be rendered as : 'This is a test of the emergency broadcast system. This is only a test.'. If you wanted to also make it so that a line feed is placed between lines, you can use {DICTATION:PERIOD:CAPITAL:NEWLINE}. You will then get 'This is a test of the emergency broadcast system. This is only a test.'. The options are: PERIOD - As said, puts a period in for you at the end of each line. CAPITAL - Capitalizes the first character of every line. LATEST - Only display the last thing you said. In the example, you would get 'this is only a test'. UPPERCASE - Converts all characters to upper case : 'THIS IS A TEST OF THE EMERGENCY BROADCAST SYSTEM THIS IS ONLY A TEST' LOWERCASE - Converts all characters to lower case : 'this is a test of the emergency broadcast system this is only a test' NEWLINE - Makes sure each phrase is on its own line (note that it wont show up this way if you write to the log... the log doesn't care about new lines). SPACEX - Replace the, 'X' with any number, and that many extra spaces will be placed at the end of each phrase. The default is one space. So, if you use {DICTATION:SPACE4}, the rendered output will be 'this is a test of the emergency broadcast system this is only a test'. You can put the options in any order. - Added some basic automatic profile switching. You can turn this option on and off, 'globally' in the main options screen ('Enable Automatic Profile Switching') and enable per profile in the Profile Options screen ('Enable profile switching for the following windows'). To keep things as simple as possible, there is a text box on the Profile Options page that allows you to input the name of the window of the application that you want to look for. The input for this box is semicolon-delimited so you can associate your profile with more than one application. Since window titles vary depending on what you are doing, you can also add asterisks (*) as kind of a basic wildcard. If you put the asterisk at the end of the title, the search becomes, 'starts with'. If you put the asterisk at the beginning, the search becomes, 'ends with'. If you put an asterisk on each end, the search becomes, 'contains'. No asterisks means a direct comparison (of course). So, lets say you want your profile to automatically change when you switch over to either your desktop or Notepad. The desktop window name (oddly enough) is Program Manager (I know that's weird... there's some help about this down below). Notepad's window title will change depending on the document you are editing. Your input would look like this: 'Program Manager;*Notepad*' (without the quotes). That means it will look for a window titled, 'Program Manager' as well as any window that has a title that contains, 'Notepad' (although, I think searching for Notepad may only require '*Notepad' (end with)). Hope this makes sense :) To help with finding out window titles, a new option has been added to the VoiceAttack Load Options screen. To get to this screen, simply start VoiceAttack while holding down CTRL + Shift. Select the option titled, 'Show window titles (requires 'Enable Automatic Profile Switching' to be checked in the Options screen).' This will show the window titles in the log so you can see what VoiceAttack sees. This will only run for the current session of VoiceAttack. I wrote like 75% of this back in the summer, and I just left it there since I really couldn't see it as a higher priority than other things on the schedule. Then my kid was asking about it. I think I understand now... lol. Overall, it was hare-brain easy to implement, so, here ya go :) - Added sound and tts volume offset sliders to the options screen. Think of these as master volume controls for all your sounds/tts. - Added window targets at the command and profile level, still defaulting to the global level that is on the main screen. To use this, simply either drop down the list to select a target by name, or place an asterisk (*) at the beginning to denote, 'ends with', at the end to denote, 'starts with' or on both ends to denote, 'contains'. This is for windows that have names that change. This works with the linked profiles as well, so you can have a profile called, 'Winamp' that interacts only with Winamp by setting the process target to '*winamp*'. VoiceAttack will find the Winamp app and set it as the target, while your other commands (key press and mouse actions) continue to be sent to wherever you like. Prefixes and suffixes can have window targets as well, however, if both a prefix and a suffix have a target set, the prefix target will be used (may be wrong about the choice... we'll see how this irons out... might need to be the suffix... not thinking clearly... lol). The dropdown list can contain window names (or parts of window names... with asterisks) or the entire process name (asterisks not incorporated yet). The list will show current window names plus any currently-used targets from other commands to make input easier. You also have the option to turn the target on or off by checking or unchecking the 'enable process target' box. If you are targeting a particular process at a higher level, there's also the option to override and use the active window. Hope this makes sense... A lot of you have been asking for this for a while ;) - Updated 'Send commands to' functionality on the main screen to be more in line with the process targets at the profile and command levels. Before, all you had as options were, 'Active Window' or some other window title. You can now use asterisks around the window titles. The list also maintains the last ten most- recently-used items. You will note that the process list is not refreshed on every drop down now. There is an item in the list called, 'Refresh this list' which will update the list with the latest open window titles and most recently used items. There is no user interface to set the mru max number. You can set this value by going into the user.config settings, though. - Added new action, 'Set text value to Windows clipboard'. This is a very basic implementation, and only doing text values for now. The value can, however, contain tokens. To clear the clipboard, just leave the box blank (no spaces... not trimming in case literal spaces are wanted). Note that there is no, 'paste from clipboard'. There are API calls to paste clipboard data which require finding active controls and such to do the work, however, it's just as easy to do a CTRL + V key press (works in just about every case). - Added new token, '{CLIP}' which will be replaced with whatever is in the clipboard (as long as the value in the clipboard is text, otherwise, the token will be replaced with a blank). - Added token, '{TXTCONCAT:var1:var2}'. This will concatenate the text in variable 2 to the text in variable 1. - 'Reset defaults' from the options screen now has the option to delete registration info. - Updated plugin support for the new data types. This updates the interface for plugins going forward, however, VoiceAttack's plugin execution remains backward-compatible, so any plugins you are currently using should still continue to function. - Added new token, '{TXTTITLE:variableName}'. Token is replaced with text variable title cased (VoiceAttack supported locales only). Example: 'war and peace' becomes 'War And Peace'. Yes... I know that's not *proper* title case (at least in English), but it's as close as the framework will allow without linguistic rules. Sorry, even Microsoft wont touch it ;). - Commands executed by multiple joystick buttons will no longer execute single-button commands. That is, as long as the first button down does not have a command associated with it. Example : A down + B down executes a command A down only executes a command B down only executes a command User presses A down and then B down. A down only will execute, since it doesn't know that B down only is coming. This is unavoidable. A down + B down executes. B down only does not execute. - Updated image buttons with accessible names for screen readers (so they won't be indicated as just, 'button'). - Spoken command box now expands horizontally with the command window. - Added option, 'Single TTS Instance' to help with certain TTS packages (Cereproc) that have an instance cap. Select this option if you are using TTS and it keeps cutting out. - Moved command screen right-click context menu 'New Action' contents up one level (there is no longer a, 'New Action' menu item). - Reordered, 'Other' context menus into more logical groups. - Added, 'Set Boolean Value' command action. Boolean values can be set to true, false, toggle or not set. When toggling, a false value becomes true, a true value becomes false and a not set value remains not set. I added this to simplify the use and readability of macros (using 0 and 1 for true/false turns a lot of folks off). - Added, 'Set Integer Value' command action. This uses larger integers so you can have more space to work. This differs slightly from the small integer (previously called, 'conditions'), as you have the ability to compute a value. You can add/subtract/ multiply/divide (integer division) / modulus (remainder) against an explicit value or against a variable or text token. If the text token is not able to be converted to an int, the computed result will be, 'Not Set'. When computing a value, there is also an option to initialize the variables to zero if they are, 'Not Set'. This will save an initialization step (might be handy if you are incrementing, for example). - Added new tokens {INT:variable name} and {INTFORMAT:variable name} to provide a way to access the new integer variables through text features. - Updated text comparison in 'Begin conditional block' to allow either a variable name or a text token as the source of comparison. The previous function of the token being used to get the variable name has been replaced by this. - Updated 'Begin Condition' screen to include boolean comparisons. This required the layout of the screen to change from radio button selection to tab selection. - IMPORTANT: To avoid confusion going forward, Conditions are now going to be called, 'Small Integer'. The, '{COND}' token is still available for backward-compatibility. New tokens '{SMALL:variable name}' and '{SMALLFORMAT:variable name}' have been added (and refer to the same variables). - Added Disable/Enable action to right-click menu of command action list. This will allow you to selectively disable items. There are no restrictions on this yet, and I have not tested how this will affect everything (like jumps, condition statements, etc). I found it handy for testing and thought you might, too ;) - Added, 'Set Decimal Value' command action. This is basically all the functionality of Integers above, with some additional calculation methods thrown in (just kept adding whatever methods I could find... they were a no-brainer to add, so, I might as well add them). You can also round the set decimal value to up to 10 places. - Added new token {DEC:variable name} to provide access the new decimal variables through text features. - Added, 'clear favorites' menu item to command screen right-click menus. - Added, 'Clear Saved Values from Profile' action. This will allow you to selectively remove all values of selected data types that are saved to the profile. This does not clear resident values (just the saved ones). - Added three tokens : {CAPSLOCKON}, {NUMLOCKON}, {SCROLLLOCKON}. These will have a value of "1" if the lock is on and a value of "0" if the lock is off. - Added new token {TXTNUM:variableName}. This will attempt to remove all characters except numeric (0-9, ., -). So, text that looks like, 'turn -180.2' will be replaced with, '-180.2'. Note that the value is still text (from a token), but can be converted if needed. - Added new token {TXTALPHA:variableName}. This will attempt to remove all numeric characters from the text variable. - Added four new mouse position tokens : {MOUSESCREENX}, {MOUSESCREENY}, {MOUSEWINDOWX}, and {MOUSEWINDOWY}. This is a text value representation of the position of the mouse, either in relation to the screen or the active window. - Added new action, 'Stop Sounds' which will stop all currently playing sound files. - Added new action, 'Stop Text-To-Speech' which will stop all text to speech that is, 'speaking'. - Added 'm4a' and 'aac' as acceptable sound file types. - Added, 'Trim', 'Upper Case', 'Lower Case' and 'Replace' as options to Set a Text Variable action. - Added, 'Execute' on right-click menu of profile list... Might help out a little when testing. Note that it will show the entire command string for multipart. - Added tokens {TXTUPPER:} and {TXTLOWER:} to return the indicated text value as all upper case or all lower case. - Added token {TXTTRIM:} that returns the indicated text value without whitespace (without needing to use {EXP:}). - Added token {TXTREPLACE:tokenName:from:to} to allow you to replace portions of a token value with something else. Example: Token, 'myToken' value set to, 'This is a test'. {TXTREPLACE:myToken:test:monkey} resolves to 'This is a monkey'. - Set Text Value now has a new option to set the value to, 'not set'. - Set Text Value now has a way to get a value from a URI. This can either be a web address or a file path. Right now it has a timeout of 30 seconds. That will probably need to be soft-set, but we'll see. - Set Text Value can now be saved and retrieved with the profile (persisted to disk), accessible even between sessions. - Set Conditional Value can now be saved and retrieved with the profile (persisted to disk), accessible even between sessions. - Mouse set position now accepts negative numbers for multi-monitor setups where the main screen is not left-most... I've been asleep at the wheel, apparently. - For fun, added, '-opacity' command line parameter. -opacity 75 sets the value to 75% opacity. - Added, 'cut' to command list. Don't know why that's been missing all this time o_O. - Importing commands will now display a confirmation box if any of the actions in the commands are launch application or kill process. - Importing a profile will now display a confirmation box if any of the actions in the commands are launch application or kill process. - Right-click menu in command action list now contains all the actions, including favorites (also mouse... missing for all these years... lol). - Begin Conditional Block numeric condition value names as well as text compare value names can now accept tokens to indicate the variable name. - Added, 'undo' and 'redo' to the command action list (CTRL + Z, CTRL + Y). - Added support for duplicating multiple command actions (used to be just one at a time). - Updated command list to not display dialog box when there are no options to set in the action (Start VA Listening, Stop Processing, Condition Else, etc). - Added token, '{DICTATIONON}' to indicate if dictation is on or not. If on, the value will be "1". Otherwise it will be "0". - Added, '{DATETICKS}' token to express the current date as ticks. - Added new time tokens : {TIMEHOUR}, {TIMEHOUR24}, {TIMEAMPM} (shows am/pm designation), {TIMEMINUTE}, {TIMESECOND}. - Added 'favorites' feature to command action items. Up at the top of each command action on the, 'other stuff' screen, you'll see a little star. If you click it, it will add the action to favorites. The, 'Favorites' menu item will show up at the top of the, 'Other' menu. It will only show up if there are actually favorites. The favorites are ordered in the order that they are added. If you ctrl+click the star, you can clear all favorites. - Adding a 'Begin a conditional block' action will now automatically add an 'end conditional block'. Since the end block is required, this is probably for the best ;) - Added some date tokens (pretty self- explanatory) : {DATE}, {DATEMONTH},{DATEMONTHNUMERIC}, {DATEDAYOFWEEK}, {DATEDAY}, {DATEYEAR} - Added 'Suppress pauses between key presses' option to recorder screen. This gives an option to allow pauses between the key up of one key and the key down of the next. - Added text compare to 'Begin Condition Block'. So, 'Begin Condition Block' is now called, 'Begin Conditional Block'. In this action you now have the option to either compare values of conditions (numeric) or compare values of text variables. Both types of comparisons work the same, however, the, 'Text' field will accept tokens. - Added new command line parameter, '-toggledark' as a test. Puts the main screen in, 'dark mode'. Calling this from the command line always affects the running process, so, you can have a shortcut on your desktop that just changes the running instance's color mode. - Added log status bar in compact mode that shows the last log entry. - Polished up the log color icons. 'Now with more roundness!'. Dark mode now has squares. - Added token, '{CONDFORMAT:condition}'. This simply formats the condition with commas for use in TTS. This was the default behavior of, '{COND:condition}', but it has been made apparent that calculating anything over 999 results in an error. - Added, '{ACTIVEWINDOWTITLE}' token that returns the active window's title. NOTE: THIS REPLACES '{WINDOWTEXT}' token. - Added, '{ACTIVEWINDOWPROCESSNAME}' token that returns the active window's process name (what you would see in Task Manager). - Added, '{ACTIVEWINDOPROCESSID}' token that returns the active window's process id (most will never use this... just included because it was nothing to do so). - Added, '{ACTIVEWINDOWWIDTH}' token that returns the active window's width. - Added, '{ACTIVEWINDOWHEIGHT}' token that returns the active window's height. - Added, '{ACTIVEWINDOWTOP}' token that returns the active window's top (Y- coordinate). - Added, '{ACTIVEWINDOWLEFT}' token that returns the active window's left (X- coordinate. - Added, '{ACTIVEWINDOWRIGHT}' token that returns the active window's right (left + width). - Added, '{ACTIVEWINDOWBOTTOM}' token that returns the active window's bottom (top + height). - Added new action set, 'Perform a window function'. This will allow you to target a particular window and display (normal, minimize, maximize, etc), close, move, resize or change its title text. You can specify how much time to wait for the window before VA gives up. Changing the title allows you to name windows how you would like to search for them, especially if you have multiple instances that you want to keep track of. - Comments can now be blank so you can add some spaces between blocks in your commands (aesthetics). - Added some additional filter buttons to the bottom of the profile edit screen to aid with the HUGE profiles out there. There are six filter buttons : hide commands with disabled, 'when i say' attribute, hide commands with disabled, 'when i press button' attribute, hide commands with disabled, 'when i press keys' attribute, hide prefix commands, hide suffix commands, hide full commands. They just toggle on and off. - Sending keys/mouse clicks to windows with popup dialog boxes should be good to go now (not sure why I didn't see this four years ago o_O). - Added two new tokens, '{CMD_BEFORE}' and '{CMD_AFTER}'. When a wildcard is used in a spoken phrase, these can be used to get everything else in the spoken phrase. {CMD_BEFORE} is anything before the wildcard phrase. {CMD_AFTER} is anything after the wildcard phrase. For example, if using, '*rocket*' as your wildcard phrase and you say, 'i am going for a ride in my rocket ship' {CMD_BEFORE} will contain, 'i am going for a ride in my' and {CMD_AFTER} will contain 'ship'. - Added new token, '{TXTLEN:valueName}'. This will return the length of the text variable's value. - Added 'Convert Text/Token' to 'Set a Condition Value' action. If the text/token can be converted to an int16 value, the value will be used, otherwise, the value will be, 'Not Set'. - Added new token, '{EXP:expression}'. This is used for some simple math and also as a stopgap for the text comparison user interface. Everything after the colon is evaluated, so if you use '{EXP: ((5 + 5) - 2) * 10}' the result will be '80'. The expression token also accepts tokens. So, if you have a text value myText1 and it is set to '100' and a condition value myCond1 that is 200, you can have an expression of, '{EXP:({TXT:myText1} + {COND:myCond1}) * 2}' that results in '600'. Might be biting off a little bit too much here, but I'd like this to succeed :) Note that the result values can be decimal values when dividing. Accepted arithmetic operators : +, -, * (multiplication), / (division), % (modulus). Accepted comparison operators : =, <, >, <= (less than or equal), >= (greater than or equal), <> (not equal). These can be used for numbers as well as text (text comparisons have to do with alphabetical order and not length). You may also use, 'And', 'Or', 'Not': {EXP: ('cat' = 'dog') And Not (20 = 30) } {EXP: ('cat' = 'dog') Or (20 = 30) } {EXP: Not ('cat' = 'dog') } You can use, 'LIKE' as part of text comparison expressions. The text that you are comparing to needs to have asterisks in the places that they need to be (wildcards). Asterisks around the text indicate, 'contains'. Asterisks at the end indicate, 'starts with' and asterisks at the beginning indicate, 'ends with'. No asterisks indicate exact match. Text comparisons are not case sensitive. Note that the text parts need to be between single quotes (this includes tokens) : {EXP: 'dump cargo' LIKE '*cargo*'} results in '1'. If your text contains single quotes, they need to be doubled up to use in expressions: {EXP:'catcher''s mitt' = 'pitcher''s mitt'} You can concatenate text by using, '+' : {EXP: 'welcome' + ' ' + 'captain' } evaluates to 'welcome captain'. You can use, 'TRIM', 'SUBSTRING', 'LEN' and, 'IIF' (immediate, 'if')). TRIM removes any blank spaces around text : {EXP: TRIM(' my trimmed text ') } evaluates to 'my trimmed text' SUBSTRING(start position, length) gets just the portion of the text you are wanting: {EXP: SUBSTRING('let the good times roll', 9, 4) } evaluates to, 'good'. Note that the start is 1-based (not zero-based). LEN gives the length of the text: {EXP: LEN('let the good times roll') } evaluates to 23. IIF(expression, true part, false part) allows you to evaluate an expression and get one of two values depending on the result: {EXP: IIF('cat' = 'dog', 10, 20) } evaluates to, '20' {EXP: IIF('cat' <> 'dog', 10, 20) } evaluates to, '10' myCondition1 is 100 and myCondition2 is 200 : {EXP: IIF({COND:myCondition1} > {COND:myCondition2}, 'Blue', 'Green') } evaluates to, 'Green'. If your expression results in 'True' or 'False' the result will be replaced with '1' for true and '0' for false (for use in conditions). {EXP:5 < 6} will result in '1'. Note: If you try to stuff a decimal value into a condition, the condition will be, 'Not Set'. Also, if the value goes out of range of the condition, the condition will be, 'Not Set'. - Exposed -command command line argument to execute a named command. If a VoiceAttack process is already running, the running process will execute the command. Note that double quotes are needed if your command name has spaces in it. Command names are not case-sensitive. -command test (runs command, 'test') -command "my test" (runs command, 'my test') If the command does not exist in the current profile, the log will show you the error of your ways ;) - Killing an individual command now kills the playing sounds for that command. - Killing an individual command now kills the playing TTS for that command. - Reworked the, 'Other' button on the command screen. The long dropdown list has grown too large, and since more stuff is on the way, something needed to be done. Now command actions for, 'Other Stuff' can be accessed through flyout menus rather than just through one big dropdown list. The full dropdown list is still available once you make your selection, or, if you press CTRL at the same time you click the, 'other' button, you can see the list as it was. - Added 'condition else' action that allows control of your macro to jump to this point if a condition is not met. Been needing this for a long time. - Added command markers. This indicates a point in the command action list that can be jumped to with the new, 'Jump' action. Markers can be named whatever you want, but must be uniquely named within the command (if markers happen to be named the same in a prefix/suffix situation, the first marker will be jumped to). - Added, 'Jump' action to commands. You can now specify to jump back to the start of the command, to the end of the command or to a jump marker. To jump to a marker, you just specify the name of the marker you created in the combo box. When the command execution reaches the jump point and a marker is indicated, the execution continues where the marker is located (can be located anywhere in the command). Markers can also be used in prefix/ suffix situations (for instance a jump in a suffix should find the marker in a prefix, jumping to the start of a command from a suffix will go to the top of the prefix, etc). Note that when using a jump to exit the command, this does not terminate the command. Any running subcommands will still continue to process. Might make that an option later. - Added, 'Wait until the launched application exits before continuing' option to the 'Run an Application' action. Selecting this option will cause the running command to pause until the launched application closes. - Added, 'Screen Coordinates' and, 'Application Coordinates' to the mouse action screen. This will allow you to choose a position of the mouse cursor as it relates to the entire screen or to the application that is in the foreground. If the coordinates are out of bounds, the cursor is moved to the boundary. (The mouse location capture utility has been updated to respect either screen or application coordinates). - Added simple, 'Category Grouping' to profile edit screen to cut down on some clutter. Button to enable/disable is at the bottom of the profile screen. Clicking the group header will expand/collapse the group. You can also hit enter when the header is selected to expand/collapse. If you hold down CTRL at the same time you expand or collapse, you can expand or collapse all. Renaming categories is now easy to do en masse... just right click on the category group and select, 'Rename Category'. - Added a list filter box at the bottom of the profile screen to filter down commands. Pretty straightforward. If you just start typing in the box, the command list will be filtered where any field contains the typed text. Of course, this does not affect the underlying data. - Added, 'Add a Comment to Action List' action to, 'Other stuff'. Just add some text and the comment will show up in italics with a slightly lighter color in the command action list. This action doesn't do anything other than show you your own notes in the command action list. - Added option, 'Reject Pending Speech' option to options screen. This is the UI version of the -bypassPendingSpeech command line argument. When you turn off, 'listening' in VoiceAttack, you can choose how to handle what happens if you are speaking at the same time. When this option is not checked and you turn off, 'listening', VoiceAttack will let you finish the phrase you already started before it stops processing your commands. Checking this box will stop command processing immediately, including the phrase you are speaking. - For fun, if you add a .wav file called, 'sys_on.wav' and/or a file called, 'sys_off.wav' to the same directory that VoiceAttack.exe is located, VoiceAttack will use those files for its on/off sound effect (listening on/off, joysticks on/off, etc). (Of course, you noticed this must be a valid .wav file... if an error is encountered, the sounds are reverted back to the default sounds). This was almost no code, so I just left it in ;) Also, if you add a file called, 'header.png' to the VoiceAttack.exe folder, the header bar on most windows will use that image as the background, tiled. Not sure how this will look for you, but I tried it with an image with 500 pixels and and image with 5 pixels and it seems alright. Your milage may vary, of course. Make sure your image jives with the icon colors and header text... or you wont be able to see them (again... you noticed this must be a valid .png file, however, I tried renaming a .jpg file to header.png and it worked... lol). If an error is encountered, it just reverts to the original black. - Added a mass update feature to the Edit Pause screen. Note that its on the Edit screen. You can mass update pauses at the command level and at the profile level. How this works is that any command action that has a duration that matches the original duration will be changed to match the updated duration. So, lets you have a bunch of pauses that are 0.1 second in your profile that you want to change to them to 0.2 seconds. You edit one of them and change it to 0.2 seconds. If you choose the mass update option to alter the profile, all the pauses that are 0.1 second will be changed to 0.2 seconds (no other ones will be touched). Some folks use a standard pause time for certain things. This will help to avoid changing all pauses to a single value. You can undo a mass change from the command level by pressing Cancel on the Command Edit screen. To undo a profile-level update, you will need to hit Cancel on the Profile Edit screen. - Added a mass update feature to the Edit Keypress screen. Again, note that its on the Edit screen. You can mass update key presses at the command level and at the profile level. When you select the, 'Mass Update' option and select the scope (either command or profile) any keys that match the original keys will be changed to the updated value. This will also include the duration (if there is one) and the input mode. Note that the mass update option becomes disabled if you try to change the action type (from key down to key up, for example). You can undo a mass change from the command level by pressing Cancel on the Command Edit screen. To undo a profile-level update, you will need to hit Cancel on the Profile Edit screen. - Added ability to resize the command screen. This required the removal of the advanced/basic view button (+/-) in the top-right corner. Not sure if that will even be missed. Command screen can be resized by dragging the bottom-right corner. Still need to work on flicker/painting, but it seems to be ok so far. - Added support for FLAC audio files. Make sure the FLAC codec is installed by going here : http://www.xiph.org/dshow/ - Added, 'Window Style' to application launch action. Standard choices are, Normal (default), Minimized, Maximized and Hidden. Note that these only work if your target app supports them. - Added new option, 'Recognition prefix exclusions'. This is a semicolon- delimited list of values (the default is, 'if;but;the'). Sometimes when we speak commands there are ambient noises. You might breathe or make a, 'pop' noise. These noises are sometimes interpreted as words. For instance, if you have a command called, 'power to shields', you might see it come up as, 'Unrecognized: if power to shields'. This is because the speech engine interpreted the, 'if' from some kind of noise it picked up (mostly breathing). For a long time, VoiceAttack has filtered out some words ('if' and 'but'). This doesn't work well with non-English speakers and they are hard-coded (of course). This option lets you pick what words to use. Hope this makes sense... - Added option to check for updates on startup... if that's a real 'feature'... lol. Only gives you a message box if there is actually an update. - Added, 'orange' as a Write to Log icon color... just for fun. - Added, 'Disable profile initialization commands' to Load Options screen (ctrl + shift on VA startup). Also added proper documentation for this screen in help file. - Bug Fixes - Fixed export/import issue with profiles that contain values in 'Execute a command each time a phrase is unrecognized' or 'Execute a command each time this profile is loaded'. - First stab at quelling app exit exceptions. - Fixed the numpad enter issue that's been around FOREVER. In DirectX mode, you can select either the alpha keyboard enter (Enter) or the numpad enter (Num Enter). The way you need to select the numpad enter key is through the Extended Key Chooser screen (the icon is a small keyboard on the right side of the 'Edit/Add a keypress screen). The reason is because normal Windows forms do not distinguish between the two enter keys. - Fixed some font issues on several screens. - Fixed issue with calling command by name in a linked profile not working properly. - Fixed bug in kill process that would prevent some apps from being terminated. - Fixed issue where prefixes would sometimes end up as full commands. - Fixed bug with delete of commands not allowing subsequent deletes without selecting another command. - Optimized composite command (prefix/suffix) loading. - Fixed registration screen not allowing registration... lol. At some point I was in the middle of creating a better error message & never finished the process. All better now ;) - Fixed some issues with extended keys. - Fixed issue with nested commands not executing if disabled. - Fixed issue with empty action sequences not stopping properly when included in a loop that repeats indefinitely. - CTRL + V pasting in command action list without copying anything no longer crashes the application. - Copy selected as text no longer crashes app. - Updated DirectX mapping for some keys to be the proper mapping o_O. - Fixed some DirectX extended key issues. - Fixed joystick disable not working in some cases. Well... any case other than the global listening...lol. - Fixed circular reference issue in some cases with execute command children that also execute commands. - Fixed, 'buttons' column not showing properly in profile screen. v1.5.7 - Improvements - First pass at joystick integration in VoiceAttack. You can now assign the buttons on up to two devices to control features such as command execution and start/ stop listening. Each device can have up 128 buttons, plus up to four POV (hat) controllers. VoiceAttack will treat each pov as a set of switches that can have 1, 2, 4 or 8 positions (they will display as POV 1-8, and act just like pressing buttons). For the 2 direction switches, you can choose either up/down or left/right. There is also two-button modifier support which can be cross-stick (eg, press button 1 on joystick 1 plus button 5 on joystick 2 will execute a macro). You will find this feature in pretty much every place that you'll find keyboard shortcuts (including profile override). To turn on joystick support, just go into the options screen and click on the, 'joystick options' button. Full documentation is included down in the .pdf if it's not obvious as to what is going on. You'll notice in the command screens you have yet another checkbox labeled, 'when i press joystick button'. This is where you can assign your buttons to your commands. There are two new, 'other' actions: enable/disable joysticks. I didn't implement a, 'stop all commands' as global feature, since there is already a command action that does the same thing. If this comes up as a need later, we can work it out then :) - Added, 'Wait until tts is finished before continuing'. This will hold up the executing command until the speech finishes (Useful for prompts). - Added, 'TTS can complete other tts' feature to complete any other executing TTS. Note that any TTS marked, 'wait til finished' will be completed and execution will resume in that command. Use with caution. Adding the, 'wait' feature has added the need to have multiple instances of TTS (due to threading). This, coupled with the ability to stop all processes (and also stop any executing tts) has now made it to where multiple TTS instances can run at the same time. This may cause some to have to redo their profiles somewhat, but the requests for having a, 'wait until finished' come up a LOT. The, 'interrupt' feature was added in case that gets annoying. - Added, 'Wait until sound is finished before continuing'. This will hold up the executing command until the sound file finishes playing (Useful for prompts). - Added, 'This sound can complete other currently-playing sounds' feature to complete any other playing sound file Note that any sound that is playing and is marked, 'wait til finished' will be completed and execution will resume in that command. Use with caution. Adding the, 'wait' feature has added the need to have multiple instances of sound players loaded (due to threading). This, coupled with the ability to stop all processes (and also stop any executing sounds) has now made it to where multiple sound players can run at the same time. This may cause some to have to redo their profiles somewhat, but the requests for having a, 'wait until finished' come up a LOT. The, 'interrupt' feature was added in case that gets annoying. *******Isn't copy and paste great? :) NOTE: If you are using, 'Force Legacy Audio' or have removed your Windows Media Player components, these features will not be available to you (a warning will be given in the log to indicate this when encountered). - Updated command edit to allow for multiple actions to be selected and manipulated at once. Ctrl + A selects all, holding down shift allows for multiple items to be selected, holding down ctrl will allow for you to pick non-contiguous items, etc (just like a normal list box... lol). You can move groups of items (even non-contiguous items) up and down, delete, copy and paste (within the same command or even within another command in another profile). - Added, 'copy all as text' to command list. This should help showing command actions be a little easier than typing or exporting profiles. - Added 'Copy Selected as Text' for sharing just portions of your commands. - Added option to stop a repeating macro from executing if the active window loses focus. - Added X,Y input boxes for mouse, 'move to'. - Added support for .ogg. You will need to make sure you have a codec for it in Windows Media Player in order to actually hear the sound. (The codec can be found here : http://xiph.org/dshow/). Note, this will only work in non-legacy mode (just like .mp3 and .wma). - Added new token {TXTURL:textValueName}. This works just like the {TXT:textValueName} token, except what you get back is the value URL encoded. Also, if the value is not set, you will receive a blank value instead of a url encoded, 'not+set' :) - Added the ability to execute a command on profile selection. Whenever a profile is chosen (even on VoiceAttack startup) and this option is set, the selected command will be executed. Some will want to use this to play a sound (or tts). Some may want to use this to initialize stuff. A log message is written to remind you that this is going on :) - Added an unrecognized command, 'catch all' command that can be selected from the profile overrides screen. If a command is selected and an unrecognized phrase is encountered, this command will be executed. The {CMD} token will be overridden with the unrecognized value (if you want to do anything with that value... say it back to you with TTS, pass to a plugin, whatever). Outside of that, it works just like any other command (including the confidence level). Use it to play a sound (which is what I'm sure it will be used for the most... lol). - Added advanced feature, 'Execute Another Command by Name'. In the, 'Execute Another Command' action screen, you can now either pick another command from a dropdown list or you can enter the name of a command to execute in the provided text box. The text box can contain replacement tokens for how ever you want to use it. This is designated as an, 'advanced' feature since there is limited loop checking performed. If a full command name exists, a check will be made. If the command can not be found (with or without tokens) there is no loop check. This can easily freeze and/or crash VoiceAttack. You've been warned :) Also, if you are trying to execute a multipart command by name, you can pick any one of the commands and it will be used (for instance, if you have a multipart command labeled, 'test;test all;test something', you can just put, 'test' in the box. - Confidence levels are now exposed to the user for selective execution of commands. When the speech engine recognizes a phrase, a confidence score is given based on how accurate the speech engine thinks it was at recognizing. You can now indicate that a minimum score must be met in order to execute commands. This value can be set in the options page as a 'global' minimum, at the profile level as an override and default for all commands in that profile, or, at the command itself (which overrides everything). If a phrase is recognized but is rejected due to being below this threshold, indication will be shown in the log. If the confidence level is used in composite commands (prefixes/suffixes), if either of the parts is using the confidence level, the derived command will use that level. If *both* parts are using the confidence level, the maximum of the two will be used. - Included support for mouse back and forward buttons in the mouse action screen. You can now click, double-click, hold down and release the mouse forward and back buttons just like you could the other three. - Added new token {TXTRANDOM:value} to allow for the simple randomization of text within a token. For example, TTS could be set up to say, 'I love {TXTRANDOM:food;animals;jewelry}' and the result would be, 'I love animals' or, 'I love food' or, 'I love jewelry'. Note that the, 'value' portion can be another token, however, if you want to randomize randomized tokens, I might suggest using text values to store each part (may or may not work like you want it to otherwise... winding down an endless permutation trail for testing at this point). - Bug Fixes - Removed code to release modifier keys on kill command to avoid any unpleasantness. I guess this isn't technically a bug, but it's definitely not an, 'improvement'. - Fixed bug where -listeningoff command line parameter would prevent startup command from executing. - Fixed an issue where the key passthrough was not staying set for some hotkeys. v1.5.6 - Improvements - First attempt at what are being called, 'conditions'. Conditions are basically numeric variables that can be set by the user. These values can be checked to alter the flow of command actions. There are three new screens to support this new feature set : Set Condition Value, Begin Condition Block and End Condition Block. Use the Set Condition Value to set a value to either an explicit value, a random value, an incremented value, a decremented value or a value contained in another condition. There is also an option to clear an existing value (helpful for creating toggles or just getting rid of a value). To conditionally alter the flow of command actions, you can surround the actions with Begin and End Condition blocks. The Begin Condition block checks the condition value, and if the condition is met, action execution is allowed to continue. If the condition is not met, action execution resumes after the corresponding End block. There is an opportunity in the End block to exit the command if the condition is or is not met. A tiny bit more information is available in the VoiceAttack help document, under, 'Other Stuff' screen. - First pass at plugin support for VoiceAttack. To invoke an external plugin, you will use the, 'Execute an External Plugin Function' command action. Too much to explain here... you'll have to look at the documentation or follow along in the VoiceAttack Google group. - If you hold down CTRL + SHIFT when VoiceAttack starts, you will see the new load options screen. Right now there are only two options: disable plugins and reset all VoiceAttack settings (works just like clicking the, 'reset settings' button on the options page). The options on this page are considered before VoiceAttack loads, so, disabling plugin support from here will prevent plugins from actually initializing. More stuff later... maybe... - Added a button to profile screen to toggle between expanded and consolidated view of multipart commands. - Added three new tokens for use in Play a Sound and Run an application actions. The new tokens are : {VA_DIR} - VoiceAttack install directory. {VA_SOUNDS} - VoiceAttack Sounds subdirectory (contained in the VoiceAttack install directory). {VA_APPS} - VoiceAttack Apps subdirectory (contained in the VoiceAttack install directory). The Sounds and Apps directories are created by the installer. If you have sound files that you are wanting to share, you can keep them in relatively the same place without having to alter your profiles. For example, lets say you create a folder called, 'My Sounds' in the VoiceAttack\Sounds folder to hold your sounds. To access a sound file in that directory, you would put {VA_SOUNDS}\My Sounds\someSound.wav. If you export the profile, the virtual path goes with it This was built to help some of the users that are building sound packs for various games. This is an evolving thing... it may even be user-configurable by the end of this. NOTE: The location of the VA_APPS and VA_SOUNDS tokens can now be set in the options screen. - Added Set Text Value command action for use with things like text-to-speech. Just like conditions, you can use whatever name you want. You can set the value explicitly (myTextValue = 'Some text') or, you can set a text value to the same text as another text value (just like Conditions). Also, just like conditions, the text values are at the application level and are available (and modifiable) between profiles. The text values themselves can contain other tokens that are replaced at runtime. NOTE: When setting a value explicitly, you may also use any available tokens and they will be replaced at run time. - To support the new text value, two new tokens have been added : {TXT:valueName} and {TXT:valueName:defaultValue}. The valueName portion is not case-sensitive. The defaultValue portion can be used in case the text variable is not set. Just put whatever value you want in the defaultValue portion and, if the text value is not set for that variable, the default value will be used. More often than not, you will be using {TXT:valueName}, but there will be times when just having a default value in place when the value has not been set will be handy. - Added new command action, 'Write to Event Log' which will allow you to specify a tokenized (or not) value, plus indicate the color of the indicator. This will be useful for inspecting your values. Even though it's not technically an, 'advanced' feature, it will probably only be used with the advanced features. - Added token to TTS to read current profile name: {PROFILE}. - Added token to TTS to support conditions: {CONDITION:theConditionName}. This will read the value in the condition. Useful for me, at least, to debug... left it in just in case you might want to use it for something. Note : The help file says something else, but it is currently still {CONDITION:theConditionName}. Ultimately, whatever is in the help file will be what is used since it is shorter. - Added {PREFIX} and {SUFFIX} tokens to be used in composite commands. If you have a composite command, the {PREFIX} token will be replaced with only the prefix part of the command, while the {SUFFIX} token will only be replaced with the suffix part (to access the whole command, continue to use {CMD}). The tokens can be present in either the prefix or the suffix commands... if that makes sense o_O. - Execute external plugin context value now accepts tokens (fwiw). - Added, 'Rate' slider to TTS. Fun somehow... I don't know why that wasn't in there. - Stopping command processing will now attempt to stop any text-to-speech that may be being read. - Added, 'Duplicate' feature to command action list. Another thing I thought had been done already. - Changed the runtime permissions from asInvoker to highestAvailable to see if VoiceAttack can avoid having to be set to run as administrator all the time. I didn't want to do this, but it has become painfully obvious that this has to be done for a lot of people. Hoping this doesn't enrage everybody else due to the warning messages (my guess is that anybody that gets the messages will just run VA as administrator anyway). - Browsing for sounds now looks in the folder you had last selected a file. Added the ability to hold down ctrl to go directly to VA_SOUNDS (kind of a hidden feature... description in tool tip). If the selected sound file is within the VA_SOUNDS root, the {VA_SOUNDS} token will be automatically replaced in the text box. - Allow for commands indicated as disabled for shortcuts and, 'when i say' to be executed as subcommands. - Touched up registration screen to be less confusing. - Bug Fixes - Second pass at patching the dead/grave/deaf key causing double marks (�� ^^) on a single press. Sorry, my European friends... I'm trying! There's a balance I'm trying not to disrupt down below... lol - Fixed issue with email registration accepting a, '+' in the email address. - Fixed an issue where linked profiles could not execute subcommands if the subcommands were located in the linked profile o_O - Fixed issue when editing a command with no headset plugged in may cause VoiceAttack to crash. - Fixed {CMD} token to work properly with multipart commands. - Fixed shortcuts being disabled in a command when the spoken phrase is disabled (again). - Fixed shortcuts not working when switching between profiles. - Fixed compact mode screen corruption when starting VoiceAttack as minimized. - Play sound preview now checks to see if the file exists (as a better indicator for token replacement). - Fixed import export duplicate comparison issue when using composite commands (prefixes/suffixes) with groups. - Fixed issue where profile override would invoke on, 'when i say' even if the command was disabled. - Installer now checks for .net framework v4 and warns appropriately. - Fixed tab order in some of the, 'other stuff' screen controls. - Fixed some subcommand/multithreading issues. - Fixed, 'stop listening' button from showing incorrect status when there is pending speech. - Fixed import export duplicate comparison issue when using composite commands (prefixes/suffixes) with groups... for real this time (I think). Kill commands should now be able to be exported and imported properly. - Added code to keep prefixes and suffixes from filling up your, 'execute another command' and, 'kill command' dropdowns. - Tooltips on, 'other stuff' screen were an outright mess. Took a spin at cleaning them up. - Fixed an issue with modifiers being only available as a toggle in the profile-level override hotkeys feature. - Fixed an issue with changing/importing profiles while no audio connected. v1.5.5 - Improvements - Added first round of referenced profiles. In the profile options, you can now select one other profile to, 'include' with your profile. Any profiles referenced by the referenced profile will be included as well. Some notes on this : Exporting your profile will not maintain this information. All commands in the selected profile will override what is in the reference profile. If the referenced profile references a profile, *ITS* commands will supersede those in the profile it references (and so on up the line). Keyboard shortcut combinations are NOT overridden if they exist in commands with different names. If you have a combo in one profile and it also exists in the referenced profile (with different names), BOTH will be executed on key press. This is by design, since an overridden key combo is not quite as evident as the spoken commands. Executing both will show in the log and adjustments can then be made by the user. The override listening command in the selected profile is the only override (the overrides in referenced profiles are not considered). So, if you have, 'Computer' as the listening override in your selected profile, and, 'Sara' in your referenced profile, all commands will respond to, 'Computer' as the override. When viewing/editing your profile, you will only see the selected profile. There is no, 'merged view'. This is by design to avoid confusion. To view and edit the referenced profile, you must switch to that profile. Not going to build that interface any time soon. You *can* have profiles that point at each other (and not create a circular reference... lol). This was done so that you could jump back and forth between two profiles and, depending on the selected profile, override the other... hope that makes sense. Commands disabled in the selected profile but are not disabled in the referenced profile are treated as not overridden. That is, if you have a command called, 'test' in the selected profile and it is disabled (both hotkey and voice command are unchecked), and there is a command called, 'test' in the referenced profile that is not disabled, the, 'test' command in the referenced profile is then active. Since there is no way in the UI to indicate, 'do not override', this is the only current way to do this. At some point, there *may* be multiple includes, but we need to wait 'til the dust settles on this one first. - If you add semicolons between phrases in the, 'Say Something With Text to Speech' feature, VoiceAttack will randomize which phrase to use. Kind of a hidden feature :D - Added time tokens to TTS text. If TTS encounters, '{TIME}' in its text, it replaces it with the current time read as a 24 hour clock. '{time}' (note all lower case) will read as a 12 hour clock. Example (with random time reading) : The time is now {time};It is now {TIME};{time} - Added {CMD} (upper case only) which reads the current command name. - Added {RANDOM:1:100}. This will generate and say a random number between some low number and some high number (inclusive). The example shows rolling between 1 and 100. - 'Other' screen now remembers the last action you selected. - Export to html now remembers what columns you choose. - If a start listening or stop listening command is issued and a, 'play a sound' or, 'say something with TTS' is anywhere in the action list for that command, the start and stop listening sound effects are muted. - Bug Fixes - Fixed an issue where when changing profiles with composite commands that contain additional actions would cause a black hole... O_o - Disabled the ability to copy commands from one profile to another when the source command contains a subcommand (either execute or kill). This would get all kinds of hairy (and the result would never work), so it is disabled for now. Also added a confirmation for the delete of commands that are referenced in other commands. - Better handling if no speech engines are installed. This was made evident in Dutch versions of Windows where the only speech engine available was English. - Fixed issue with listening overrides not working at all with prefixes and suffixes. For example, if your command override is, 'computer' and you have a prefix of 'fire' and a suffix of 'weapon 1', you can now say 'computer fire weapon 1' when the listening is off. - Better validation of multipart phrases. - Fixed issue where key press, 'hold down for x seconds' input box was not responding to the numeric keys on the alpha keyboard. - Fixed issue where commands could not be disabled if both 'when i say' and 'when i press' check boxes were not checked. Effectively, you have to have at least SOMETHING in either the 'when i say' text box or have some key presses selected in the, 'when i press' section. If you have nothing in either, the command can not be saved (ok button will not be enabled). v1.5.4 - Improvements - VoiceAttack now requires the .Net Framework v4.0 to run (version 3.5 is no longer supported). - Added optional prefix/suffix group. This is a quick way to isolate your prefixes and suffixes so that they will only work with each other. You can now have a prefix of, 'eject car' and a suffix of '88' where the commands can do something totally different than if you had a prefix of, 'mute car' and a suffix of '88'. - Added keyboard layout option. This defaults to auto-detect the current user's keyboard layout if it is available (no more # sign over the 3 key for our friends in the UK). More layouts will be added over time. If no matching layout is found, the US layout is used (which is what VoiceAttack has been doing all along). Note: To save confusion, this does not actually change the output. It merely changes the display within VoiceAttack to give a better idea of what is going on in regards to key presses and log entries. - Added, 'Do not show unrecognized items' to log on main screen. Right-click on the log to see this option. This will clear any unrecognized commands currently shown and does not add any new ones to the list. - Added, 'New log entries at bottom' to the log. Accessible from the right-click menu of the log, checking this will show new log entries at the bottom of the list (versus at the top). - Added, 'Numeric Enter (DirectX Only)' item to the Extended Key Chooser screen. This is to allow the use of the Enter key in DirectX mode (this is a long-standing issue, mostly because Windows does not differentiate between the the Enter keys... which is why it is only available in the dropdown list of Extended Keys). - Increased pause from 99.999 to 999.999 seconds. - Added -stopcommands command line parameter. This will work just like clicking the, 'stop commands' button. - Bug Fixes - Fixed some issues regarding looping and multithreading. - Fixed issue with mouse click duration not saving when edited. - Fixed multipart commands from accepting blanks. - Fixed multipart commands from accepting duplicate entries within the same command. - Fixed issues with dropdown combo boxes not showing values properly after framework change. - Separated mute status from the audio status icon (to stop the icon blinking... mostly). - Fixed issue where hitting enter after clicking the, 'clear' button on the keypress screen would actually create a keypress action without a key. - Fixed issue in key press screen where if the alt/shift keys were used in numeric input box, VoiceAttack would hold on to the modifier key. - Removed unique name restriction for prefixes and suffixes when comparing to other command types (for example, you can now have a full command, 'eject car' as well as a prefix (or suffix) called, 'eject car'). Prefix and suffix names must now be unique only within their own subgroup. v1.5.3 - Bug Fixes - Fixed a very specific bug involving prefixes/suffixes when no other commands exist in a profile. v1.5.1 - Bug Fixes - Fixed bug where prefix/suffix commands were completely hobbled o_O - Category now copied when duplicating commands. - Fixed problem when listening was turned back on after editing profiles. v1.5 - Improvements - First-pass attempt at repeating commands. This pass includes the ability to repeat indefinitely, or, a certain number of times. This option is available in the add/edit command screen (make sure the advanced view is open by clicking the, 'plus' sign). Due to the nature of the messaging means in VoiceAttack, the repeating command can only be executed on the Active Window process. Also as a safeguard, if the active window loses focus, the repeating command is terminated. - Added the option to pause a running command while a subcommand is running, instead of running the subcommand asynchronously and continuing to process. This was a big oversight in the prior releases. This option will be on by default for new commands (this will be off for existing commands so it will not interfere with what is currently expected). You can find this option on the 'Execute another command' action on the, 'Other Stuff' screen. - Added ability to terminate commands by name. For now, this terminates all instances of the indicated command. This is the means to stop your looping commands as well as any long-running macros. Previously, you could only stop ALL commands. This *should* terminate any subcommands that are called. This command action is located in the, 'Other stuff' screen. - Added the ability to use delimiters in commands to express multiple variations of a command. For instance, you no longer need three separate commands to call, 'fire', 'open fire' or, 'fire at will'. You can simply make one command that is, 'fire;open fire;fire at will'. VoiceAttack will treat that as three commands, all doing the same thing. Note that the items will be broken up automatically when viewed in the list. - First pass attempt at prefix/suffix commands. This will allow a user to create commands that can have two parts that can be mixed many-to-many. For example, you can have a suffix of, '88' and a prefix of, 'eject driver'. When you say, 'eject driver 88', both commands are executed. You can also say, 'mute driver 88' or, 'flag driver 88', etc. Before, if you wanted to account for 100 drivers, you would need to duplicate your commands 100 times for each set. Now, you just specify your suffix set once (yeah... still 100 drivers), but, you only need to do this once. I think I'm explaining this right. Features are getting more and more complicated :) - Pressing, 'enter' on a command action now edits the command. - If VoiceAttack detects a, 'Start Listening' action ANYWHERE within an action sequence, the entire sequence will be executed as if VoiceAttack was already, 'listening'. - If a second instance of VoiceAttack is opened, the original instance of VoiceAttack will now pop up as the topmost window. - Added various parameters to command line: -listeningoff, -listeningon, -shortcutsoff, -shortcutson, -minimize. Kind of self-explanatory :) - Often when you turn on your mic and say a command immediately, the speech engine picks up, 'but ' plus whatever you said. I put a filter in place so that if a command is unrecognized and starts with, 'but ', it will trim it off and try again. - Added, 'Duplicate' as a menu item when you right- click on a command in the profile editor screen (no longer a need to do a separate copy and then paste). Selecting this automatically opens the edit window for the new, duplicated command. Cancelling from here also cancels the duplication. - Last edited command will now be selected by default even after application restarts (may not be helpful for anybody but me :) - Increased the size of the pause screen input box and made the initial text selection a little smarter. - Added -profile command line parameter to launch or change VoiceAttack's active profile. Usage : -profile "My Profile Name" *Make sure to use double quotes if your profile name has spaces in it. - Command line parameters will now affect the running instance of VoiceAttack. You can now create a shortcut on your desktop that can, for example, change a profile, start/stop listening, start/stop commands, etc. that will affect the running instance. - Added -nofocus parameter to command line to keep VoiceAttack from popping up if there is more than one instance (just like it used to be). - Added, 'System Info' button to options page. This will be established over time (there's just basic information in there now). _ Bug Fixes - Fixed snap-to-edge offset for right and bottom edges of the screen (left over from when VoiceAttack had rounded corners :D ) - The "~ `" key on US keyboards was displayed backwards in the, 'Add/Edit Keypress' screen. Should display properly now. - Undocumented features - Holding CTRL + Options button opens Windows' Sound/Recording device dialog. (Same as right-clicking on speaker icon in system tray and selecting, 'Recording devices'.) - Holding ALT + Options button opens Windows' Volume Mixer dialog. (Same as clicking the speaker icon in the system tray and then clicking, 'Mixer'.) v1.4 - Improvements - Complete rework of VoiceAttack user interface look. This includes the new flat/icon look, as well as the compact mode of the main form. - Added, 'Hide/Show Advanced Options' button on the command screen. - Added, 'Launch with Windows Start' option. - Added, '-bypassPendingSpeech' command line option which reverts VoiceAttack back to a state where hitting the, 'stop listening' button will prevent pending speech from being invoked (basically stops any running macros). - Bug Fixes - Fixed hotkey enable/disable by voice command not updating main form button. v1.3.7 - Improvements - Text to speech now supports multiple voices. If you have more than one voice installed on your machine, you can select a different voice for each spoken statement. - You can now enable/disable keyboard shortcut hotkeys with a command. These command actions are found on the, 'Other stuff' screen. - Also, you can enable/disable keyboard shortcuts on the main screen with the new, 'Shortcuts On / Off' button. Toggles just like the, 'Listening' button. - With the addition of the new button, the option screen is now accessible thru the little wrench icon on the top bar. - Added a few command line functions for testing. - Changed the way the keys are labeled in the key press screen. Previously, in DirectX mode, you would see (for example), 'Num 7 Home' when pressing the numeric pad, '7' key. This will now display, 'Num 7'. This is because VoiceAttack is a Windows application, and, is picking up key presses that are applicable to Windows. The DirectX api only has one scan code for 'Home', and, does not differentiate between the numeric pad home key and the central cluster home key. This more accurately represents what is going on and will save some confusion going forward. - Bug Fixes - Work done on the keyboard shortcut enable/disable code in an attempt to make enabling/disabling shortcuts a little more reliable. - Fixed issue in Windows 8 where resuming from sleep mode would cause the speech engine to double up recognized commands. - Removed horizontal scrollbar from log view that would occasionally pop up. v1.3.6 - Improvements - Added, 'Mouse Click Duration' feature that allows you to control the amount of time between a mouse down and mouse up action (for both single and double-clicks). This was created to allow a little more time for DirectX games to detect a mouse click. The default value for this is 0.1 second. - Added Move mouse left/right/up/down x number of pixels from current position. - Removed restriction of import commands for the trial version. The only gotcha is that there is still a maximum of 20 commands. - Added command line argument, '-default' that basically does what the 'Reset to Defaults' button does on the Options page. This is for more than rare instances where an option has gotten corrupted (or manually tampered) and the application will not launch. - Bug Fixes - Modifier keys that are down are now released when commands are stopped. - To be a better neighbor, VoiceAttack will attempt to key up any modifiers that are down on application exit. - Prevent Win + up arrow from maximizing screens. - Fixed issue when superceding key down commands were still executed (for example, if you have a key-up macro that is, say, 'CTRL + SHIFT + X' and another that is just, 'CTRL + X', when you press 'CTRL + SHIFT + X', 'CTRL + X' should not execute at the same time). - Fixed issue of input mode not being saved on edit of key press when key down or key up was selected. - Fixed issue with profile overrides that required app restart for changes to take effect. - Removed time delay when releasing a modifier key when using a key-up assigned macro. v1.3.5 - Improvements - You can now execute the macros you set up for voice commands with keyboard shortcuts. On the command screen, you now have two checkboxes : 'When I say...', and, 'When I press...'. You can indicate either or both (which also has the nice side-effect of being able to enable/disable commands). What makes this fun is that you can have macros with a plain, old keyboard (and, if you have a keyboard with macro software, the ability to assign macros to keys other than ones designated). There is also an option to only allow for the command to be invoked on key up. Kind of handy if you have pairs of macros that you execute all the time (one macro on the key down, one on the key up). - Added, 'Command Weight' feature to the, 'Options' screen. The higher the value, the more likely VoiceAttack is going to make a, 'best guess' as to what you said. This feature will make the recognition of your commands way more reliable overall, and, will help with certain commands that the speech engine just_will_not_handle. Example... if the value of Command Weight is 100, and, you say, 'flag', and you have no command called, 'flag', but, you have a command called, 'bag', 'bag' will be executed. A high value is (probably) not desirable if you have listening turned on all of the time, since just about everything you say will get executed somehow. A high value would be most helpful for those that use, 'push-to-talk (listen)'. Default value is 50 and can be adjusted up to 100. ***NOTE : THIS FEATURE IS *NOT* AVAILABLE IN WINDOWS XP. - Keypress recorder now available on the, 'Command' screen. This replaces the, 'Quick Input' screen (since it can do everything the, 'Quick Input' screen could do and more). - Updated the, 'Other Stuff' screen to use a drop down list instead of radio buttons to select the action. The screen was getting entirely too long, and there are more features coming :) - Totally for fun, you can now override VoiceAttack not listening with a command prefix. For instance, if you have VoiceAttack's listening turned off, you have a command called, 'Launch My Game' and a command prefix of, 'Computer', you can say, 'Computer, Launch My Game' and the command will execute (as if listening was turned on). Note that you don't actually have to have listening turned off... works just as well turned on. This is for my Trekkie friends :) This is located in the, 'Profile Options' screen, right off the profile. - Setting speech delays in options no longer requires a restart (this will make tweaking a lot quicker). - 'Allow other commands to run at the same time' (asynchronous commands) is now on by default for new installs. - Windows Game (DirectX) is now the default selected input mode for new installs. - Added a subtle bit of gradient to the background of all the main forms... the previous flat color tended to make the forms hard to distinguish when overlapped... this might help a little :) - Shined up the mic level indicator on the main screen. No longer a standard progress bar (bleh). - With keyboard shortcuts enabled, I decided it was a bad idea to kill VoiceAttack when it starts up and there is no default audio device (or headset/mic not plugged in). You just get a warning box now with the option of not showing the box any more (a log message always appears with this warning). An added benefit is that now you can configure VoiceAttack without having to have your headset/mic hooked up (actually, you could always do this, since the popup message was never modal). - Bug Fixes - Introduced bug with working directory that stops all shell commands from working. This has been fixed. - Left Shift/Alt/Ctrl keys not working in DirextX mode fixed (doh). - Known issues that will be fixed in the next release : - Issue with profile overrides that requires app restart for changes to take effect. - Win + up arrow maximizes every window. v1.3.4 - Improvements - Added option to turn off adaptive recognition. This is for those that may be experiencing trouble in noisy environments. NOTE - This feature is only available to Windows 7 and Vista users. XP users can change this value in the speech configuration applet in the control panel. - Bug Fixes - Export profile screen no longer has a delay when stretching the form. - Less aggressive means of setting top window may help with Windows Explorer issues. - Fixed an issue with the registration crashing VoiceAttack under certain conditions. v1.3.2 - Bug Fixes - Fixed introduced issue where keypress duration only works with alpha keyboard numbers. This is the main reason for the release. - 95% less squirrel in the profile screen (position is maintained a little better after delete or searching by typing). v1.3.1 - Bug Fixes Fixed introduced problem with mouse push- to-talk when editing a profile with some configurations. v1.3 - Improvements - Recognition global hotkey is no longer just toggle. You can now also hold to listen, or, hold to ignore. This can be overridden at the profile level, so, each game/app can have its own hotkey. Hotkey is no longer limited to a dropdown of shortcuts. Key selection works like the keypress screen, so, if your app can support the keys, you can select them. - Mouse push-to-talk and global stop command can now be overridden at the profile level. - Stop command is no longer limited to a dropdown selection (just like the global recognition hotkey). - Extended key support in the keypress screen. Clicking on the mini keyboard shows a popup with all of the keys you can select (in case your keyboard does not have keys such as, 'next track', 'prev track', 'volume up', etc). - Keypress screen no longer complains if a key is not supported in DirectX when switching from standard to DirectX mode. - Added working directory to app launch command. Should have always been there... /facepalm. - You can now drag and drop a file name onto the 'Run application' and 'Play sound' text boxes on the, 'Other Stuff' screen. - Updated the keypress screen (and option screen hotkey popups) with some new graphics. Thought it looked a little better, so, I went with it :) - Bug Fixes - Fixed a bug where nested asynchronous commands were no longer asynchronous. - Startup issue in XP identified and fixed. v1.2.9 - Improvements - Added 'Unrecognized Speech Delay' option in the options screen. This is the amount of time VoiceAttack takes before rejecting an ambiguous speech stream. Most will recognize this as the amount of time you have to hold your breath after talking before issuing an actual command :) I'll probably explain this more on the forums. I think it's an important piece that I have neglected for a long time. - As a result of the above option, 'Recognition Delay' has been renamed to 'Recognized Speech Delay'. - Removed read-only restriction on the Run Application text box on the, 'Other Stuff' screen (no longer required to browse for a file). This is so you can take advantage of things like shell commands. - Added Category and Description to the Commands. This will help with organization. The columns for Category and Description will only be visible if you actually have data in at least one command. Otherwise, the columns are hidden (might make this a configuration later). - Since we now have up to four columns visible on the Profile screen, we can now reorder the columns. - Updated Export to HTML to also include the new Category and Description. Column order is now configurable, as well as sorting. You can now choose which columns to export. - Enabled Help from most screens. Hit, 'F1' to be taken to online help. - 'Include Enter' press at end of Quick Input. - Added 'Reset Defaults' button to options page. This reverts all settings back to, 'factory' values (things like screen positions, column order, hotkeys, etc). Profile data is *not* touched. - Ultra-minor, but, worth mentioning : Double-clicking the gear icon on the main page closes VoiceAttack (finally). Easter egg - Holding down control + double-clicking on said icon changes VoiceAttack to, 'camo' mode :) Just for fun... my kid thinks it's cool. - Bug Fixes - Screen handling after disabling monitors in a multi-monitor configuration updated. v1.2.8 - Improvements - Maintenance release. Some optimization. Added better messages to various places. - Bug Fixes - You can now set both the, 'Recognition Global Hotkey', and the, 'Stop Command Global Hotkey', to, 'None'. - The 'Stop Listening' action is a little more forgiving when invoked near the end of issuing a voice command. v1.2.7 - Improvements - Press and release keys now default to .10 seconds out of the box (instead of 0). This value is, 'sticky', so, it will stay set to whatever you set it to last. (If you are already on v1.2.6, this version is not really necessary.) - Bug Fixes Very minor, cosmetic. Also, freshened up help document a little bit. One day, it will not look so much like a ransom note :) v1.2.6 - Improvements - Added Mouse Actions to commands. You can now add mouse left/right/middle click (mouse down and then up), double-click, down, and up to your command macros. The scroll wheel can be scrolled forward or backward. The mouse location can be captured in your games by pressing a user-defined hotkey (hotkey is defined in Options). Current mouse position can be saved and then recalled. - Bug Fixes - Fixed a bug where setting the duration of a keypress would allow users to hit, 'OK' even though no key was selected. v1.2.5 - Improvements - Added the ability to play .mp3 and .wma files (in addition to .wav). This is system-dependant, so, if your system does not support this, VoiceAttack will revert to only .wav. (Windows Media Player 10+ is required.) - Volume level for audio files has been added. Again, this is system-dependant. If your system does not support this, this feature will not be available. - Sometimes the speech engine is a bit laggy when loading and unloading data, so, improvements have been made to help it along (this will have the biggest impact on those that see a delay when changing profiles and/or adding and updating commands). - Bug fixes - A few minor bugs and some leftover test code removed. - Some more human-readable error handling provided. v1.2.4 - Bug fixes - Fixed introduced bug where editing a command that launches with a parameter does not save the parameter. - New Tips screen would sometimes lose its mind. Less broken now :) - Minor cosmetic updates. v1.2.3 - Bug fixes - Widened some text areas to display better in XP. - Added 'Tips' screen that pops up on first use. Just to help those that have never tried this before not be completely lost. v1.2.2 - Bug fixes - Profile find action by keypress works a little better. - Registration no longer cares about email letter case. - In the Keypress window, 'Method A' is now, 'Standard'. 'Method B' is now, 'Windows Game (DirectX)'. v1.2.1 - First pass at nested commands. This will allow for calling other commands by name within a command. You will find this option on the 'Other Stuff' screen. Note that there is code in place to prevent you from creating a loop (crossing fingers), since the final goal is to create repeating commands. - Optimized speech engine initializer to speed up profile loading. - Added copy (ctrl+c), paste (ctrl+v), move (ctrl + up/down arrows) and delete via keyboard to command action list (all of this is also available via right-click menu). v1.2 - Added 'This command allows other commands to run at the same time' feature to the add/edit command window. This is a first pass at 'multi-threaded' commands that is at the top of everybody's list :) - The 'Stop Macro' button has been replaced with a 'Stop Commands' button. What this does now is it is basically a panic button to indicate to all running macros that they need to stop. - Added global hotkey to stop command processing. - Added 'stop command processing' as a command (so you can issue voice commands to stop command processing... and then get sucked into a black hole). Note - this feature only works if your commands are set up to be asynchronous (that is, your commands can be executed at the same time)... more on this in the help file. - Reduced CPU usage of macros. - Profiles can now be switched via command. This is available on the 'Other stuff' screen and is accessible only to registered users (since the unregistered version only allows one profile). - Quick input now has an input mode for each keypress, a 'hold down for x seconds' and a, 'pause between each keypress'. Each of these is 'sticky' (that is, they default to the last value that you set each time you come back). - KeyPress hold key duration is now 'sticky'. - 'Start Minimized' feature added to options page. - When adding a command action, the new action will appear after where the cursor is located (not just added to the end of the list). - First pass at a command action quick reference list. This list is currently only available in html format and is generated by clicking the 'export' button and selecting 'html' as the file type. Note that this is only available in the registered version. - Bug fixes - Case-sensitivity issue between VoiceAttack commands and the speech engine (doh!). - Worked in a little more effort to make sure the main screen is visible at launch. - Typos... always with the typos. - Screen scaling issues with large font sizes have been fixed... fixed by preventing VoiceAttack from scaling at all :) - Blank commands are now omitted. Blank commands were possible through the add command screen for a brief period, due to introduced code. This has caused VoiceAttack to get upset. Also, a blank command in an imported profile would do the same thing. - Sometimes VoiceAttack would not have the proper command selected when the command was double- clicked in the command list. This has been fixed. v1.1.8 - Added exporting and importing of single profiles. An exported profile can contain any or all of its associated commands (available on the main screen). *Registered version only. - Added the ability to import commands from an exported profile (in the add/edit profile screen). *Registered version only. - Fixed a bug where right/double clicking on log entry would show incorrect command name in add/edit command screen. v1.1.7 - Added 'Input Mode' feature in the keypress add/edit screen. This is for compatibility with more DirectX games. Toggle this mode (between Method A and Method B) if your game does not recognize key presses issued by VoiceAttack. - 'Check for Update' button in options (this is only available in the registered version). - Fixed a bug where if you had a 'run application' action in a command, subsequent actions in that command would not be processed. - Activity log limited to 100 items before items drop off. - When a command is recognized or unrecognized, the Activity log on the main screen now allows for right / double click access to add and edit commands. This is a big time saver if you are testing out commands while building your profiles (saves you the trouble of having to navigate all the way to the command each time). v1.1.6 - Added Text to speech as audible feedback. In Commands / Other, you will find a selection that will allow you to add text that will be converted to speech by your built-in Windows Text to Speech Engine. There is a preview button on there so you can type something really weird & turn it up so your family can hear you (and mock you... maybe not as much as they mock you for talking to your computer... which happens here a lot). NOTE: The prerelease did not have a volume slider. If you have been using the prerelease, your volume may be zero for all of your commands (sorry, guys!). Lesser Note: Known issue - if you have multiple sound cards, VoiceAttack only outputs to the default audio device and ignores whatever you choose in the 'Advanced' screen in the control panel. - Added mouse button (left, right, middle, back, forward) hotkey listening / not listening toggles. There are also options for each mouse button to 'push to listen' and 'push to not listen'. Note : be aware of other mouse/hotkey software that you might have set up (such as Logitech Setpoint). If you are using other hotkey software, just continue using the keyboard hotkeys in VoiceAttack and have your software press those keys. - Added 'Play Sound File' as a command action. (In Commands / Other). .WAV files only (no immediate plans for other file types). - Added a 'test run' button to the 'Commands/Other' screen to test launch an application with supplied parameters (since getting parameters right is a pain, sometimes). - Fixed 'keyup' order of release if a modifier was selected. The key will be released first before the modifier. Note that this is just the keyup (what is my deal with the key ordering??? sheesh). - Possibly less crashy after registration (sometimes VoiceAttack would crash immediately after registration). v1.1.5 - VoiceAttack now supports multiple users on a single machine. In versions prior to 1.1.5, you needed to have admin rights for a single user. This was a huge design flaw from the beginning and has been corrected. This allows for each user on a machine to have their own set of profiles. Each user account on a machine will need to validate separately (apologies in advance... trying to squash bugs as fast as possible. This shouldn't affect many, tho). If your version of VoiceAttack has a VoiceAttack.dat file in the install directory (usually C:\Program Files\VoiceAttack), this file will no longer be accessed. If you are backing up VoiceAttack profiles, you will now find the VoiceAttack.dat file (usually) in C:\Users\UserName\AppData\Roaming\VoiceAttack (C:\Documents and Settings\UserName\Application Data\VoiceAttack on XP) <--- note that sometimes these folders are hidden by Windows & you'll need to set up your folders appropriately to see them. If you happen to be digging around in this folder, you will notice a backup directory where VoiceAttack now copies the last ten profile saves. If you ever find yourself in a situation where you need to restore a previous profile set, just replace your VoiceAttack.dat file one directory up with any one of the files in the backup dir. This is kind of a hack, but, if anything, it makes me feel better, (making good profiles takes a lot of work :) (This process might be made automatic later) All this should fix the issue where validation would not occur if you did not have admin rights as well as saving profiles (*yikes*). v1.1.4 - Fixed a bug where if all audio input devices were disabled, VoiceAttack would not run. - Fixed a bug introduced in v1.1.3 in the key press add/edit screen where the Tab key was no longer recognized. - Quick Input added to Command Add/Edit. This allows for creating a series of key presses quickly. This is not for all available keys on the keyboard, but, it makes inputting a key press series such as, "/use reigns of the traveler's tundra mammoth" a lot faster. - The Windows key is now a modifier in the keypress screen. If your keyboard has this key, for example, you can issue commands that contain Windows + D to go to the desktop. This was available in 1.1.3 as separate key presses, however, I wanted to also consolidate this into a single command action. - Modifier labels (CTRL, ALT, SHIFT, WIN) in the keypress add/edit screen are now clickable to change their status. The pressed key label is also clickable to clear its value. - Recognition delay is now user-adjustable. The recognition delay is how long VoiceAttack waits to react after recognizing a phrase and then hears silence. Kind of hard to explain, but, set to a lower value to have VoiceAttack react more quickly. Set to a higher value if VoiceAttack is not allowing you to finish your phrases. Play around with the value (I set mine all the way to zero). This is located on the Options page and the value can be from 0 to 10000 (the default Value is 150).