VoiceAttack Beta v1.5.8.17 is out on the site (and other stuff)

Skip to first unread message


May 1, 2016, 2:28:13 AM5/1/16
to voice...@googlegroups.com
Hiya, guys.  New beta out.  I'm thinking about branching and making the current set of features that which will be available in release version v1.5.9 (finally).  In this release, you'll want to take note of the first item below that talks about the change to mouse button down actions.  For the most part, you wont even know it's happening.  However, I'm sure there's something out there that relies on the functionality to be the old way, so, there's an option to keep it like it was.

If you go over to get the beta, check out the new VoiceAttack website.  I think it's a little less scary than the 2009 one (I spent more than a Saturday on it).

Also, the new forum will be opening soon (well... by, 'opening' I mean have a published link).  You can go over there now and sign up if you want:  http://www.voiceattack.com/forum   The forum has actually been in place since September 2014... just not published.  Pfeil found it just short of a year ago and tried to sign up (I didn't see it until just the other day).  Welcome to the forum, Pfeil!  ;)  

I'm going to try to run in parallel for a bit, but at some point that's where it's all going to be happening.

The beta can be downloaded here: http://www.voiceattack.com/beta    
The zipped version of the latest beta is here: http://www.voiceattack.com/filesend.aspx?id=VoiceAttack_15818.zip
The rollback to the previous beta can be found here: http://www.voiceattack.com/filesend.aspx?id=VoiceAttackInstaller__Beta15816.msi

As always, the release notes are below ;)



   - 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.

   - Improvements
     -  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, '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, '{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.
     -  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 
     -  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).
     -  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.
     -  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.
     -  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, 'Application Focus (Process Target) Guide' to the
        help documentation to give a little bit of assistance
        in dealing with process targets.

   - Bug Fixes
     -  Fixed issue where process target was not picking up
        all processes.
     -  Fixed issue where mouseclick-triggered commands 
        could not be the only trigger.
     -  Joystick button trigger reset to, 'Not Set' from
        command screen fixed.
     -  Joystick button set screen on, 'Extra Large' size
        text fixed to fit.
     -  Fixed, '{CMD_AFTER}' token getting too much text.

   - Bug Fixes
     -  Fixed keyboard shortcuts not enabled introduced in


   -  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
   -  Added new actions for mouse:  Stop Mouse Shortcuts and
      Start Mouse Shortcuts (just like the actions for hotkeys
      and joysticks).
   -  '{CMDACTION}' token has a new return type of, 'Mouse'.
   -  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 
   -  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
   -  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 {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.
   -  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, '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).
   -  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.

   - Bug Fixes
     -  Fixed issue {PREFIX} and {SUFFIX} tokens not
        providing values if command was overridden with,
        'Override listening if my spoken command begins with'
     -  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.
     -  {TXTRANDOM} token no longer removes empty entries.
     -  Fixed environment variable issue breaking on nulls
        introduced in v1.5.8.12.
     -  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.
     -  Column positions on profile screen now persisted again.


   - Bug Fixes
     -  Fixed issue with keypress/release introduced in


   - Improvements
     -  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
        {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 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 ;)

   - Bug Fixes
     -  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
     -  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.
     -  Fixed issue where exec command dialog would not
        save if referenced command was deleted before
        saving profile.

   - Improvements
     -  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 ;)
   - Bug Fixes
     -  Fixed introduced issue with linked profiles
        from v1.5.8.11.


   - Improvements
     -  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 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).


   - Improvements
      -  Added yet another larger screen size,
         mostly for those with 4k monitors that
         maintain 100% scaling size (and not the
         default 150%).
   - Bug Fixes
      -  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.


  - Improvements
    -  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
    - Bug Fixes
      -  Fixed issue where End Condition 'Exit when
         condition met/not met' were not exiting.


  - Improvements
    -  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).
    -  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 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.

  - Bug Fixes
    -  Fixed suffix issues when using condition actions.
    -  Fixed mouse button state tokens not reporting
       correctly when multiple buttons pressed.
    -  Fixed keyboard state tokens sometimes sticking
       on first access.
    -  Mic level bar not drawing correctly for larger
       size screens has been fixed.

  - Improvements
    - 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:
      '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:
      These should be pretty straight forward. If you
      want to test for the right mouse button, use
      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:
      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:
      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 
   -  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".


  - Bug fixes
    - 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.


  - Bug fixes
    - Fixed application launch issue introduced in


  - Improvements
    -  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.
    -  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.
    -  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 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 ;)
    -  'Add pause' action on command screen is now set by
       flyout menu.  You can choose either, 'Add pause'
       or, 'Add variable pause'.
  - Bug fixes
    - Fixed font of main screen not following new sizing
    - Fixed dynamic tts caching replaced token values.
    - 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 

  - Improvements
    - Support added for three screen sizes : 
      Normal, larger, largest.  The setting for this
      is on the options screen.  I decided that the
      screen sizes should be independent of the
      Windows scaling.  It was a lot more work, but
      I think that forcing the user to have to globally
      change their font to get a larger screen is not a 
      good idea. 
    - Added option, 'Disable Acoustic Echo Cancellation'
      to attempt to aid in recognition.
    - 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 
      [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
  - Bug Fixes
    - Recorder screen now actually resizable.  Looks like
      I either started that job or reverted some code.  
      Works now ;)


May 2, 2016, 1:58:41 PM5/2/16
to VoiceAttack
Haha, finally! Yes, when you said there was forum software in place it was easy enough to find at the default location :P

I invite all of you to come over and join. Makes for much nicer reading over Google Groups, in my opinion.


May 3, 2016, 11:31:49 AM5/3/16
to VoiceAttack
I'm also moving over to there, much nicer!


May 4, 2016, 2:40:59 PM5/4/16
to VoiceAttack
Gary, definitely love the new website look. The old one worked, but this one looks very professional, and that's appropriate, because your software is in that league now.

Also love the idea of moving to the forum on the site. Not a big fan of Google Groups and how it works. The hardest part is going to be transitioning the good knowledge base her over there, but perhaps that will take care of itself as questions, suggestions, and updates happen.

And I saved the problem for last. I've registered over at the new forum, but I cannot get the validation email sent. Tried three times over the past two days. Any suggestions? It obviously works for some people.


May 6, 2016, 12:06:00 AM5/6/16
to VoiceAttack
Thanks, bud.  I spent a little more time on this update ;)  I'll go over to the forum now and get you squared away (thanks for letting me know).



May 6, 2016, 12:17:43 AM5/6/16
to VoiceAttack
Alrighty... you should be good to go now (it's activated).  Welcome to the forum!  

I guess I need to get the link published on the site.  That will probably be tomorrow/this weekend.  


On Wednesday, May 4, 2016 at 1:40:59 PM UTC-5, Rhaedas wrote:
Reply all
Reply to author
0 new messages