v1.5.8.18
- 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
command.
- 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.
v1.5.8.16
- Bug Fixes
- Fixed keyboard shortcuts not enabled introduced in
v1.5.8.15.
v1.5.8.15
- 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).
- '{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
shortcuts).
- 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 {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'
prefix.
- 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.
v1.5.8.14
- Bug Fixes
- Fixed issue with keypress/release introduced in
v1.5.8.13.
v1.5.8.13
- 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
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 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
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.
- Fixed issue where exec command dialog would not
save if referenced command was deleted before
saving profile.
v1.5.8.12
- 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.
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).
v1.5.8.9
- 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.
v1.5.8.8
- 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
option.
- Bug Fixes
- Fixed issue where End Condition 'Exit when
condition met/not met' were not exiting.
v1.5.8.7
- 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.
v1.5.8.6
- 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:
{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".
v1.5.8.5
- 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.
v1.5.8.3
- Bug fixes
- Fixed application launch issue introduced in
v1.5.8.2.
v1.5.8.2
- 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
rules.
- 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
selected.
v1.5.8.1
- 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
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
- Bug Fixes
- Recorder screen now actually resizable. Looks like
I either started that job or reverted some code.
Works now ;)