UIStuff plugin for Take Command / TCC / TCC/LE
beta version 0.81.0 2024-09-24
Charles Dye
Purpose:
This plugin adds a few miscellaneous user-interface features. You can get or set the screen resolution for any monitor, the wallpaper image and style, the desktop background color, the screen saver settings, and the master sound volume and mute state. You can create, modify, display, or parse shortcut files. You can display or set file associations and shell verbs.
This plugin might be useful for setting user defaults in a logon script, customizing freshly-imaged computers, or to temporarily change settings while running some particularly demanding program.
Windows XP or later is required.
Installation:
To use this plugin, copy the files UIStuff.dll
and UIStuff.chm to some known location on your hard
drive. (If you are still using the 32-bit version of Take Command, take
UIStuff-x86.dll instead of UIStuff.dll.)
Load the plugin with a PLUGIN /L
command, for example:
plugin /l c:\bin\tcmd\test\uistuff.dll
If you copy this file to a subdirectory named PlugIns within your Take Command program directory, the plugin will be loaded automatically when TCC starts.
Plugin Features:
Syntax Note:
The syntax definitions in the following text use these conventions for clarity:
BOLD CODE | indicates text which must be typed exactly as shown. |
CODE | indicates optional text, which may be typed as shown or omitted. |
Bold italic | names a required argument; a value must be supplied. |
Regular italic | names an optional argument. |
ellipsis… | after an argument means that more than one may be given. |
New Commands:
BGCOLOR
— Display or change the desktop background color.
Syntax:
BGCOLOR
/S
color
/S | save color to the registry |
color | the name or RGB value of the color to set |
You may specify the color as a single RGB value
in either hexadecimal (e.g. #8B4513
) or decimal
(9127187
); as three separate values for red, green, and blue, in
that order (0x8b 0x45 0x13
or 139 69 19
); or as a
W3C color name (SaddleBrown
).
If you specify the color in hexadecimal with a
leading #
sign, it must be either three or six hex digits long.
If it’s three digits long, each digit is doubled; #8ac
is the
same as #88aacc
. Alternatively, you can use a leading 0x
and the rules above do not apply; the number of digits is not significant.
The color change only affects the current session and will be lost at logout,
unless /S
is specified. Note that /S
must be typed
before any color name.
rem Set the background color to dark slate gray:
bgcolor darkslategray
See also: the _BGCOLOR
variable, which
which reports the current background color as a hexadecimal value; the
_BGCOLORNAME
variable, which reports
it as a W3C color name if possible; the
@IMGCOLOR
function, which returns the
color of a pixel in a graphics file; and the @RGBCOMPL
function, which returns a complementary color.
CONICON
— Set the icon for the
console window.
Syntax:
CONICON
/C /D /I:
n
filename…
/C | use the icon in TCC.EXE; equivalent to "%_cmdspec" |
/D | restore the system default console icon |
/I: n | the icon’s index within the file |
This command is only useful in a standalone console window. Changes to the console icon in a Take Command tab are not visible.
rem Show several different console icons:
for /l %i in ( 3, 1, 11 ) ( conicon "%@shfolder[37]\shell32.dll" /i:%i & delay 1 )
conicon /c
DEFAUDIOOUT
— Display or change
the default audio output device.
Syntax:
DEFAUDIOOUT
/Q
device
/Q | quietly |
device | the device’s name, or its index 1 - n |
If you do not specify a device,
DEFAUDIOOUT
will display a list of available audio outputs.
rem Use my monitor for audio output:
defaudioout "dell u3415w*"
• Note: This command requires Windows Vista or later; it will not work in Windows XP.
See also: the _DEFAUDIOOUT
variable, which returns the name of the current default audio output device.
INSTALLFONTS
— Install font files.
Syntax:
INSTALLFONTS
/O /X
filename…
/O | overwrite existing files in the Fonts directory |
/X | delete source files after successful install |
filename… | the files to install |
You must specify at least one filename. Wildcards are supported.
Matching files will be copied to C:\Windows\Fonts, and entries will be created in the registry.
This command requires elevation (‘Run as Administrator’). So far, I have only tested it with .TTF and .OTF files.
rem Install fonts from the C:\Download directory:
installfonts c:\download\*
LISTFONTS
— List available fonts.
Syntax:
LISTFONTS
/C:
charset /D:
flags /F:
family /P:
pitch /T:
type
name
/C: charset | character set; see below |
/D: flags | display extra info: L line numbers, F family and pitch, S script, T font type, K final count |
/F: family | filter by font family: R Roman (serif), S Swiss (sans-serif), M modern (unstressed), H hand (script), D decorative, N no family specified |
/P: pitch | filter by pitch: F fixed pitch, V variable pitch |
/T: type | filter by font type: R raster fonts, V vector fonts, O OpenType fonts, T TrueType fonts |
name | may contain wildcards |
LISTFONTS
dumps a list of all matching fonts to standard output.
/C:
charset lets you specify the
character set to be supported. The default is 0, to list only fonts which
include Western (Roman) letters.
0 | ANSI (Western — the default) |
1 | don’t care |
2 | symbol |
128 | Shift JIS (Japanese) |
129 | Hangul (Korean) |
130 | Johab (Korean) |
134 | GB 2312 (simplified Chinese) |
136 | Big-5 (traditional Chinese) |
161 | Greek |
162 | Turkish |
163 | Vietnamese |
177 | Hebrew |
178 | Arabic |
186 | Baltic |
204 | Cyrillic (Russian) |
222 | Thai |
238 | Eastern Europe |
255 | OEM character set |
listfonts *black*
MINIMIZEALL
— Minimize or
restore all windows.
Syntax:
MINIMIZEALL
/U
/U | undo the previous MINIMIZEALL |
rem Minimize all windows for three seconds:
minimizeall & delay 3 & minimizeall /u
MKSC
— Create, modify, or
display a shortcut file.
Syntax: (to create or modify a shortcut file)
MKSC
linkfile
target /A:
args /B
x:
value /C:
comment /D:
directory /I:
iconfile /J:
index /K:
key /M:
mode /N:
flags /U:
level /Z
Syntax: (to display shortcut files)
MKSC
linkfile /F:
fields /N:
flags /P /S
linkfile | the shortcut file to create, change, or display |
target | the filename or object that the shortcut points to |
/A: args | command-line arguments to be passed to the target |
/B x: value | set various console properties |
/C: comment | a descriptive comment |
/D: directory | the default directory |
/F: fields | specify which information to display |
/I: iconfile | filename of an .EXE or .DLL file containing an icon |
/J: index | number of the icon in iconfile to use; 0 = the first |
/K: key | a hotkey which can be used to launch the shortcut |
/M: mode | the suggested window mode: Normal, MINimized, or MAXimized |
/N: flags | disable features; flags may include: |
C — disable highlighting (display mode only) | |
D — don’t canonicalize directory | |
E — suppress many error messages (display mode only) | |
H — don’t search into hidden subdirectories; only useful with /S | |
I — don’t canonicalize iconfile | |
J — don’t search into junctions; only useful with /S | |
T — don’t canonicalize target | |
Z — don’t search into system subdirectories; only useful with /S | |
/P | page output |
/S | recurse into subdirectories; only useful when displaying shortcuts |
/U: level | the UAC level: Normal or Elevated |
/Z | overwrite read-only files |
This command can be used for three different tasks: to create a new shortcut file, to modify an existing shortcut file, or to dump the contents of shortcut files to standard output.
Create a shortcut file:
You can create a new shortcut to a file or a folder; a TCC command, alias, or batch file; or one of a small number of Explorer objects. To create a shortcut, pass a filename for the new shortcut as the first argument, linkfile. The second argument, target, is required when creating a new shortcut; it specifies the file or object that the shortcut will open.
rem Create a shortcut to the calculator:
mksc "%@shfolder[16]\Calculator.lnk" "%windir\system32\calc.exe" /k:control-alt-=
Other kinds of files are legal too. If the file is a document, Windows will use the registered program to open it. You can even create a shortcut to a directory:
rem Create a shortcut to the Fonts folder:
mksc "%@shfolder[16]\Fonts.lnk" "%windir\Fonts"
To create a shortcut to an internal command, alias, or batch file, specify
"%_cmdspec"
as the target. Set
args to either /C
or /K
followed by the desired command. (/C
causes TCC to close
immediately after running the command; /K
keeps it open after the
command finishes.) For instance, to create a shortcut which runs the command
TIME /S
, you might use:
rem Create a shortcut to run TIME /S command:
mksc "%@shfolder[16]\Sync System Time.lnk" "%_cmdspec" /a:"/c time /s" /m:min
MKSC
also recognizes a short list of Explorer objects. You can
use any of the following as target:
<Desktop> | the desktop |
<Computer> | the list of drives |
<Documents> | the default save location for many applications |
<Music> | the suggested save location for music files |
<Pictures> | the suggested save location for graphics files |
<Video> | the suggested save location for video files |
<Printers> | the list of printers |
<Network> | Network Neighborhood; LAN locations |
<Connections> | network interfaces |
<Recycle Bin> | deleted-but-recoverable files |
<Control Panel> | Windows configuration utilities |
<Recent> | list of shortcuts to recently-opened files |
<SendTo> | Explorer’s list of send-to locations |
Note that all of the above must be quoted to protect the angle brackets. See Objects Supported for more information.
rem Create a shortcut to My Computer:
mksc "%@shfolder[16]\My Computer.lnk" "<Computer>"
The linkfile should
normally end in .LNK. If you do not specify an
extension, MKSC
will supply the extension by default. Directory
aliases are supported in linkfile.
Target should name a
file, directory, or one of the Explorer objects listed above. Directory
aliases are supported, and the filename is automatically canonicalized
(“truenamed”) when the shortcut file is created. If the
target is not qualified at all — if it
has no drive letter or directory — the plugin will search the path
for a matching file. You can bypass canonicalization and the path search with
/NC
, which stores a non-canonical filename; doing this also
disables directory aliases in target.
Canonicalization will also be skipped if the target
begins with a percent sign followed by a letter.
/A:
args
specifies the command-line arguments for a target program. Different programs
support different arguments, and some ignore them altogether. See the
program’s documentation for information about its command-line options.
/AX:
args
works like /AX:
, but supports the use of C-style
character escapes in the string. If you need problematic characters like
double quotes or backquotes in the arguments list, you can use /AX:
with escapes like \q
or \k
. Note that any backslashes
in the arguments must be doubled.
/C:
comment
specifies a descriptive comment to be stored in the shortcut file. Explorer
can display this comment in a tooltip when you hover the mouse pointer over the
shortcut icon.
/CX:
comment
works like /C:
, but expands C-style character escapes
in the comment. If you need a backslash in the comment, you must double it.
/D:
directory
sets the starting directory for the target program. Some programs use this as
a default directory; others ignore it. The directory is
canonicalized, and directory aliases are supported. You can use /ND
to store a non-canonicalized filename; this will also disable directory aliases
in directory. If you give a
directory of *
, MKSC
will choose an appropriate directory based on target:
the parent directory if target is a filename,
target itself if it names a directory, and nothing
if target names an object. If the
directory begins with a percent sign followed by
a letter, canonicalization will be disabled automatically. If the
directory is a ~
or begins with
~\
, the tilde will automatically be replaced with the string
%USERPROFILE%
; this also will disable canonicalization.
/M:
mode
sets the default window state for the target program. Most programs will honor
this option, but a few set their own window size at startup; /M
won’t appear to affect these. Mode should
be one of Normal
, MINimized
, or MAXimized
;
case is not significant, and only the letters shown in uppercase are required.
/K:
key
specifies a hotkey which can be used to launch the target
with a keystroke. The exact requirements for this feature to work don’t
seem to be documented anywhere. For best results, I suggest that (1) the
shortcut file should be created in the user’s desktop directory; and (2)
the hotkey should be in the form Control-Alt-
letter,
Control-Alt-
digit, or
Control-Alt-Num
digit. See
Hotkeys for a list of the hotkey names supported by this
command; note that some of them differ from the names used by
KEYSTACK
. You can also specify a hotkey of None
,
which will remove any hotkey associated with the shortcut.
/I:
iconfile and
/J:
index specify the icon which
Explorer uses to display the shortcut. When creating a shortcut, you should
specify both or neither. When modifying an existing shortcut file, you can use
/J:
index alone to select a
different icon within the same iconfile.
/U:
level
sets the UAC level for the shortcut; level is
either Normal
or Elevated
(only the first letter is
significant). If it’s not specified, the default level is Normal. This
option has no effect under Windows XP.
MKSC
allows you to set or change many of the console properties
stored in a shortcut. Setting console properties for things that don’t run
in a console window is possible, but pointless. Console properties options all
start with /B
.
/BB:
n sets the console font’s
weight. n is 400 for normal, 700 for bold.
/BF:
font set the console font’s
name. Quote it if it contains spaces. If font
doesn’t match the name of an actual font, or if it isn’t suitable for use
in a console window, Windows will substitute some other font at random —
generally the ugliest available.
/BG:
x,
y
sets the desired size of the console font. x is the
width, and y is the height. If you’re using a
TrueType font, the width is not relevant and may be set to 0.
/BB
, /BF
, and /BG
all affect the console
font. If you want to set one of them, it’s probably a good idea to set all three.
/BA:
n sets the console’s
auto-position option. 0 disables auto-positioning; the console window will open
at the screen position specified in the “Layout” tab. 1 allows the
system to position the window automatically; the coordinates in the “Layout”
tab will be ignored.
/BC:
n sets the cursor size.
n is a percentage, 10 to 100. (This setting does not
affect TCC, which sets its own cursor size.)
/BD:
n set the console’s default
colors. You may specify the new value either as decimal, or hexadecimal with a
leading 0x
. The usual value is 0x0007, white on black.
/BH
n:
color
lets your redefine the console palette. n is the color index,
0 (black) through 15 (bright white). Color is a
W3C color name or an RGB value. You may give a name, or
a three- or six-digit hex value preceded by a number sign. For example, you could use
either /BH7:ORANGE
or /BH7:#FFA500
to redefine ‘white’
as orange.
You can give more than one color name, separated by commas or semicolons, to define
multiple consecutive colors. For example, /BH0:#000,#009,#090,#099,#900
would set values for black, blue, green, cyan, and red.
/BI:
n sets the console’s
insert mode. 0 disables insert (the console defaults to overtype mode); 1
enables it. (This setting does not affect TCC, which has its own default edit
mode settings.)
/BO:
x,
y
sets the console window’s starting screen position (its origin). Using this
option automatically disables the auto-position option, as if /BA:0
had been specified.
/BP:
n set the console’s
“popup” colors. You may specify the new value either as
decimal, or hexadecimal with a leading 0x
. (TCC does not use these
colors for anything; CMD.EXE uses them for its command history popup.)
/BQ:
n sets the console’s
QuickEdit mode. 0 disables QuickEdit, 1 enables it.
/BS:
x,
y
sets the size of the console scrollback buffer. x is the
width and y is the height.
/BS
also has an optional third argument to set the height of the visible window:
/BS:
x,
y,
h.
The height h must be between 5 and 100, and not greater than
the screen buffer height y. If you do not specify
h, the plugin will supply a reasonable value.
Modify a shortcut file:
To modify an existing shortcut file, the syntax is the same, except that the target parameter is optional. You don’t have to specify a target when changing an existing shortcut, and you probably shouldn’t.
Display shortcut files:
To display the contents of shortcut files, specify
only a linkfile. It may contain wildcards to dump
multiple shortcut files, and you can use /S
to recurse into
subdirectories. To prevent MKSC
from searching into junctions,
use /NJ
; to skip hidden subdirectories, use /NH
; to
skip system subdirectories, use /NZ
. If
linkfile names a directory, all
.LNK files in that directory will be shown.
You can use /F:
fields to choose
which fields to display. Fields is letters:
T | the link target |
A | command-line arguments |
D | startup directory |
K | hotkey |
C | comment |
M | start mode |
I | icon filename and index |
U | UAC level (only under Vista and later) |
N | normal (default) fields; short for TADKCMIU |
B | console screen buffer info, if available |
F | console font info, if available |
H | the console palette, if available |
If no fields are specified, the default is TADKCMIU
.
/P
causes MKSC
to pause after each screenful
of data.
mksc /s "%@shfolder[23]"
• Note: You must quote any argument containing spaces, angle brackets, or any other special characters.
See also: the @SCINFO
function, which returns values from a shortcut file, and
the @SHFOLDER
function, which returns
the pathname to a folder.
SCREENRES
— Display or change the screen resolution.
Syntax:
SCREENRES
/A /C:
bits /D /L /M:
monitor /NR /Q /R:
rate /X:
width /Y:
height
/A | show resolution for all monitors |
/C: bits | change the color depth |
/D | don’t save new settings in the registry |
/L | list available display modes |
/M: monitor | zero-based number of the monitor to display or change |
/NR | no report on a successful change |
/Q | do not prompt for confirmation when making changes |
/R: rate | change the refresh rate |
/X: width | change the display width |
/Y: height | change the display height |
Specifying any of /C:
bits, /R:
rate, /X:
width, or
/Y:
height will change the display settings. If you use /X:
width
you should also supply a /Y:
height, and vice versa. If you don’t
supply a /M:
monitor, the primary monitor will be changed.
If you make any changes to the display settings without specifying
/Q
, SCREENRES
will prompt you to enter a random
three-digit number to verify that you can still read the display. If you
don’t enter the same number within fifteen seconds, the display will
revert to its previous settings.
rem Set the primary monitor to 1280 by 1024 pixels:
screenres /x:1280 /y:1024
Option /L
will cause SCREENRES
to list available
display modes, instead of setting or displaying the current mode. The primary
monitor will be shown by default, unless you specify a different one with
/M:
monitor or use /A
to
list available modes for all monitors. If you combine /L
with any
of /X:
width, /Y:
height,
/C:
bits, or /R:
rate,
the list will only include modes matching the specified values. Note that just
because a display mode is listed as available does not mean that your monitor
is capable of displaying it!
See also: the @SCREENRES
function,
which returns information about the current display settings.
SCRNSAVER
— Display or change the screen saver settings.
Syntax:
SCRNSAVER
/A /D /E /N /S /T:
timeout /U
filename
/A | activate (run) the screen saver |
/D | disable the screen saver |
/E | enable the screen saver |
/N | no screen saver |
/S | secure (show login screen when the screen saver is dismissed) |
/T: timeout | idle time before the screen saver is started |
/U | unsecure (no login screen) |
filename | the screen saver filename; must end in .SCR |
If the filename does not have a path, the Windows system directory will be assumed. If it does not have an extension, .SCR will be appended automatically.
The timeout may be specified either in seconds,
or in mm:
ss format (or even
hh:
mm:
ss
for extremely long delays.) /T:300
is the same as /T:5:00
.
The maximum timeout value is 24 hours (86400 seconds).
If /A
is specified, the selected screen saver will be run after
any settings changes.
rem Run "Mystify" after 5 minutes of inactivity:
scrnsaver /e /t:5:00 mystify.scr
See also: the _SSVRNAME
and
_SSVRTIME
variables, which return the
current screen saver filename and timeout respectively.
SETFOCUS
— Give focus to the
specified window.
Syntax:
SETFOCUS
/C:
class /Q "
title"
/C: class | the window class name |
/Q | quietly |
title | the caption of the window to focus |
The title and class names may contain wildcards. If no title or class is specified, TCC will be given the focus.
Note that the title must be the last option on the command line.
Under some versions of Windows, “stealing” the focus from another window is subject to privilege levels. You may not be able to move the focus away from an administrative window such as the Registry Editor unless TCC is also running with administrative privileges.
SETMOUSEPOS
— Move the
mouse pointer to the specified screen coordinates.
Syntax:
SETMOUSEPOS
/Q /X:
x /Y:
y
/Q | quietly |
/X: x | the new horizontal position |
/Y: y | the new vertical position |
This command might be useful on a kiosk system which just displays web pages. If you don’t want the mouse cursor to be visible, move it to the lower-right corner with:
setmousepos /x:%@dec[%@screenres[,X]] /y:%@dec[%@screenres[,Y]]
The range of valid coordinates will depend on your screen size.
SHELLVERB
— Display or change
file associations and shell verbs.
Syntax:
SHELLVERB
/C /D:
string /M:
string /Q /R /S /T:
ftype /U /V:
verb /Z
ftype=
command
/C | replace any safechars in command with ASCII |
/D: string | descriptive name for the file type; shown in Explorer |
/M: string | descriptive name for the verb, used in menus |
/Q | do it quietly |
/R | remove file association or shell verb |
/S | display or change system-wide settings (the default) |
/T: filetype | specify the file type; only useful when ftype is an extension |
/U | display or change per-user settings |
/V: verb | the shell verb to display or change |
/Z | make the specified verb the default |
ftype | may be either an extension or a descriptive file type |
command | the command Windows should execute for the specified verb |
This command can display or change file associations and “shell
verbs” — the actions that Explorer can perform on a file. It
can be used as a combination of the ASSOC
and FTYPE
commands, but it can also display and customize file types in ways that
ASSOC
and FTYPE
cannot.
Windows Explorer uses a two-layer approach in determining how to work with a
file. The extension (the final part of the filename, everything after
the last period) is mapped to a file type, and the file type in turn
has various actions associated with it. For example, a file named
ReadMe.txt has the extension TXT,
which maps to the file type “txtfile”. The file type txtfile then
has certain actions defined — Open, Print. This command’s
ftype parameter may be either an extension
(beginning with a period), or else a descriptive file type. If
ftype is an extension, SHELLVERB
will automatically use the associated file type, or else create a new one.
Complicating matters further, Windows actually keeps multiple sets of
file-association info: one set of system-wide file associations which applies
to all users; and a per-user set of associations for each user, allowing him
to override the system-wide settings. SHELLVERB
can list or
change either set. Specify /S
to work with the system-wide file
assocations, or /U
to use the current user’s personal
assocations. You can use both together. If you don’t specify either
/S
or /U
, /S
is the default.
To display the file type and actions associated with an extension, just type
SHELLVERB
followed by the extension. Note that the extension
should begin with a period:
shellverb .txt
You can also use wildcards in the extension:
shellverb .htm*
If the ftype does not begin with a period, it’s interpreted as a file type instead. (Wildcards don’t work in this format.)
shellverb regfile
Notice that most file types have an “Open” verb. This verb is
used to open, edit, or play a file, typically by double-clicking on its icon.
You can use the =
command syntax to
set the command used to open a file. For example, if we want all
.ZZZ files to open in Notepad:
shellverb .zzz=notepad.exe "%%1"
Note the use of "%1"
as a placeholder for the filename in the
command string. (Double the percent sign to prevent TCC’s variable
expansion from expanding the variable reference before the SHELLVERB
command gets it.)
You can set the command for other verbs with the /V:
option:
shellverb /v:print .zzz=notepad.exe /p "%%1"
If you don’t specify /V:
verb,
the Open verb will be used by default. If you specify /V
(without
any verb), the default verb
will be used; this is usually Open, but not always.
If you examine the .REG extension with
shellverb .reg
you’ll see that the Open verb has an alternate name: Mer&ge. I
call this the verb’s “menu name”. This is generally done for
one of two reasons: to give the command a more intuitive name (Merge instead
of Open), or to set an accelerator key (the ampersand makes the G an
accelerator key). You can set the menu name for a verb using the /M:
option:
shellverb /v:Open /m:"&Edit" .zzz=notepad.exe "%%1"
creates an Open verb for .ZZZ files, which will appear as Edit (hotkey E) in the context menu.
The default verb, the one used when double-clicking on a file’s
icon, is marked with an asterisk. Usually, but not always, this is Open. You
can set the default verb with /Z
:
shellverb /z /v:edit .reg
Now double-clicking on a .REG file will open
it in Notepad, rather than trying to install it using RegEdit. /Z
requires that you specify the verb to make the default with /V:
;
in fact you can combine the two options:
shellverb /z:edit .reg
You can set the descriptive name for a file type (shown in Explorer) with
/D:
string. Use /D:
alone, without a string, to remove the descriptive
name. Note that new or changed descriptions usually don’t take effect
until Explorer restarts — after you reboot or log out.
shellverb /d:"Configuration file" .cfg
When ftype is an extension (i.e.,
when it begins with a period), SHELLVERB
automatically supplies
the appropriate file type, either using the file type already associated with
that particular extension, or else creating a file type from the extension.
For example, if you supply a ftype of
.ZZZ and there is no file type associated with that
extension, then SHELLVERB
will create a new file type “zzzfile”.
This is usually the desired behavior. However, on rare occasion you may want to
associate an extension with some other file type;
/T:
filetype allows this. /T
essentially replicates the functionality of the ASSOC
command;
however, you can combine it with other options to, say, associate an extension
with a file type, set a description for the new file type, and define an Open
verb, all in one command.
shellverb /t:TCC.Batch .btm
To remove an extension’s association with a file type:
shellverb /r .zzz
To remove a verb from a file type:
shellverb /r /v:print .zzz
To remove a file type altogether: (Warning — this deletes an entire tree from the registry, and cannot be undone!)
shellverb /r zzzfile
Note that SHELLVERB /R ZZZFILE
deletes a file type and all the
information associated with it (the description and all its defined verbs),
while SHELLVERB /R .ZZZ
merely breaks the connection between the
extension and the file type. Usually the latter is to be preferred.
If you use /R
to remove something, you will be prompted first.
Use /Q
to suppress the prompt and perform the action immediately.
/Q
also prevents the report that you get after making other
changes.
If you specify /C
, any characters in the
command in the range U+FF01 through U+FF5E
will be replaced with ASCII equivalents. For example, you can include an
%@CHAR[0XFF05]
in the command, and
/C
will translate it to a percent sign. This can be handy when
copying shell verbs using the @SHELLVERB
function.
Putting it all together, we can define a new file type for .BTM files, describe it, and define some basic shell verbs:
rem Create a new file type for .BTM files:
shellverb /t:btmfile /d:"Take Command batch file" .btm
rem Create an Open verb to run .BTM files:
shellverb /m:"R&un" .btm="%_cmdspec" /c "%%1"
rem Create an Edit verb to edit them like .TXT files:
shellverb /c /v:Edit .btm=%@shellverb[.txt,open,128]
rem Create a Print verb to print them using Notepad:
shellverb /v:Print .btm=notepad.exe /p "%%1"
rem If BDEBUGGER is available, create a Debug verb:
iff isinternal bdebugger then
shellverb /v:Debug /m:"Debu&g" .btm="%_cmdspec" /c bdebugger "%%1"
endiff
See also: the @SHELLVERB
function, which returns the command string for the given shell verb.
SOUNDVOL
— Display or change the
master sound volume.
Syntax:
SOUNDVOL
/B /M /O /Q /U
volume
/B | beep after changing settings |
/M | mute the sound |
/O | display the current settings on-screen |
/Q | quietly |
/U | unmute the sound |
volume | new volume level, 0 — 100 |
If /Q
is not specified, the current volume will be displayed.
rem Crank it all the way up:
soundvol 100
See also: the _VOLUME
and
_MUTE
variables, which return the current
master sound volume and mute state respectively.
UISTUFFHELP
— Open the
UIStuff plugin help file.
Syntax:
UISTUFFHELP
/C /F /S /S:
text /V
topic
/C | select the ‘Contents’ tab |
/F | select the ‘Favorites’ tab |
/S | select the ‘Search’ tab |
/S: text | select the ‘Search’ tab and search for text |
/V | show detailed plugin version info |
topic | the page to display |
The UISTUFFHELP
command will locate and open this
plugin’s help file. In most cases, the internal HELP
command, and the F1 and Ctrl-F1 keys, will
be more convenient. The main advantage of this command is that it can be
used to open the help file to any desired topic, not only to the names of
commands, functions, and variables.
Note that any /C
/F
or /S
must precede
any topic on the command line. (This command has
a very simple-minded parser.)
WALLPAPER
— Display or change the desktop wallpaper.
Syntax:
WALLPAPER
/B /C /N /R /S /T
filename
/B | best style |
/C | center the wallpaper |
/N | no wallpaper |
/R | recursive |
/S | stretch the wallpaper |
/T | tile the wallpaper |
filename | a graphics file to display on the desktop |
The filename specifies a graphics file with an
extension of .BMP, .JPG,
.JPEG, .PNG,
.GIF, .TIF, or
.TIFF. Alternatively, it may name a directory
which contains graphics files of those types, in which case WALLPAPER
will pick one at random. Directory aliases are supported in
filename.
If there is a bitmap on the clipboard, you can use it as wallpaper by
specifying a filename of CLIP:
/B
chooses a style automatically, based on the image size and the
primary monitor’s resolution. Small images (not more than a quarter of
the screen width or a third of the screen height) will be tiled. Larger images
(at least 60% of the screen width) with a similar width/height ratio to the
screen’s will be stretched to fit. All others will be centered.
/N
removes any wallpaper.
If no arguments are specified, the current filename will be displayed.
rem Tile the background with "Santa Fe Stucco.bmp":
wallpaper /t "c:\windows\santa fe stucco.bmp"
rem Pick a random image file from the user's Pictures folder:
wallpaper /b /r "%@shfolder[39]"
• Note: Setting the wallpaper under Windows Vista or Windows 7 will disable any slide show.
See also: the _WALLPAPER
and _WALLSTYLE
variables, which return
the current wallpaper filename and display style respectively.
New Functions:
@FIRSTFONT
— Returns the
name of the first matching font.
Syntax:
%@FIRSTFONT[
name,
charset,
type,
pitch-and-family]
name | may contain wildcards |
charset | see below |
type | one of: R raster fonts, V vector fonts, O OpenType fonts, or T TrueType fonts |
pitch-and-family | one of: R Roman, S Swiss, M modern, H hand (script), D decorative, or N no family; |
and/or one of: F fixed pitch, or V variable pitch |
If no matching font is found, @FIRSTFONT
returns an empty
string. If a matching font is found, its name is returned, and you can continue
enumerating fonts with @NEXTFONT
.
Supported charset values include:
0 | ANSI (Western — the default) |
1 | don’t care |
2 | symbol |
128 | Shift JIS (Japanese) |
129 | Hangul (Korean) |
130 | Johab (Korean) |
134 | GB 2312 (simplified Chinese) |
136 | Big-5 (traditional Chinese) |
161 | Greek |
162 | Turkish |
163 | Vietnamese |
177 | Hebrew |
178 | Arabic |
186 | Baltic |
204 | Cyrillic (Russian) |
222 | Thai |
238 | Eastern Europe |
255 | OEM character set |
rem List available script fonts:
set font=%@firstfont[,,,h]
do while defined font
echo %font
set font=%@nextfont[]
enddo
@IMGCOLOR
— Returns the
color of a pixel in an image file.
Syntax:
%@IMGCOLOR[
filename,
position]
%@IMGCOLOR[
filename,
x,
y]
filename | the image file to examine |
position | which pixel’s color to return: |
1 — the top left | |
2 — the top center | |
3 — the top right | |
4 — the center left | |
5 — the center of the image | |
6 — the center right | |
7 — the bottom left | |
8 — the bottom center | |
9 — the bottom right | |
x, y | the coordinates of the pixel to return |
The filename specifies a graphics file with an extension of .BMP, .JPG, .JPEG, .PNG, .GIF, .TIF, or .TIFF. Directory aliases are supported in filename.
If you do not specify a position or
x,y coordinates, the
default is to grab the pixel at the center. The x
and y values may be decimal, or hexadecimal with
a leading 0x
. If x is negative, it
is interpreted as pixels from the right edge; a negative y
is pixels up from the bottom.
The selected pixel’s color is returned as a six-digit hexadecimal
value, #
rrggbb; for example,
#5b6d85
. It can be used as the color
argument to the BGCOLOR
command.
rem Set the background color to match the wallpaper:
if "%_wallpaper" ne "*none*" bgcolor %@imgcolor["%_wallpaper"]
See also: the BGCOLOR
command,
which sets the background color; the @RGBCOMPL
function, which returns a complementary color; and the
@RGBLUM
function, which returns a luminance
value for a given color.
@NEXTFONT
— Returns further
matching font names.
Syntax:
%@NEXTFONT[]
This function continues an enumeration started with @FIRSTFONT
.
When there are no more matching fonts, @NEXTFONT
returns an empty
string.
@RGBCOMPL
— Returns a
complementary color.
Syntax:
%@RGBCOMPL[
color,
rotate]
color | may be specified as # rrggbb or as a W3C color name. |
rotate | degrees to rotate the color’s hue; defaults to 180 |
If you specify the color in hexadecimal with a
leading #
sign, it must be either three or six hex digits long.
If it’s three digits long, each digit is doubled; #8ac
is the
same as #88aacc
. Alternatively, you can use a leading 0x
and the rules above do not apply; the number of digits is not significant.
The input color is plotted on a color wheel,
and the color opposite (180° around, or according to rotate)
is returned. The resulting color is returned as a six-digit hexadecimal value,
#
rrggbb; for example,
#5b6d85
. It can be used as the color
argument to the BGCOLOR
command.
rem Set the background color to contrast with the wallpaper:
if "%_wallpaper" ne "*none*" bgcolor %@rgbcompl[%@imgcolor["%_wallpaper"]]
See also: the BGCOLOR
command,
which sets the background color; the _BGCOLOR
variable, which returns the current background color; and the
@IMGCOLOR
function, which returns a color
from a graphics file.
@RGBLUM
— Returns a
luminance value for a color.
Syntax:
%@RGBLUM[
color]
color | may be specified as # rrggbb or as a W3C color name. |
If you specify the color in hexadecimal with a
leading #
sign, it must be either three or six hex digits long.
If it’s three digits long, each digit is doubled; #8ac
is the
same as #88aacc
. Alternatively, you can use a leading 0x
and the rules above do not apply; the number of digits is not significant.
A luminance value from 0 (darkest) to 1000 (brightest) is returned. You can use this to pick a contrasting color. For example, if a background has a luminance of less than 500, white would make a good contrasting color for text; if it’s at least 500, then black would be a better choice.
The three color channels are given different weights: green is 58.7% of the luminance value, red is 29.9%, and blue is 11.4%.
rem Is yellow bright or dark?
if %@rgblum[yellow] ge 500 ( echo It's bright! ) else ( echo It's dark! )
See also: the _BGCOLOR
variable, which returns the current background color; and the
@IMGCOLOR
function, which returns a color
from a graphics file.
@SCINFO
— Returns values
from a shortcut file.
Syntax:
%@SCINFO[
filename,
field]
filename | the file to examine | |
field | which field to return: | |
0 | the target filename or object name (default) | |
1 | the command-line arguments | |
2 | the working directory | |
3 | the descriptive comment | |
4 | the hotkey | |
5 | the startup window mode | |
6 | the icon filename | |
7 | the icon index | |
8 | the UAC level | |
32 † | the width of the console screen buffer | |
33 † | the height of the console screen buffer | |
34 † | the width of the visible window | |
35 † | the height of the visible window | |
36 † | the console font name | |
37 † | the font width in pixels (may be 0 for TrueType fonts) | |
38 † | the font height in pixels | |
39 † | the font weight: 400 = normal, 700 = bold | |
40 † | the cursor size: 25 = small, 100 = large | |
41 † | QuickEdit mode: 0 = disabled, 1 = enabled | |
42 † | auto position window: 0 = disabled, 1 = enabled | |
43 † | insert mode: 0 = overstrike, 1 = insert | |
44 † | default console colors as hex, e.g. 0x0007 = white on black | |
45 † | console popup colors as hex, e.g. 0x00F5 = magenta on bright white | |
46 † | console window position (if auto position is disabled) as x, y |
† Console property. If the shortcut does not contain a console
properties block, @SCINFO
will return -1
.
The filename is required. Quote it if is contains commas or other special characters. Wildcards are not allowed, but directory aliases are supported.
If field is 0 or absent, @SCINFO
will attempt to return the shortcut’s target. The return value will be
quoted. It may be empty if the target is an object which the plugin
doesn’t recognize.
A field of 1, 2, or 3 returns the shortcut’s command-line arguments, working directory, or description, respectively. These return values are all quoted; any of them may return an empty string if the respective field is not defined in the shortcut.
A field of 4 returns the shortcut’s
hotkey. This value is not quoted. It will return None
if the
shortcut has no hotkey defined.
A field of 5 returns the shortcut’s
startup window mode. This value is not quoted; possible values are
Normal
, Maximized
, and Minimized
.
Values of 6 and 7 return the shortcut’s icon filename and offset, respectively. The filename will be quoted. If there is no icon, the filename will be empty and the index will be 0.
If field is 8, the shortcut’s UAC level
will be returned; possible values are Normal
and Elevated
.
(Under Windows XP and earlier, the value is always Normal
.) The
returned string is not quoted.
If you add 256 to the field number, the return string will not be automatically quoted. If you add 512, the return string will be escapified.
rem Read info from a shortcut file:
set shortcut="%userprofile\desktop\test.lnk"
set target=%@scinfo[%shortcut,0]
set args=%@scinfo[%shortcut,1]
set dir=%@scinfo[%shortcut,2]
See also: the MKSC
command, which creates,
modifies, or displays shortcut files.
@SCREENRES
— Returns the
current settings for the specified monitor.
Syntax:
%@SCREENRES[
monitor,
info]
monitor | zero-based number of the monitor to examine |
info | what to return: |
0 or I — all info in one long string | |
1 or X — screen width (pixels) | |
2 or Y — screen height (pixels) | |
3 or C — color depth (bits per pixel) | |
4 or R — refresh rate (Hz) | |
8 or T — horizontal and vertical only |
If you do not specify a monitor, the primary monitor will be examined by default.
Instead of a number, you may specify the info to return as a letter or word; only the first letter is significant.
rem Get display settings for the primary monitor:
set screenwidth=%@screenres[,1]
set screenheight=%@screenres[,2]
set screenbpp=%@screenres[,3]
See also: the SCREENRES
command, which
displays or changes the current screen resolution.
@SHELLVERB
— Returns the
command string for the specified shell verb.
Syntax:
%@SHELLVERB[
ftype,
verb,
flags]
ftype | either an extension or a descriptive file type |
verb | if omitted, the default verb is used |
flags | bitmapped: |
1 — user-specific file association | |
2 — systemwide file association | |
128 — map dangerous characters to SafeChars |
Verb must be the actual verb name, not its cosmetic or “menu” name.
If bit 7 of flags is set, the following characters in the command string will be replaced with high-order Unicode equivalents:
Character: | ASCII: | Remapped to: | |
---|---|---|---|
percent sign | % | 37 / 0x25 | U+FF05 |
ampersand | & | 38 / 0x26 | U+FF06 |
open parenthesis | ( | 40 / 0x28 | U+FF08 |
close parenthesis | ) | 41 / 0x29 | U+FF09 |
less-than sign | < | 60 / 0x3C | U+FF1C |
greater-than sign | > | 62 / 0x3E | U+FF1E |
open bracket | [ | 91 / 0x5B | U+FF3B |
close bracket | ] | 93 / 0x5D | U+FF3D |
caret | ^ | 94 / 0x5E | U+FF3E |
grave accent / backquote | ` | 96 / 0x60 | U+FF40 |
vertical bar | ¦ | 124 / 0x7C | U+FF5C |
If the extension, filetype, verb, or command string is unknown, this
function returns the string *ERROR*
.
See also: the SHELLVERB
command, which displays or changes file associations and shell verbs.
@SHFOLDER
— Returns the
full pathname of a Windows special folder.
Syntax:
@SHFOLDER[
n]
This function works much the same as the internal function of the same name.
However, it can accept the index n as decimal,
hexadecimal, or a descriptive CSIDL name. Also, error checking is tighter; if
you pass this @SHFOLDER
something it doesn’t understand, it
will complain.
Not all values of n refer to actual directories, and not all values are supported under all versions of Windows. If you pass a value which doesn’t work on your system, this function will return an empty string.
When using the symbolic names, case is not significant, spaces and
underscores are ignored, and you may omit the leading CSIDL_
;
“My Music” is equivalent to CSIDL_MYMUSIC.
Dec | Hex | Name | Returns: |
0 | 0x00 | CSIDL_DESKTOP | the desktop |
2 | 0x02 | CSIDL_PROGRAMS | the user’s “Programs” menu |
5 | 0x05 | CSIDL_PERSONAL | the user’s “Documents” folder |
6 | 0x06 | CSIDL_FAVORITES | the user’s “Favorites” folder |
7 | 0x07 | CSIDL_STARTUP | the user’s “Startup” programs folder |
8 | 0x08 | CSIDL_RECENT | shortcuts to the user’s recently opened files |
9 | 0x09 | CSIDL_SENDTO | the user’s “Send To” shortcuts |
11 | 0x0b | CSIDL_STARTMENU | the user’s Start menu |
13 | 0x0d | CSIDL_MYMUSIC | the user’s “Music” folder |
14 | 0x0e | CSIDL_MYVIDEO | the user’s “Videos” folder |
16 | 0x10 | CSIDL_DESKTOPDIRECTORY | the user’s Desktop folder |
19 | 0x13 | CSIDL_NETHOOD | the user’s network shortcuts |
20 | 0x14 | CSIDL_FONTS | the system fonts directory |
21 | 0x15 | CSIDL_TEMPLATES | the user’s templates folder |
22 | 0x16 | CSIDL_COMMON_STARTMENU | Start menu for all users |
23 | 0x17 | CSIDL_COMMON_PROGRAMS | “Programs” menu for all users |
24 | 0x18 | CSIDL_COMMON_STARTUP | “Startup” programs folder for all users |
25 | 0x19 | CSIDL_COMMON_DESKTOPDIRECTORY | Desktop folder for all users |
26 | 0x1a | CSIDL_APPDATA | the user’s application data folder |
27 | 0x1b | CSIDL_PRINTHOOD | the user’s printer shortcuts |
28 | 0x1c | CSIDL_LOCAL_APPDATA | the user’s local applications data |
29 | 0x1d | CSIDL_ALTSTARTUP | the user’s nonlocalized Startup folder |
30 | 0x1e | CSIDL_COMMON_ALTSTARTUP | nonlocalized Startup folder for all users |
31 | 0x1f | CSIDL_COMMON_FAVORITES | “Favorites” folder for all users |
32 | 0x20 | CSIDL_INTERNET_CACHE | the user’s Internet Explorer cache |
33 | 0x21 | CSIDL_COOKIES | the user’s Internet Explorer cookies |
34 | 0x22 | CSIDL_HISTORY | the user’s Internet Explorer history |
35 | 0x23 | CSIDL_COMMON_APPDATA | application data for all users |
36 | 0x24 | CSIDL_WINDOWS | the Windows directory |
37 | 0x25 | CSIDL_SYSTEM | the Windows system directory |
38 | 0x26 | CSIDL_PROGRAM_FILES | default location for applications |
39 | 0x27 | CSIDL_MYPICTURES | the user’s “Pictures” folder |
40 | 0x28 | CSIDL_PROFILE | the user’s profile directory |
41 | 0x29 | CSIDL_SYSTEMX86 | x86 system directory on x64 Windows |
42 | 0x2a | CSIDL_PROGRAM_FILESX86 | x86 applications on x64 Windows |
43 | 0x2b | CSIDL_PROGRAM_FILES_COMMON | shared application components |
44 | 0x2c | CSIDL_PROGRAM_FILES_COMMONX86 | shared x86 app components on x64 Windows |
45 | 0x2d | CSIDL_COMMON_TEMPLATES | templates folder for all users |
46 | 0x2e | CSIDL_COMMON_DOCUMENTS | documents folder for all users |
47 | 0x2f | CSIDL_COMMON_ADMINTOOLS | “Administrative tools” folder for all users |
48 | 0x30 | CSIDL_ADMINTOOLS | the user’s “Administrative tools” folder |
53 | 0x35 | CSIDL_COMMON_MUSIC | “Music” folder for all users |
54 | 0x36 | CSIDL_COMMON_PICTURES | “Pictures” folder for all users |
55 | 0x37 | CSIDL_COMMON_VIDEO | “Video” folder for all users |
56 | 0x38 | CSIDL_RESOURCES | the system resources directory |
59 | 0x3b | CSIDL_CDBURN_AREA | used for burning CDs |
New Variables:
_BGCOLOR
— Returns the desktop
background color.
Syntax:
%_BGCOLOR
The color will be returned as a six-digit hexadecimal number with a leading
#
sign.
rem Save the current background color:
set backcolor=%_bgcolor
See also: the BGCOLOR
command, which
sets or displays the background color; and the
_BGCOLORNAME
variable, which reports
it as a W3C color name if possible.
_BGCOLORNAME
— Returns the
desktop background color as a W3C color name.
Syntax:
%_BGCOLORNAME
If no matching name is found, the color will be returned in hexadecimal,
the same as _BGCOLOR
.
rem Save the current background color:
set backcolor=%_bgcolorname
See also: the BGCOLOR
command, which
sets or displays the background color; and the _BGCOLOR
variable, which reports it as a hexadecimal number.
_BROWSER
— Returns the
filename of the default web browser.
Syntax:
%_BROWSER
The filename will be returned in double quotes. On any error, this function returns an empty string.
rem Make a shortcut to open Google in the default browser:
mksc "%@shfolder[16]\Google.lnk" "%_browser" /a:"https://www.google.com/"
_DEFAUDIOOUT
— Returns the name
of the current default audio output device.
Syntax:
%_DEFAUDIOOUT
The returned name will probably contain spaces and maybe weirder stuff, so it might be a good idea to quote it.
rem Save the current setting:
set oldaudioout="%_defaudioout"
rem ...and restore it later:
defaudioout %oldaudioout
• Note: This variable requires Windows Vista or later; it will not work in Windows XP.
See also: the DEFAUDIOOUT
command, which displays or changes the default audio output device.
_MOUSEX
— Returns the current
horizontal position of the mouse pointer.
Syntax:
%_MOUSEX
This variable might be useful with SETMOUSEPOS
if you want to move the mouse pointer relative to its current position.
The range of possible return values depends on your monitor size.
_MOUSEY
— Returns the current
vertical position of the mouse pointer.
Syntax:
%_MOUSEY
This variable might be useful with SETMOUSEPOS
if you want to move the mouse pointer relative to its current position.
The range of possible return values depends on your monitor size.
_MUTE
— Returns the master
sound mute state.
Syntax:
%_MUTE
The value returned is 1
if the sound is muted, or 0
otherwise.
rem Check whether the audio is muted:
if %_mute == 1 echo The audio is muted!
See also: the SOUNDVOL
command, which
sets the master sound volume and mute state; and the
_VOLUME
variable, which returns the
current volume.
_MUTED
— Returns the master
sound mute state.
Syntax:
%_MUTED
The value returned is 1
if the sound is muted, or 0
otherwise.
• Note: This is the old name of the
_MUTE
variable, retained for backward
compatibility with older versions of this plugin. Please use
_MUTE
instead. _MUTED
may
disappear in future versions of UIStuff.
_SAFEMODE
— Indicates
whether Windows was started in safe mode.
Syntax:
%_SAFEMODE
The documented return values are:
0 | Normal boot |
1 | Clean boot |
2 | Clean boot with network support |
_SOUNDVOL
— Returns the
master sound volume level.
Syntax:
%_SOUNDVOL
The value returned is in the range 0 through 100.
• Note: This is the old name of the
_VOLUME
variable, retained for backward
compatibility with older versions of this plugin. Please use
_VOLUME
instead. _SOUNDVOL
may disappear in future versions of UIStuff.
_SSVRNAME
— Returns the
filename of the current screen saver.
Syntax:
%_SSVRNAME
If no screen saver is defined, the value returned is *None*
. Note
that the returned filename will be quoted.
rem Get the current screen saver filename:
set screensaver=%_ssvrname
See also: the SCRNSAVER
command, which
configures the screen saver; and the _SSVRTIME
variable, which returns the current screen saver timeout value.
_SSVRTIME
— Returns the
current screen saver timeout, in seconds.
Syntax:
%_SSVRTIME
rem Get the current screen saver timeout:
set timeout=%_ssvrtime
See also: the SCRNSAVER
command, which
configures the screen saver; and the _SSVRNAME
variable, which returns the current screen saver filename.
_SSVRUP
— Indicates whether the
screen saver is currently running.
Syntax:
%_SSVRUP
The return value is 1
if the screen saver is currently running,
0
if it is not.
rem Check whether the screen saver is running:
if "%_ssvrup" == "1" echo You can't read this yet (%_time).
See also: the SCRNSAVER
command, which can be used to start the screen saver.
_VOLUME
— Returns the
master sound volume level.
Syntax:
%_VOLUME
The value returned is in the range 0 through 100.
rem Display the current master volume level:
echo The master sound volume is at %_volume%%%.
See also: the SOUNDVOL
command, which
sets the master sound volume and mute state; and the
_MUTE
variable, which returns the current
mute state.
_WALLPAPER
— Returns the
filename of the current desktop wallpaper.
Syntax:
%_WALLPAPER
If no wallpaper is defined, the value returned is *None*
. Note
that the returned filename will be quoted.
rem Get the current wallpaper filename:
set wallpaper=%_wallpaper
• Note: If the wallpaper was converted
or resized by the WALLPAPER
command, the
return value will be the converted filename, not the original source file.
See also: the WALLPAPER
command, which sets the current wallpaper; and the
_WALLSTYLE
variable, which reports the
current wallpaper style.
_WALLSTYLE
— Returns
the current wallpaper style.
Syntax:
%_WALLSTYLE
The style is returned as a string; possible values are Centered
,
Tiled
, or Stretched
.
rem Check whether the wallpaper is stretched:
if "%_wallstyle" == "Stretched" echo The wallpaper is stretched to fit.
See also: the WALLPAPER
command, which sets the current wallpaper; and the
_WALLPAPER
variable, which reports the
current wallpaper filename.
_WINOSVER
— Returns the
Windows version and build numbers.
Syntax:
%_WINOSVER
The version will be reported as
major.
minor.
build
with periods between components.
Reference Information:
W3C Color Names | used in BGCOLOR and _BGCOLORNAME |
Objects Supported | by the MKSC command |
Hotkeys | for the MKSC command |
Character Escapes | supported in the MKSC command |
Highlight Variable | Choose your colors. |
Startup Message | and how to suppress it |
Acknowledgments | some of my guides through the jungle |
Changes | What’s new? |
Status and Licensing |
W3C Color Names:
BGCOLOR
, _BGCOLORNAME
,
and MKSC
all use W3C color names, not the much shorter list
of VGA colors familiar from most TCC commands and functions. Here is a list of the color
names supported by this plugin, with their equivalent values. (Names containing “gray”
may be spelled using “grey” if you prefer.)
AliceBlue | 0xF0F8FF | LightSalmon | 0xFFA07A | ||
AntiqueWhite | 0xFAEBD7 | LightSeaGreen | 0x20B2AA | ||
Aqua | 0x00FFFF | LightSkyBlue | 0x87CEFA | ||
Aquamarine | 0x7FFFD4 | LightSlateGray | 0x778899 | ||
Azure | 0xF0FFFF | LightSteelBlue | 0xB0C4DE | ||
Beige | 0xF5F5DC | LightYellow | 0xFFFFE0 | ||
Bisque | 0xFFE4C4 | Lime | 0x00FF00 | ||
Black | 0x000000 | LimeGreen | 0x32CD32 | ||
BlanchedAlmond | 0xFFEBCD | Linen | 0xFAF0E6 | ||
Blue | 0x0000FF | Magenta | 0xFF00FF | ||
BlueViolet | 0x8A2BE2 | Maroon | 0x800000 | ||
Brown | 0xA52A2A | MediumAquaMarine | 0x66CDAA | ||
BurlyWood | 0xDEB887 | MediumBlue | 0x0000CD | ||
CadetBlue | 0x5F9EA0 | MediumOrchid | 0xBA55D3 | ||
Chartreuse | 0x7FFF00 | MediumPurple | 0x9370DB | ||
Chocolate | 0xD2691E | MediumSeaGreen | 0x3CB371 | ||
Coral | 0xFF7F50 | MediumSlateBlue | 0x7B68EE | ||
CornflowerBlue | 0x6495ED | MediumSpringGreen | 0x00FA9A | ||
Cornsilk | 0xFFF8DC | MediumTurquoise | 0x48D1CC | ||
Crimson | 0xDC143C | MediumVioletRed | 0xC71585 | ||
Cyan | 0x00FFFF | MidnightBlue | 0x191970 | ||
DarkBlue | 0x00008B | MintCream | 0xF5FFFA | ||
DarkCyan | 0x008B8B | MistyRose | 0xFFE4E1 | ||
DarkGoldenrod | 0xB8860B | Moccasin | 0xFFE4B5 | ||
DarkGray | 0xA9A9A9 | NavajoWhite | 0xFFDEAD | ||
DarkGreen | 0x006400 | Navy | 0x000080 | ||
DarkKhaki | 0xBDB76B | OldLace | 0xFDF5E6 | ||
DarkMagenta | 0x8B008B | Olive | 0x808000 | ||
DarkOliveGreen | 0x556B2F | OliveDrab | 0x6B8E23 | ||
DarkOrange | 0xFF8C00 | Orange | 0xFFA500 | ||
DarkOrchid | 0x9932CC | OrangeRed | 0xFF4500 | ||
DarkRed | 0x8B0000 | Orchid | 0xDA70D6 | ||
DarkSalmon | 0xE9967A | PaleGoldenrod | 0xEEE8AA | ||
DarkSeaGreen | 0x8FBC8F | PaleGreen | 0x98FB98 | ||
DarkSlateBlue | 0x483D8B | PaleTurquoise | 0xAFEEEE | ||
DarkSlateGray | 0x2F4F4F | PaleVioletRed | 0xDB7093 | ||
DarkTurquoise | 0x00CED1 | PapayaWhip | 0xFFEFD5 | ||
DarkViolet | 0x9400D3 | PeachPuff | 0xFFDAB9 | ||
DeepPink | 0xFF1493 | Peru | 0xCD853F | ||
DeepSkyBlue | 0x00BFFF | Pink | 0xFFC0CB | ||
DimGray | 0x696969 | Plum | 0xDDA0DD | ||
DodgerBlue | 0x1E90FF | PowderBlue | 0xB0E0E6 | ||
FireBrick | 0xB22222 | Purple | 0x800080 | ||
FloralWhite | 0xFFFAF0 | Red | 0xFF0000 | ||
ForestGreen | 0x228B22 | RosyBrown | 0xBC8F8F | ||
Fuchsia | 0xFF00FF | RoyalBlue | 0x4169E1 | ||
Gainsboro | 0xDCDCDC | SaddleBrown | 0x8B4513 | ||
GhostWhite | 0xF8F8FF | Salmon | 0xFA8072 | ||
Gold | 0xFFD700 | SandyBrown | 0xF4A460 | ||
Goldenrod | 0xDAA520 | SeaGreen | 0x2E8B57 | ||
Gray | 0x808080 | Seashell | 0xFFF5EE | ||
Green | 0x008000 | Sienna | 0xA0522D | ||
GreenYellow | 0xADFF2F | Silver | 0xC0C0C0 | ||
Honeydew | 0xF0FFF0 | SkyBlue | 0x87CEEB | ||
Hotpink | 0xFF69B4 | SlateBlue | 0x6A5ACD | ||
IndianRed | 0xCD5C5C | SlateGray | 0x708090 | ||
Indigo | 0x4B0082 | Snow | 0xFFFAFA | ||
Ivory | 0xFFFFF0 | SpringGreen | 0x00FF7F | ||
Khaki | 0xF0E68C | SteelBlue | 0x4682B4 | ||
Lavender | 0xE6E6FA | Tan | 0xD2B48C | ||
LavenderBlush | 0xFFF0F5 | Teal | 0x008080 | ||
LawnGreen | 0x7CFC00 | Thistle | 0xD8BFD8 | ||
LemonChiffon | 0xFFFACD | Tomato | 0xFF6347 | ||
LightBlue | 0xADD8E6 | Turquoise | 0x40E0D0 | ||
LightCoral | 0xF08080 | Violet | 0xEE82EE | ||
LightCyan | 0xE0FFFF | Wheat | 0xF5DEB3 | ||
LightGoldenrodYellow | 0xFAFAD2 | White | 0xFFFFFF | ||
LightGray | 0xD3D3D3 | WhiteSmoke | 0xF5F5F5 | ||
LightGreen | 0x90EE90 | Yellow | 0xFFFF00 | ||
LightPink | 0xFFB6C1 | YellowGreen | 0x9ACD32 |
Objects Supported:
These are the Explorer objects explicitly supported in the target
parameter to the MKSC
command:
<Desktop> | the desktop |
<Computer> | the list of drives |
<Documents> | the default save location for many applications |
<Music> | the suggested save location for music files |
<Pictures> | the suggested save location for graphics files |
<Video> | the suggested save location for video files |
<Common Documents> | the suggested location for shared documents |
<Common Music> | the suggested location for shared music files |
<Common Pictures> | the suggested location for shared graphics files |
<Common Video> | the suggested location for shared video files |
<Printers> | the list of printers |
<Network> | Network Neighborhood; LAN locations |
<Connections> | network interfaces |
<Recycle Bin> | deleted-but-recoverable files |
<Control Panel> | Windows configuration utilities |
<Recent> | list of shortcuts to recently-opened files |
<SendTo> | Explorer’s list of send-to locations |
<Search> | the Windows file-search utility |
<Help and Support> | Help and Support Center |
<Run...> | Explorer’s mini-command line |
<E-mail> | the registered email application |
<Set Program Access and Defaults> | configure default applications |
Note that all of the above must be quoted to protect the angle brackets.
If you supply a name in angle brackets and it doesn’t match any of the
above, MKSC
will search for items with a matching display name in:
(1) Control Panel, (2) Administrative Tools, (3) Printers, and
(4) Windows’s “Constant Special Item ID List”,
in that order.
Hotkeys:
These are the key names recognized by the MKSC
command. Be aware that they differ somewhat from the key names used by the
KEYSTACK
command. In particular, MKSC
distinguishes between the number keys on the numeric keypad, and those above
the alphabetic keys.
Modifier keys: use one or more of these before a named key. Case is not significant. Modifiers listed on the same line are equivalent.
Control- | Ctrl- | C- | the Ctrl key | |
Alt- | A- | the Alt key | ||
Shift- | S- | the Shift key |
Named keys. Case is not significant. Some have two names; names on the same line are equivalent.
Name | Alternate name | Comments | |
A — Z | letter keys | ||
0 — 9 | number keys on the top row | ||
Num0 — Num9 | numbers on the numeric keypad when NumLock is on | ||
Backspace | Bksp | ||
Tab | not recommended | ||
Enter | Return | not recommended | |
Esc | not recommended | ||
PageUp | PgUp | also 9 on the keypad when NumLock is off | |
PageDown | PgDn | also 3 on the keypad when NumLock is off | |
Home | also 7 on the keypad when NumLock is off | ||
End | also 1 on the keypad when NumLock is off | ||
Left | also 4 on the keypad when NumLock is off | ||
Right | also 6 on the keypad when NumLock is off | ||
Up | also 8 on the keypad when NumLock is off | ||
Down | also 2 on the keypad when NumLock is off | ||
Insert | Ins | also 0 on the keypad when NumLock is off | |
Delete | Del | also . on the keypad when NumLock is off | |
Num* | * | * on the numeric keypad | |
Num+ | | + on the numeric keypad | |
Num- | | - on the numeric keypad | |
Num/ | | / on the numeric keypad | |
F1 — F12 | function keys | ||
; | Semicolon | ||
= | Equals | ||
, | Comma | ||
- | Minus | ||
. | Period | ||
/ | Slash | the key with the question mark on U.S. keyboards | |
Grave | ` | the key with the swung dash on U.S. keyboards | |
[ | LeftBracket | ||
] | RightBracket | ||
\ | Backslash | ||
' | Apostrophe | ||
Space | Spacebar | not recommended |
• Note: Some key combinations are reserved by Windows, and others may not be recognized. Also, while it may be possible to use a named key without any modifiers, it’s probably a Bad Idea.
Character Escapes:
The MKSC
command recognizes these escape sequences:
Code: | Expands to: | Example: |
---|---|---|
\a | ASCII BEL character (0x07) | |
\b | ASCII backspace (0x08) | |
\c | comma | |
\e | ASCII ESC character (0x1b) | |
\f | form feed (0x0c) | |
\k | grave accent (0x60) | |
\n | line feed (0x0a) | |
\q | double quotes (0x22) | |
\r | carriage return (0x0d) | |
\s | space (0x20) | |
\t | tab (0x09) | |
\v | vertical tab (0x0b) | |
\\ | backslash (0x5c) | |
\u nnnn | Unicode character, up to U+FFFF | \u03a3 → Σ |
\U nnnnnnnn | Unicode character, up to U+10FFFF | \U0001f63a → 😺 |
\nnn | octal value, up to 777 | \101 → A |
\x nnnn | hexadecimal value, up to FFFF | \x0041 → A |
\# nnnnn | decimal value, up to 65535 | \#65 → A |
Note that case is significant for the letter after the backslash. All must be lowercase,
except for \U
xxxxxxxx.
Case is not significant in hexadecimal values. \u
xxxx
and \x
xxxx read up to four hexadecimal digits;
\U
xxxxxxxx reads up to eight. You may use fewer than four
(or eight) digits if the following character is not a valid hex digit.
Similarly, octal character escapes read up to three octal digits. You may use fewer than three if the following character is not an octal digit. Decimal escapes read up to five decimal digits; you may use fewer than five if the following character is not a digit.
Highlight Variable:
MKSC
features highlighted output. You can
customize this feature by setting an environment variable Highlight
:
rem Disable highlight:
set highlight=none
rem Set the highlight foreground:
set highlight=bright cyan
rem Set both foreground and background:
set highlight=bri whi on blu
rem Numbers are also supported:
set highlight=46
If the Highlight
environment variable is not defined, the plugin will
check the registry for a value named Highlight
of type REG_SZ
.
The plugin will search, in this order:
• HKEY_CURRENT_USER\Software\JPPlugins\UIStuff | (affects this plugin only) |
• HKEY_CURRENT_USER\Software\JPPlugins | (affects several of my plugins) |
You can also use /NC
to disable highlighting in MKSC
.
Startup Message:
This plugin displays an informational line when it initializes. The
message will be suppressed in transient or pipe shells. You can disable it
for all shells by defining an environment variable named NOLOADMSG
,
for example:
set /e /u noloadmsg=1
Acknowledgments:
The Windows XP (and earlier) mixer API is the kind of Byzantine, bodged-together Rube Goldberg monstrosity that gives “crawling horror” a bad name. This page (by Alberto di Bene?) was instrumental in saving my sanity.
… And then Microsoft said “Let there be Vista.” And lo, there was much confusion. Setting the master volume using the old API doesn’t work in Vista and later. The new interface is much simpler to use, and this page (by Sayyeid Mostafa Hashemi) was extremely helpful to me in making it work. Of course, the new Vista method won’t work in Windows XP and earlier; so this plugin must incorporate two utterly different routines to get and set the volume and mute state. Isn’t Windows amazing?
It seems that Microsoft doesn’t want us to change the default audio device programatically. Why not? I don’t know. I don’t care. I have perfectly valid reasons for wanting to do this; maybe you do too. To do the seemingly impossible I am using IPolicyConfig.h by EreTIk, which I found here. Thank you, EreTIk, whoever you are.
This page, by Kent Reisdorph, was useful in battling through the bizarre complexities of the Windows shell namespace. (May 2021: Page is gone; try the Wayback Machine.)
The syntax of the SCREENRES
command
borrows shamelessly from Anders Kjersem’s QRES utility.
I compress the binary using UPX.
Changes:
Version: | Date: | Changes: |
---|---|---|
0.81.0 | 2024-09-24 | Added DEFAUDIOOUT and
_DEFAUDIOOUT . Updated versions of NewHelp.cpp,
FindMyWindow.cpp, and conlist.cpp. ParseInt() now
supports octal numbers. |
0.80.0.4 | 2024-04-03 | Updates the QuickHelp for the
UISTUFFHELP command. |
0.80.0.3 | 2024-04-02 | Minor tweak to FindMyWindow.cpp:
now Windows Terminal detection does not rely on the WT_SESSION environment variable. |
0.80.0.2 | 2024-03-13 | Trivial code tweaks. |
0.80.0.1 | 2024-03-13 | Minor tweaks to ForceForegroundWindow(). |
0.80.0 | 2024-01-04 | MKSC updated to use
conlist.cpp v1.1 to better support Ctrl-C and Ctrl-Break. SETFOCUS
updated to use FindMyWindow.cpp; now it recognizes
Windows Terminal. |
0.79.3 | 2023-11-16 | The “Plugin not loaded” message is no longer shown in transient or pipe shells. When it is shown, it now includes the plugin’s name. |
0.79.2.4 | 2023-10-18 | Updated to the current version of NewHelp.cpp. |
0.79.2.3 | 2023-10-13 | Tweaked ShowCmdHelp() to also report VER_PATCH . |
0.79.2.2 | 2023-10-12 | Updated the plugin’s web address. |
0.79.2 | 2023-07-25 | Updated w3ccolors.cpp to the current version. |
0.79.1 | 2023-07-21 | Updated OsdCmd.cpp and conlist.cpp.
Rearranged code to make UISTUFFHELP /V more informative. Other minor code tweaks. Removed FTP download
link from the docs. |
0.79.0 | 2023-06-13 | Removed all calls to QueryIsFile() to work around around an issue in TCC v30.00.20. |
0.78.3 | 2023-05-18 | Moved SOUNDVOL ’s OSD display slightly up
and to the left. |
0.78.2 | 2023-04-18 | Now \b correctly
expands to ASCII backspace in MKSC . Updated to the latest versions of
ExpandEscapes.cpp and conlist.cpp. |
0.78.1 | 2023-04-03 | Tweaks to SOUNDVOL ’s OSD display. |
0.78.0 | 2023-02-01 | Moved all the sound volume stuff out to SoundVol.cpp.
The volume and mute variables are now _VOLUME and _MUTE respectively.
_SOUNDVOL and _MUTED are retained for backward compatibility,
but deprecated. |
0.77.12 | 2023-01-02 | Minor tweaks to SOUNDVOL ’s OSD display. |
0.77.11 | 2022-12-27 | Rewrote _BROWSER for Windows 10. |
0.77.10 | 2022-12-26 | Updates and fixes for SOUNDVOL . |
0.77.9 | 2022-01-12 | Removed MKSC ’s
/X and /Y , and replaced them with /AX: and
/CX: . |
0.77.8 | 2021-12-19 | MKSC : Added
/NE to suppress many error messages. Fixed a problem with extensionless files being incorrectly included. |
0.77.7 | 2021-12-16 | MKSC : Split
/FB into /FB (buffer info) and /FF (font info). Added
/F? to list available fields. Documented the optional third argument to /BS . |
0.77.6 | 2021-12-15 | Added MKSC /FH to dump the
console color palette. Renamed MKSC ’s /BK n: option to
/BH n: (think H for hue). |
0.77.5 | 2021-12-15 | Now MKSC /BK n:
can accept multiple color names, separated by commas or semicolons, to define more than one color at a time. |
0.77.2 | 2021-12-08 | MKSC : Reworked
/N a bit. Now /NC disables highlighting, and /NT prevents canononicalizing the target filename.
Also added a semi-undocumented /N? which describes the available /N flags. |
0.77.1 | 2021-11-29 | MKSC and @SCINFO :
Added the ability to decode installer ‘Darwin’ ID strings, and return either a product name or a GUID. |
0.77.0 | 2021-11-26 | Removed SETTHEME , which hasn’t worked as designed since Windows 7. |
0.76.4 | 2021-11-24 | Fix for MKSC crashing
on an unknown symbolic name. |
0.76.3 | 2021-11-23 | Added /P to MKSC . |
0.76.2 | 2021-11-23 | OsdCmd.cpp version 1.0.7.2. Further code tweaks. |
0.76.1 | 2021-11-23 | Added /Y to MKSC . |
0.76.0 | 2021-11-23 | In @SCINFO ,
adding 512 to info escapifies the return string. Now all commands display help text
via ShowCmdHelp(). |
0.75.2 | 2021-07-30 | Added /X and /NZ
to MKSC . Minor tweaks to the version info resource; now the platform (x64
or x86) is included. |
0.75.1 | 2021-05-18 | INSTALLFONTS bug
fix: only save the filename to the registry, not the full pathname. Added /X . |
0.75.0 | 2021-05-18 | Removes STARTPIN
and TASKBARPIN , which haven’t worked since Windows Vista. (Thanks, Microsoft!)
Adds INSTALLFONTS . Changed the .DLL filenames; now the
32-bit build is UIStuff-x86.dll, and the 64-bit version is
UIStuff.dll. Newer version of the OSD code. Various other tweaks
and updates. |
Status and Licensing:
Consider this beta software. It may well have issues. Try it at your own risk. If you find bugs, you can report them in the JP Software support forum.
UIStuff is currently licensed only for testing purposes. I may make binaries and source code available under some free license once I consider it ready for use.
Download:
You can download the current version of the plugin from https://charlesdye.net/dl/uistuff.zip.