Intro 4
Hard- / software requirements 5
Contents 5
Starting KiXtart 6
General syntax rules 7
Dynamic program variables / expression evaluator. 7
Notes on the registry functions. 8
Alphabetical listing of KiXtart commands. 9
Alphabetical listing of KiXtart functions. 10
Detailed description of KiXtart commands. 11
Expressions 11
"...." 12
? 12
;.... 12
:..... 12
%.....% 12
$..... 13
@..... 13
AT 15
BEEP 15
BIG 15
BOX 15
BREAK 16
CALL 17
CD 17
CLS 17
COLOR 17
DEL 18
DISPLAY 18
DO - UNTIL 18
EXIT 19
FLUSHKB 19
GET 19
GETS 19
[ GO ] 19
GOTO 20
IF ELSE ENDIF 20
MD 21
PASSWORD 21
PLAY 21
RUN 22
SET 23
SETL 23
SETM 23
SETTIME 24
SHELL 24
SLEEP 24
SMALL 24
USE 25
WHILE - LOOP 25
Detailed description of KiXtart functions. 26
General remarks 26
ADDKEY 26
ADDPRINTERCONNECTION 26
ADDPROGRAMGROUP 27
ADDPROGRAMITEM 28
CHR 29
CLOSE 29
DELKEY 30
DELPRINTERCONNECTION 30
DELPROGRAMGROUP 31
DELPROGRAMITEM 32
DELTREE 32
ENUMKEY 33
ENUMVALUE 33
EXIST 34
EXISTKEY 34
INGROUP 35
INSTR 36
LEN 36
LOADKEY 37
LOGOFF 37
MESSAGEBOX 38
OPEN 40
READLINE 40
READPROFILESTRING 41
READTYPE 42
READVALUE 43
REDIRECTOUTPUT 43
SAVEKEY 44
SENDMESSAGE 45
SETCONSOLE 45
SETDEFAULTPRINTER 46
SHOWPROGRAMGROUP 46
SHUTDOWN 47
SUBSTR 48
WRITEPROFILESTRING 49
WRITEVALUE 50
Troubleshooting 51
Support 51
KiXtart on Windows 95 52
About the program. 52
Disclaimer. 53
Possible KiXtart error codes. 54
Welcome to KiXtart 95 version 3.30, the latest release of the 32-bit version of KiXtart.
KiXtart 95 is a logon script processor and/or enhanced batch language for Windows NT and Windows
95 workstations in a Windows Networking environment.
With it, you can conditionally display information, set environment variables, start programs, connect to
network drives, read or edit the registry, and/or change the current drive and directory using a free
format 'script language'.
This latest update of KiXtart 95 offers several new features and enhancements such as :
New statements :
MD create new directory.
New macro's :
@HOSTNAME TCP/IP hostname.
@IPADDRESSx TCP/IP addresses of machine.
New functions :
OPEN open an ASCII file.
READLINE reads a single line from an ASCII file.
CLOSE close an ASCII file.
CHR enables you to insert 'special' cahracters in a string (ie : carriage return, etc.).
LOGOFF logs off current user.
Miscellaneous :
'timed' MESSAGEBOX the MessageBox function now takes an optional 4th argument
enabling you to specify a timeout after which the dialog
automatically terminates.
'short' @HOMEDIR @HOMEDIR has been changed in such a way that it now returns
the 'short' name of the home directory of the user. This way,
@HOMEDIR can be used to set environment variables for use with
good old MS-DOS applications (which are usually LFN (Long File
Name) unaware.
NB please see the separate file RELNOTES.TXT for details on the latest changes, fixes, etc.
- PC Compatible (80386++).
- MS Windows NT Workstation or Server 3.x OR
- MS Windows 95
NB : a version of KiXtart providing support for MS-DOS and Windows for Workgroups is available separately.
Kixtart is provided in pkzip file.format. To install it, run "pkunzip kix32.zip" on a command prompt in
the directory in which you want to install KiXtart.
The directory will contain the following files :
KIX32.DOC this doc in Word for Windows 6.00 format
KIX32.EXE (105,984) the actual application
KX16.DLL (48,128) support dll for KiXtart on Windows 95
KX32.DLL (5,632) "" "" "" "" ""
DELKEY.SCR (477) sample script
DEMO.SCR (2,275) "" ""
DEMO2.SCR (987) "" ""
FLY.SCR (187) "" ""
FUN.SCR (893) "" ""
KICK.SCR (1,463) "" ""
KIXTART.SCR (1,194) "" ""
RECUR.SCR (495) "" ""
TEST.SCR (7,011) "" ""
ADAAMS.SPK (899) sample SPK file
BOUREE.SPK (389) "" ""
CABARET.SPK (1,570) "" ""
JBOND.SPK (2,829) "" ""
TREKSONG.SPK (797) "" ""
CHIMES.WAV (15,920) sample WAV file
The numbers in parentheses represent the size of the respective files. All files should have the date-time stamp of 7/24/96 03:30a.
Many more SPK files can be found in a separately available zip file called KIXSPK.ZIP.
KiXtart can be started by typing "KIX32" at a command prompt, or by specifying "KIX32" as the
logon script for a user.
One or more scriptfiles can be specified on the command line (eg: "KIX32 script1 script2"). The
extension ".SCR" will automatically be appended to all script files that are specified without an
extension.
Optionally, you can also specify one or more variable declarations on the commandline as follows :
KIX32 DEMO.SCR $Key=HKEY_LOCAL_MACHINE\Software
See the description on variables for details on valid variable names and values.
If run without any parameters, and run during the logon procedure (see 2nd note below for details),
KiXtart will use the following sequence to find a script to run :
1 <USERID>".SCR" present on <\\logonserver>\NETLOGON share ?
2 <USERID>".SCR" present on drive KiXtart was started from ?
3 <USERID>".SCR" present in current directory ?
4 "KIXTART.SCR" present on <\\logonserver>\NETLOGON share ?
5 "KIXTART.SCR" present on drive KiXtart was started from ?
6 "KIXTART.SCR" present in current directory ?
KiXtart will display an error if no logon script is found.
Notes
- all files (spk, wav, txt) to be opened by KiXtart will be searched for on the NETLOGON drive,
followed by the drive where KiXtart originated from, followed by the current directory .......
......unless the filename is preceded by a driveletter or UNC-path. In other words :
PLAY FILE "JBOND.SPK" will be searched on the netlogon share, KiXtart startup and
the current directory
PLAY FILE "C:JBOND.SPK" will only be searched on drive specified
- when run outside the logonprocedure (which KiXtart assumes to be the case if no drives have been redirected to a NETLOGON share and if the PATH setting does not start with an entry for the NETLOGON share), KiXtart will only search for files in the current directory.
The KiXtart 'language' is completely case insensitive and free format.
This means to say that :
IF @PRIV="ADMIN" DISPLAY "ADMIN.TXT" ELSE DISPLAY "USER.TXT" ENDIF
is valid, but :
If @PRIV = "ADMIN"
Display "ADMIN.TXT"
Else
Display "USER.TXT"
Endif
is also valid, and of course a lot nicer to look at.
Strings can contain almost any character, the only exceptions being the '\0' (NULL) and '\x1a' (end of
file) characters. NB : if a string contains any delimiter (-, +, *, etc) it should be enclosed in (double-)
quotes.
Script commands should be separated by 'white-space' (ie : any combination of space, tab or newline characters.)
Dynamic program variables / expression evaluator.
KiXtart supports the concept of dynamic program variables and has a full-featured expression evaluator.
These features enable you to create program variables, assign values to them, and use them in complex
expressions anywhere where an expression is expected (just as with a 'real' programming language). For
example, you could use them in an IF or AT statement.
Creation of variables is automatic, ie : whenever an assignment is made to a non-existant variable
(either through the use of an assignment, or through the use of the GET or GETS command), KiXtart
will automatically create the variable.
There are two types of variables : a 'string' type and an 'integer' type. Variables of type 'string' can
contain anywhere up to 32000 characters. Variables of type 'integer' can contain any value between -2,147,483,648 and 2,147,483,647. The type of a variable is automatically changed to the result of the
expression which is assigned to it (so, if you assign a string to an integer, the latter will be changed to a
string).
There is no limit on the number of variables that can be defined, other than the amount of memory
available to KiXtart.
Optionally, variables can also be created by specifying them on the command line with which you start KiXtart. To do so, just specify the variable name followed by an equals sign ('=') and the value you want the variable to have (eg : KIX32 DEMO.SCR $Key="Whatever"). NB : there should be no spaces in between the equals sign and the value. If you want to specify a value that contains spaces, just enclose it in double quotes (eg : KIX32 DEMO.SCR $Key="Hi there").
Notes on the registry functions.
All registry functions use the following format for specifying the key you want to access :
[\\remote_machinename\][Rootkey\]<Keyname>
Remote_machinename can be any valid workstation name preceded by 2 backslashes. If you do not
specify a remote_machinename, the local registry will be accessed.
Rootkey can be one of the 4 main keys of the registry : HKEY_LOCAL_MACHINE, HKEY_USERS,
HKEY_CLASSES_ROOT and HKEY_CURRENT_USER. If you do not specify a rootkey, KiXtart will
take HKEY_CURRENT_USER as the rootkey.
Keyname can be any valid name of a key in the registry. If a keyname contains spaces, simply enclose
the entire expression in quotes.
Notes
- when accessing a remote registry, you must specify a rootkey, and it can only be either
HKEY_LOCAL_MACHINE or HKEY_USERS. Also, if you want to access a remote registry
from Windows 95, please see the instructions in the ADMIN\NETTOOLS\REMOTREG
directory on the Windows 95 CD on how to enable remote registry access.
Examples
\\VLEERBEER\HKEY_LOCAL_MACHINE\CONTROL
"HKEY_CURRENT_USER\Program Groups\Games"
"Control Panel\International\Sorting Order"
WARNING**WARNING**WARNING**WARNING**WARNING**WARNING**WARNING
ALWAYS be very careful when any changes are made to the registry.
KiXtart does not ask for any kind of confirmation when values in the registry are overwritten or when
entire keys are deleted. If you tell it to destroy the registry, then that is exactly what it will do.
ALWAYS make a backup of your system BEFORE you make changes to any value in the registry.
WARNING**WARNING**WARNING**WARNING**WARNING**WARNING**WARNING
Alphabetical listing of KiXtart commands.
AT position cursor
BEEP beep
BIG sets character mode to large characters (8*8)
BOX draws a box on the screen
BREAK ON/OFF (re)set Ctrl-C/Break handling
CALL execute a separate KiXtart script
CD change current directory
CLS clear the screen
COLOR change fore-/background color
COOKIE1 (no function, supported only for compatibility with KiXtart 2.30)
COOKIE2 (no function, supported only for compatibility with KiXtart 2.30)
DEL delete file
DISPLAY display file indicated by x
DO UNTIL loop the loop
EXIT exit current script, optionally with returncode
FLUSHKB remove any pending keystrokes from keyboardbuffer
GET wait for single keystroke
GETS accept a string of chars
GO change current drive
GOTO label jump to label
IF ELSE ENDIF standard if/else construct
MD create new directory
PASSWORD (no function, supported only for compatibility with KiXtart 2.30)
PLAY [FILE] plays 'music' from SPK-file, string or WAV-file
RUN WinExec's a program (script continues)
SET sets variables in environment of CURRENT_USER
SETL sets variables in local environment
SETM sets variables in environment of LOCAL_MACHINE
SETTIME set local time to time on server x
SHELL executes a program, and waits for it to complete
SLEEP suspends KiXtart for x secs
SMALL resets character mode to normal
USE (dis-)connect to/from networkshare
WHILE LOOP loop the loop
Alphabetical listing of KiXtart functions.
ADDKEY add a key to registry
ADDPRINTERCONNECTION add a connection to a network printer (Windows NT only)
ADDPROGRAMGROUP create a new program group
ADDPROGRAMITEM add/replace a program item in the current program group
CHR returns ASCII representation of numeric value
CLOSE closes an ASCII file previously opened with OPEN
DELKEY delete key from registry
DELPRINTERCONNECTION remove a connection to a network printer (Windows NT only)
DELPROGRAMGROUP delete a program group
DELPROGRAMITEM delete a program item from the current program group
DELTREE delete key from registry, including subkeys
DELVALUE delete value of key from registry
ENUMKEY returns name of subkey of key
ENUMVALUE returns name of value of key
EXIST checks if a file exists
EXISTKEY checks if a key exists
INGROUP checks for membership of current user of specified group
INSTR searches a string in a string
LEN returns length of a string
LOGOFF logs current user off
LOADKEY loads (overwrites!) key (including subkeys and values) from file
MESSAGEBOX displays a standard Windows dialog box
OPEN opens an ASCII file
READLINE reads a line from an ASCII file opened with OPEN
READPROFILESTRING read string from an ini-file
READTYPE returns ASCII representation of type (eg : REG_SZ)
READVALUE returns ASCII representation of value
REDIRECTOUTPUT redirects all output to a file
SAVEKEY saves entire key (including subkeys and values) to a file
SENDMESSAGE send a message across the network to another user or workstation
SETCONSOLE change displaymode of console
SETDEFAULTPRINTER sets the default printer
SHOWPROGRAMGROUP change display status of a program group
SHUTDOWN shutdown or reboot local or remote system
SUBSTR returns a substring from a string
WRITEPROFILESTRING write string to an ini-file
WRITEVALUE write single value to registry
Detailed description of KiXtart commands.
KiXtart supports 2 types of expressions : string and numeric.
A string expression can consist of any combination of literals (ie : a sequence of characters enclosed in
quotes or double-quotes), functions returning strings and "+" characters (indicating that 2 sub-expressions should be concatenated).
Numeric expressions can consist of any combination of sub-expressions, numeric literals, numeric
operators (+,-,*,/), and functions returning numeric literals.
Both string and numeric expressions can contain the following conditional/logical operators :
<,>,=,<>,<=,>=,AND, OR.
Any variables, macro's or references to environment strings within an expression will be resolved before
the expression is evaluated.
If you want to use the '@' , '%' or '$' character (normally used to indicate macro's, environment strings
or variables) in a string, use '@@', '%%' or '$$' .
Notes
- KiXtart will try to determine the type of the expression from the first element of the
expression.
- an expression can contain up to 32000 characters.
Examples
$X = 1 + "20" ; $X type = integer / value = 21.
$X = "1" + "20" ; $X type = string / value = '120'.
$X = @USERID + "1" ; $X type = string / value = 'USER1'.
"Current time = @time" ; will print : "Current time = 12:34:00"
"Current time = @@time" ; will print : "Current time = @time"
$Y = "And this is how you access environment variables : %USERNAME%..."
IF @Day='sunday' AND @USERID = 'RuudV'
$X = (@MONTHNO=3 AND @MDAYNO>=20) OR @MONTHNO=4
IF @WKSTA="VLEERBEER" OR @WKSTA="PALOMINE"
$X = ( ( @YDAYNO + 7 ) / 7 ) + 1
"...."
Any string in the script will be displayed on the screen starting from the current cursor position in the
current character 'size' (see SMALL / BIG).
Any variables, macro's or references to environment strings will be resolved before the string is
displayed.
If you want to use the '@' , '%' or '$' character (normally used to indicate macro's, environment strings
or variables) in a string, use '@@', '%%' or '$$' .
Examples
"Hi @userid" --> "Hi RUUDV"
"Hi @@userid" --> "Hi @userid"
?
Indicates 'newline'. This will effectively move the cursor position to the start of the next line.
;....
Indicates comment. Any subsequent characters on the current script line will be ignored.
:.....
Defines a label within the script file to which you can transfer control using the GOTO statement.
A label must be unique within the script.
Labels can be defined within an IF statement, but shouldn't be jumped to from outside the IF.
%.....%
Any string enclosed by '%' will be interpreted as a reference to an MS-DOS environment variable and will be substituted by the value of that variable in the local environment.
$..... [ = expression ]
Any string starting with a '$' character will be interpreted as a program variable. A variablename can be
any length, but only the first 14 characters (including the '$') will be used to uniquely identify the
variable.
If the string is followed by an equals sign ('='), KiXtart will interpret the expression following the equals
sign, and assign the result to the variable.
Otherwise, KiXtart will simply print the value of the variable.
Variables can be used anywhere where an expression is expected.
Examples
$X = (10 + $Y) / 2
GETS $ANSWER
AT ( $ROW , $COLUMN )
@.....
Any string starting with a '@' character will be interpreted as a macro.
Macro's can be used anywhere an expression is expected.
Supported macro's are :
ADDRESS address of the network adapter
COMMENT user comment
DATE current date (format : 'yyyymmdd')
DAY name of week day (Monday, Tuesday, ...)
DOMAIN current Windows NT domain
DOS Windows NT version (eg : 3.51)
ERROR returncode of the most recent command or function executed. Basically, a returncode
of 0 means the command or function executed successfully. Any other value indicates
some sort of error occurred.
FULLNAME full name of current user
HOMEDIR 'short' name of the directory part of home directory
HOMESHR server- & sharename part of home directory
HOSTNAME fully qualified TCP/IP hostname (including TCP/IP domain name)
INWIN 1 == Windows NT, 2 == Windows 95
IPADDRESSx TCP/IP address (possible values for x are 0 - 3). NB : addresses are padded so that
the resulting string always consists of 4 sequences of three characters separated by
periods. In other words, if your first IP address is 123.45.6.7, @IPADDRESS0 will
be "123. 45. 6. 7".
KIX KiXtart version
LANROOT directory where network software resides (usually "<winroot>\system32")
LDOMAIN logon domain
LDRIVE drive that is redirected to \\logonserver\NETLOGON
LM network software version (eg : 3.50)
LSERVER logon server
MAXPWAGE maximum password age
MDAYNO day of the month (1-31)
MONTHNO months since January (1-12)
MONTH name of the month (January, February, ...)
PRIV privilege level of user (GUEST,USER,ADMIN)
PWAGE password age
TIME current time (format : 'hh:mm')
USERID userid of the current user
WDAYNO days since Sunday (1-7)
WKSTA computername
YDAYNO days since January 1 (1-365)
YEAR current year
Examples
@LM "2.10"
@DATE "1992/10/03"
DISPLAY @USERID + ".TXT" displays the file "RUUDV.TXT"
CD "\DATA\" + @DOMAIN changes the current directory to "\DATA\your-domain"
AT (
row,
column
)
AT will position the cursor to the position indicated by the row and column, where 0 , 0 is the topleft
corner of the screen.
Notes
- The AT command is ignored if all output has been redirected to a file (using the
RedirectOutput function).
BEEP
Does what it says it does (surprise, hmm?).
BIG
Changes the character mode to BIG. All subsequent screen output will be 'big' (ie : 8 (normal)
characters wide and 8 characters high). Use SMALL to reset the character mode to normal.
Notes
- 'BIG' is ignored when the screen output has been redirected to a file.
BOX (
top_left_row,
top_left_column,
bottom_right,row,
bottom_right_column,
"line_style"
)
BOX draws a box with a selectable line style.
The logical points top left and right bottom are the diagonally opposed corners of the box to be drawn.
Possible values for box-type are :
SINGLE single line outline, space as filler
DOUBLE double line, space as filler
FULL full line, space as filler
GRID singe line, cross as filler
"string" of up to 9 characters which is used as follows :
12223
89994
89994
76665
Example
BOX ( 10, 10, 12, 15, "+-+|+-+| " ) ; produces the following box :
+---+
| |
+---+
Notes
- The BOX command is ignored if all output has been redirected to a file (using the
RedirectOutput function).
BREAK < ON | OFF >
To prevent users from 'accidentally' interrupting a script, by default, KiXtart automatically disables the
Ctrl-C/Break keys and disables the 'Close' option in the current console system menu. The BREAK
command enables you to turn the Ctrl-C/Break keys and the 'Close' option back on (BREAK ON), or
off again (BREAK OFF).
Notes
- of course, in a multi-tasking environment such as Windows NT, you can never fully prevent a
user from interrupting a program (by ending it via the tasklist for example). As an additional
protection, on Windows NT workstations only, when BREAK is OFF (the default) KiXtart also
installs a special events handler for the current console. The effect of this handler is that
whenever a user forcibly terminates KiXtart, the user is automatically logged off. Obviously,
this means that you will have to be extra careful during testing of your scripts....
- so what about the <Cancel> button on the 'Please wait while your logonscript....' dialog ? Well, although I will always deny telling you so, it is not impossible to take a copy of MSNET32.DLL, open it in the Visual C 4.00 WorkBench, select the LMWINSCRIPTDLG resource, and make the <Cancel> button invisible.... Seriously : I by no means recommend this kind of hacking. It is certainly unsupported, may cause side-effects and means that you will have to be extra careful with updates. Still, if logonscripts are a sensitive issue in your environment, it may be worth the risk.
CALL "scriptname"
CALL enables you to start a separate KiXtart script. When the separate script ends, script execution will
continue at the next statement in the calling script.
Theoretically, there is no limit to the number of scripts that can be nested. Obviously, the practical limit
on the number of scripts you can call is determined by the amount of available memory at the time
KiXtart runs, the size of the scripts, the number of variables defined, etc.
Notes
- Program variables are 'global'. In other words, they are visible in all scripts, and changes you make to them in a separate script will be visible in the calling script.
CD "directory"
CD changes the current working directory to the directory specified.
Check the @ERROR macro to see if CD was successful.
CLS
Clears the screen and moves the cursor to position 0,0.
Notes
- The CLS command is ignored if all output has been redirected to a file (using the RedirectOutput function).
COLOR Xx/Yy
X - foreground color
x - optional intensity indication
Y - background color
y - optional blink indication
COLOR allows you to specify the color attribute to be used by any subsequent printing.
Possible values for the fore- and background color are :
n - normal (black)
b - blue
g - green
c - cyan
r - red
m - magenta
y - yellow/brown
w - white
If the foreground color is accompanied by a '+', the color will be displayed with high intensity.
Specifying a '+' with the background color will cause the color to be displayed blinking.
Examples
COLOR w+/b Bright white text on a blue background.
COLOR g/r+ Green text on a blinking red background (yuckk).
DEL "file"
DEL deletes the file specified.
NB : no warning given, no questions asked.
DEL also sets the @ERROR macro.
DISPLAY "filename"
Outputs the contents of the specified file to the screen starting at the current cursor position.
DO ... UNTIL "expression"
Loops until the expression becomes true.
Notes
- maximum number of nested DO loops = 10.
EXIT [ errorlevel / exitcode ]
Exits current script. If EXIT is followed by a numeric expression, then the value of that expression will be used as the exitcode of KiXtart (and can thus be checked in batchfiles).
FLUSHKB
Flushes all pending characters from the keyboardbuffer.
GET $x
GET accepts a single character from the keyboard.
The character is stored in the specified script variable.
Notes
- function keys (F1, right arrow , etc.) will be stored as 0.
GETS $x
GETS reads a line of characters from the keyboard until <Enter> is pressed, and stores the result in the script variable.
[ GO ] drive
Changes the current drive to the drive specified.
Use GO if you want to specify a variable as the drive to change to.
Examples
GO A:
A:
GO $2
GOTO < label >
Causes script execution to continue at the first statement after the specified label, where <label> can be
an expression.
Examples
GOTO "end"
$string = "end"
GOTO $string
IF expression
statement1
....
[ ELSE
statement2
.... ]
ENDIF
The body of an IF statement is executed selectively, depending on the value of the expression as
described below :
1 - if expression is true, statement1 is executed.
2 - if expression is false, and the ELSE clause is specified, statement2 is executed.
IF statements can be nested up to 10 levels.
All forms of expressions can be used with the IF statement. See below for examples.
If the expression does not contain any relational operators, the condition will be considered true if the
expression evaluates to non-zero (if the expression is numeric) or to a string of at least 1 character (if
the expression is alphanumeric).
Examples
IF $X ; similar to IF $X <> 0
IF @HOMESHR ; similar to IF @HOMESHR <> ""
IF INGROUP( "Domain Admins") ; similar to IF INGROUP( "Domain Admins") > 0
IF INGROUP( "Domain Admins") = 0 ; true if user NOT a Domain Admin
IF $X*2 < 10
IF (($X*2) < 10 ) OR ($Y + 100) /3 >120
IF INSTR(%PATH%,"NETLOGON") AND @DOS = "3.51"
IF ( SUBSTR(@WKSTA,11,1)="1" AND @USERID = "PETERV") OR @DOMAIN = "VleerBeer"
IF @USERID = "RUUDV" OR @USERID = "WIMW"
IF ( INGROUP( "Domain Users" ) OR INGROUP("Users") )
Notes
- all comparisons are made case INsensitive.
MD "directory"
MD creates a new directory.
Check the @ERROR macro to see if MD was successful (@ERROR = 0).
PASSWORD
PASSWORD "password"
No function, supported only for compatibility with KiXtart 2.30.
PLAY [FILE "path\spkfilename"] | "string" | "path\wavfilename"
PLAY allows you to produce 'music' on your system's speaker using the 'SPK' file format described
below, or to play a WAV-file on your soundcard. KiXtart automatically selects the right action based on
the extension of the file-name you provide.
Basically the 4 syntax forms are :
1 PLAY FILE "JBOND.SPK"
2 PLAY " 0g256t 0g8d247f 4d165f 247f 8d262f 4d165f 262f 8d277f 4d165f"
3 PLAY FILE "DING.WAV"
3 PLAY "CHIMES.WAV"
The first 2 forms require a file or string using the SPK syntax described below.
The string (or file) should consist of a sequence of commands indicating the frequency and duration of
the tones to play.
The following commands are available :
F - Frequency
This command letter causes a tone to be produced at the "current frequency". The initial "current
frequency" is 1000Hz.
To change the "current frequency" to a different value, put the frequency desired immediately preceding
the "F" or "f" character. For example, to produce a tone of 1500Hz, you would write : 1500F.
G - Gap
This command letter sets the number of timer ticks (1 second = 18 tx) of silence between individual tones. The number of timer ticks between tones is specified as a number immediately preceding the
command character. The initial default is 0.
D - Duration of a tone
This command letter lets you set the length (in timer ticks) of each tone. For example, to make each
tone last about a third of a second, you would use the command: 6d.
T - Tempo
This command allows you to scale the duration of each tone. This enables you to "globally" change the
duration of a series of tones, without having to change each of the individual duration commands.
A tempo value of 256 indicates a "normal" tempo, so, a command like 4df will last :
2 timer tx, when the tempo is set to 128,
4 timer tx, when the tempo is set to 256,
8 timer tx, when the tempo is set to 512.
NB many SPK-samples can be found in a separately available file called KIXSPK.ZIP.
Example
PLAY " 0g256t 0g8d247f 4d165f 247f 8d262f 4d165f 262f 8d277f 4d165f
277f 8d262f 4d165f 262f 8d247f 4d165f 247f 8d262f 4d165f
262f 8d277f 4d165f 277f 8d262f "
(This will play the first tones of the James Bond theme.)
RUN "command"
RUN will try to 'WinExec' the program specified.
Notes
- this command will not wait for the program to complete. Script execution immediately continues. This behaviour is different from the DOS-based version of KiXtart, where the RUN command also terminates the script. If you want to emulate the DOS-based version, you need to add an EXIT command after the RUN command.
SET "variable=string"
Sets enviroment variables in the environment of the current user
(HKEY_CURRENT_USER\Environment).
After any change to the environment, KiXtart informs all running programs that such a change was
made, enabling those programs to regenerate their enviroments.
Notes
- only programs that specifically support this feature (such as ProgMan and TaskMan) will have
their environment updated. When in doubt about a particular program, please ask the supplier
of the program whether or not his program supports the 'WM_WININICHANGE' message for
changes to the environment.
- this command does not work on Windows 95. As a workaround, use the SHELL command to run WINSET.EXE (which can be found on the Windows 95 CD).
SETL "variable=string"
Sets enviroment variables in the local environment (ie the environment that you will see when you start
a program from KiXtart).
SETL also sets the @ERROR macro.
SETM "variable=string"
Sets enviroment variables in the environment of the local machine
(HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\ Control\Session Manager\Environment).
Notes
- only programs that specifically support this feature (such as ProgMan and TaskMan) will have
their environment updated. When in doubt about a particular program, please ask the supplier
of the program whether or not his program supports the 'WM_WININICHANGE' message for
changes to the environment.
- this command does not work on Windows 95. As a workaround, use the SHELL command to run WINSET.EXE (which can be found on the Windows 95 CD).
SETTIME "server"
Sets the system clock of the local computer to the time on the specified server. The server must be running the Time Source service (see KnowledgeBase / TechNet article Q131715 for details). If you specify "*" for the servername, KiXtart will browse the network for any server running the Time Source service.
SHELL "command"
The SHELL command will try to load and execute the program indicated by "string". If you want to run
command-line statements, you need to specify CMD.COM in the string.
SHELL sets the @ERROR macro to the exit code of the program that was run.
Notes
- if the program you are trying to run needs to set environment variables (such as SMS's
SMSLS.BAT), you may need to specify additional environment space using the '/E'
parameter.
Examples
SHELL "SETW USERNAME=@USERID"
SHELL "CMD /C COPY Z:\FILE.TXT C:\"
SHELL "C:\WINNT\SYSTEM32\CMD /E:1024 /C " + @LDRIVE + "\SMSLS.BAT"
SLEEP <seconds>
Will halt script execution for the number of seconds specified.
SMALL
Changes the character mode to small (normal). All subsequent printing will be normal.
See the description of the BIG command for a full explanation of the BIG and SMALL character modes.
USE [<"device"> [<"resource"> [/USER:user] [/PASSWORD:password]] | [/DELETE]] | [LIST]
(Dis-)connects a device (drive, printer) to/from a network resource or displays a list of the current
redirections.
Notes
- if a resourcename contains any non-alphanumeric characters (such as a '-' or '+'), you should
enclose the name in quotes.
- the USER parameter (enabling you to override the current user) is only supported on Windows
NT.
You can check the @ERROR macro to see if the USE succeeded (0 = success).
Examples
USE E: "\\SERVER\PUBLIC"
USE E: "\\SERVER\PUBLIC" /user:Yogi /password:Bear
USE LPT1: "\\SERVER\LASER" /user:testlan\USER1
USE L: /DEL
USE LIST
USE H: @HOMESHR ; connect to user's home share
IF @ERROR = 0
H: ;
CD @HOMEDIR ; change directory to user's personal directory
ENDIF
WHILE "expression" ... LOOP
Loops as long as the expression is true.
Notes
- maximum number of nested WHILE loops = 10.
Detailed description of KiXtart functions.
All functions take one or more string or numeric expressions as parameters. String parameters are
indicated by double-quotes around the parametername. Certain functions allow for optional
parameters. If you omit these parameters, the function will use a default instead.
All functions return either a string or a numeric value, and can thus be used anywhere an expression is
expected (eg : AT( InGroup("Admins") + 3 , 10) obviously doesn't make a lot of sense, but is
syntactically correct).
All functions also set the @ERROR macro enabling you to check if the function succeeded.
ADDKEY (
"Key"
)
Adds the key specified to the registry.
Parameter
Key
A string that specifies the name of the key you want to add to the registry.
Returns
If the function succeeds, the return value is 0. If the function fails, the return value represents an
errorcode.
Example
$ReturnCode = AddKey( "HKEY_CURRENT_USER\EZReg" )
If $ReturnCode = 0
? "Key added...."
Endif
ADDPRINTERCONNECTION (
"PrinterName"
)
The AddPrinterConnection function adds a connection to the specified printer for the current user.
Parameters
PrinterName
Points to a null-terminated string that specifies the name of a printer that the current user wishes to
establish a connection to.
Notes
- This function is only available on Windows NT, and can only be used to connect to printers
on a Windows NT Server.
- When Windows NT makes a connection to a printer, it may need to copy printer driver files to
the workstation. If the user does not have permission to copy files to the appropriate location,
the AddPrinterConnection function fails, and @ERROR will be set to
ERROR_ACCESS_DENIED.
Returns
If the function succeeds, the return value is 0. If the function fails, the return value represents an
errorcode.
Example
If AddPrinterConnection ( "\\vleerbeer\hp laserjet 4" ) = 0
? "Added printer connection...."
Endif
ADDPROGRAMGROUP (
"GroupName",
CommonGroupFlag
)
The ADDPROGRAMGROUP function instructs Program Manager to create a new program group.
Parameters
GroupName
Identifies the group window to be minimized, maximized, or restored.
CommonGroupFlag
Optional numerical parameter, specifying whether the group is a common group or a personal group. If
this parameter is 1, the group being created will be a common group; if it is 0, the group will be a
personal group. To create a common group, the user currently logged on must have administrative
privileges. If this parameter is 1 but the user does not have administrative privileges, the command
fails. This parameter is only applicable on Windows NT workstations.
Returns
If the function succeeds, the return value is 0. If the function fails, the return value represents an
errorcode.
Example
If AddProgramGroup( "NewGroup" , 0 ) = 0
? "NewGroup has created...."
Endif
ADDPROGRAMITEM (
"CmdLine",
"Name",
"IconPath",
IconIndex,
"DefDir",
Minimize,
Replace,
RunInOwnSpace
)
The ADDPROGRAMITEM function instructs Program Manager to add an icon to the currently active
group. There is a limit of 50 items per group.
Parameters
CmdLine
Specifies the full command line required to run the application. This parameter is a string. At a
minimum, this string is the name of the executable file for the application. It can also include the full
path of the application and any parameters required by the application.
Name
Specifies the title that is displayed below the icon in the group window.
IconPath
Identifies the filename for the icon to be displayed in the group window. This parameter is a string.
This file can be either a Windows-based executable file or an icon file. If no value is specified for the
IconPath parameter, Program Manager uses the first icon in the file specified by the CmdLine
parameter if that file is an executable file. If CmdLine specifies an associated file, Program Manager
uses the first icon of the associated executable file. The association is taken from the registry. (For
more information about the registry, see Registry.) If CmdLine specifies neither an executable file nor
an associated executable file, Program Manager uses a default icon.
IconIndex
Specifies the index of the icon in the file identified by the IconPath parameter. The IconIndex
parameter is an integer. PROGMAN.EXE contains five built-in icons that can be used for programs not
written for Windows.
DefDir
Specifies the name of the default (or working) directory. This parameter is a string.
Minimize
Optional numerical parameter, specifying whether an application window is to be minimized when first
displayed. (1 = minimize, default = 0)
Replace
Optional numerical parameter, specifying whether ADDPROGRAMITEM should replace an existing
program item with the same name (replace = 1), or add a new program item (replace = 0). Default is 0.
RunInOwnSpace
Optional numerical parameter, specifying if the executable referred to should run in its own address
space. This parameter only applies to 16-bit Windows applications running on Windows NT. Default is
0 (do not run in separate memory space).
Returns
If the function succeeds, the return value is 0. If the function fails, the return value represents an
errorcode.
Example
If AddProgramItem( "c:\windows\regedit.exe", "RegEdit", "" , 0, "c:\" , 0 , 0) = 0
? "Added program item 'RegEdit' to current group..."
Endif
CHR (
CharacterCode
)
Enables you to insert 'special' characters (eg : Carriage Return, etc) in a string.
Parameter
CharacterCode
A numeric expression representing the character code to insert.
Returns
String representation of the character code.
Example
$Message = "Hello " + @USERID + chr(13) + chr(10) + "Welcome to our network."
CLOSE (
FileNumber
)
Closes the file (previously opened with the OPEN function) indicated by FileNumber.
Parameter
FileNumber
A numeric expression indicating the filenumber of the file to close. Possible values range from 1 to 10.
Returns
-2 Invalid FileNumber specified.
0 File successfully opened.
Example
IF Close( 3 )
Beep
? "Error closing file!"
ENDIF
DELKEY
DELKEY (
"Key"
)
Deletes the key specified from the registry. The call will fail if any subkeys exist for this key. Use
DelTree if you want to delete a key which has subkeys.
Parameter
Key
A string that specifies the name of the key you want to delete.
Returns
If the function succeeds, the return value is 0. If the function fails, the return value represents an
errorcode.
Example
$ReturnCode =DelKey( "HKEY_CURRENT_USER\EZReg" )
If $ReturnCode = 0
? "Key deleted...."
Endif
DELPRINTERCONNECTION (
"PrinterName"
)
The DeletePrinterConnection function deletes a connection to a printer that was established by a call to
AddPrinterConnection.
Parameters
PrinterName
A string that specifies the name of the printer connection to delete.
Notes
- This function is only available on Windows NT.
- The DelPrinterConnection function does not delete any printer drivers copied to the server on
which the printer resides when the printer connection was established.
Returns
If the function succeeds, the return value is 0. If the function fails, the return value represents an
errorcode.
Example
If DelPrinterConnection ( "hplaser4" ) = 0
? "Deleted printer connection...."
Endif
DELPROGRAMGROUP (
"GroupName",
CommonGroupFlag
)
The DELPROGRAMGROUP function instructs Program Manager to delete an existing group.
Parameters
GroupName
Identifies the group to be deleted.
CommonGroupFlag
Optional numerical parameter, specifying whether the new group is a common group or a personal
group. If this parameter is 1, a common group is deleted; if it is 0, a personal group is deleted. To
delete a common group, the user currently logged on must have administrative privileges. If this
parameter is 1 but the user does not have administrative privileges, the command fails. This parameter
is only applicable on Windows NT workstations.
NB : no questions asked.
Returns
If the function succeeds, the return value is 0. If the function fails, the return value represents an
errorcode.
Example
If DelProgramGroup( "NewGroup" , 0 ) = 0
? "NewGroup deleted...."
Endif
DELPROGRAMITEM (
"ItemName"
)
The DELPROGRAMITEM function instructs Program Manager to delete an item from the currently
active group.
Parameter
ItemName
Specifies the item to be deleted from the currently active group.
Returns
If the function succeeds, the return value is 0. If the function fails, the return value represents an
errorcode.
Example
If DelProgramItem( "Whatever" ) = 0
? "ProgramItem 'Whatever' deleted from the current group...."
Endif
DELTREE(
"Key"
)
Deletes the key specified from the registry *including any subkeys*.
NB : no questions asked.
Parameter
Key
Specifies the key to be deleted from the registry.
Returns
If the function succeeds, the return value is 0. If the function fails, the return value represents an
errorcode.
Example
$ReturnCode = DelTree( "HKEY_CURRENT_USER\EZReg" )
If $ReturnCode = 0
? "Key deleted...."
Endif
ENUMKEY (
"Key" ,
Index
)
Enables you to enumerate the names of the subkeys of a specific key.
Parameters
Key
Specifies the key for which you want to enumerate the subkeys.
Index
Numeric value representing the subkey you want to know the name of (where 0 is the first subkey).
Returns
If the function succeeds, the function returns a string representing the name of one of the subkeys of
the key specified, and the @ERROR value will be set to 0. If the function fails, the @ERROR value
represents an errorcode. @ERROR will be 259 if you request an index of a subkey that doesn't exist.
Example
$Index = 0
:Loop
$KeyName = ENUMKEY( "HKEY_CURRENT_USER\Console\ " , $Index )
If @ERROR = 0
? "Name found : $KeyName"
$Index = $Index + 1
goto Loop
Endif
ENUMVALUE (
"Key" ,
Index
)
Enables you to enumerate the names of the values of a specific key.
Parameters
Key
Specifies the key for which you want to enumerate the values.
Index
Numeric value representing the value you want to know the name of (where 0 is the first value).
Returns
If the function succeeds, the function returns a string representing the name of one of the values of the
key specified, and the @ERROR value will be set to 0. If the function fails, the @ERROR value
represents an errorcode. @ERROR will be 259 if you request an index of a value that doesn't exist.
Example
$Index = 0
:Loop
$ValueName = ENUMVALUE( "HKEY_CURRENT_USER\Console\Configuration" , $Index )
If @ERROR = 0
? "Name found : $ValueName"
$Index = $Index + 1
goto Loop
Endif
EXIST (
"File"
)
EXIST checks for the existence of a specific file.
Parameters
File
Identifies the file you want to check the existence of.
Returns
0 the file does not exist
1 the file exists
Example
IF EXIST ("@LDRIVE\users.txt")
DISPLAY "@LDRIVE\users.txt"
ENDIF
EXISTKEY (
"Key"
)
Checks for the existence of a registry key.
Parameters
Key
Identifies the key you want to check the existence of.
Returns
0 the key specified exists (NB : this is different from the way the EXIST function works...)
>0 the key does not exist, returncode represents an errorcode
$ReturnCode = ExistKey( "HKEY_CURRENT_USER\Console\Configuration" )
If $ReturnCode = 0
? "Key exists...."
Endif
INGROUP (
"GroupName"
)
INGROUP checks for membership of the current user of a specific network user group.
Notes
- on Windows 95, INGROUP only works on Global groups.
Parameters
GroupName
Identifies the group you want to check the current user's membership for.
Returns
0 the current user is not a member of a group with this name
1 the current user is a member of a global group with this name
2 the current user is a member of a local group with this name
Example
IF INGROUP("Domain Users")
DISPLAY "z:\users.txt"
ENDIF
IF INGROUP("Developers") = 2
? "Member of Local Group developers"
ENDIF
INSTR (
"String1" ,
"String2"
)
INSTR scans string1 for the presence of string2, and if found returns the offset of the first character.
Parameters
String1
The string you want to search in.
String2
The string you want to search for.
Returns
The offset of the 1st character of string2 in string1 (if found). If string2 is not present in string1, the
return value is 0.
Example
$x = INSTR( @DOMAIN , "TEST" ) ; check if domain contains the string "TEST"
LEN (
"String"
)
LEN will return the length of the specified string.
Parameter
String
The string you want to get the length of.
Returns
The length in characters of the string specified.
Example
$x = LEN( @USERID )
LOADKEY (
"Key" ,
"File"
)
Loads a registry key (including subkeys and values) from the file specified.
NB 1 the key is completely overwritten. Any existing values and/or subkeys will be lost.
NB 2 on Windows NT, LOADKEY requires Backup/Restore privileges.
Parameters
Key
The key you want to load the information in. This key needs to exist for the call to be successful.
File
Identifies the file you want to load the information from. This file specified needs to be a legal registry
hive (created by SAVEKEY, or from REGEDT32.EXE).
Returns
If the function succeeds, the return value is 0. If the function fails, the return value represents an
errorcode.
Example
$ReturnCode = LoadKey( "HKEY_CURRENT_USER\EZReg" , "c:\temp\tst.reg" )
If $ReturnCode = 0
? "Key loaded...."
Endif
LOGOFF (
Force
)
Logs off the current user (ie : ends the Windows session).
Parameters
Force
During a log-off operation, applications that are shut down are allowed a specific amount of time to
respond to the logoff request. If the time expires, Windows displays a dialog box that allows the
user to forcibly shut down the application, to retry the logoff, or to cancel the logoff request. If the
Force value is true (ie : non-zero), Windows always forces applications to close and does not
display the dialog box.
Returns
If the function succeeds, the return value is 0. If the function fails, the return value represents an
operating system errorcode.
Example
$RC = LogOff( 0 )
MESSAGEBOX
MESSAGEBOX (
"Message" ,
"Title" ,
Style ,
Timeout
)
Displays a standard Windows dialog box ('popup').
Parameters
Message
The message you want to display in the dialog.
Title
The title you want to the dialog to have.
Style
Optional numeric expression that is the sum of values specifying the number and type of buttons to
display, the icon style to use, the identity of the default button, and the modality. The following table
illustrates the values used and the meaning of each group of values:
Timeout
Optional numeric expression representing the number of seconds after which the dialog should be
terminated automatically. NB : this feature only works if the messagebox dialog is the 'active' window
for the duration of the timeout. If the user switches away from the console in which KiXtart is running,
the messagebox dialog will not be terminated.
Buttons to display
Value Meaning
0 Display OK button only.
1 Display OK and Cancel buttons.
2 Display Abort, Retry, and Ignore buttons.
3 Display Yes, No, and Cancel buttons.
4 Display Yes and No buttons.
5 Display Retry and Cancel buttons.
ICON to display
Value Meaning
16 Stop ICON
32 Questionmark ICON
48 Exclamationmark ICON
64 Information ICON
Default button
Value Meaning
0 First button is default.
256 Second button is default.
512 Third button is default.
Modality
Value Meaning
0 Application modal. The user must respond to the message box before continuing work in the current application.
4096 System modal. All applications are suspended until the user responds to the message box.
The first group of values (1-5) describes the number and type of buttons displayed in the dialog box; the
second group (16, 32, 48, 64) describes the icon style; the third group (0, 256, 512) determines which
button is the default; and the fourth group (0, 4096) determines the modality of the message box. When
adding numbers to create a final value for the argument type, use only one number from each group. If
omitted, the default value for style is 0.
For application modal message boxes, MessageBox displays a maximum of 1024 characters. Longer
messages are truncated after the 1024th character. Message strings longer than 255 characters with no
intervening spaces are truncated after the 255th character. For system modal message boxes, the
number of characters you can display depends on screen resolution and whether or not the string to be
displayed is on one or more lines.
MessageBox breaks lines automatically at the right edge of the dialog box. If you want to set line
breaks yourself, place a linefeed (ANSI character 10) before the first character of the text that is to
begin each new line. For system modal message boxes in Microsoft Windows 3.0 only, the linefeed
character does not cause a line to wrap.
Returns
The value returned by the MessageBox function indicates which button has been selected, as shown in
the following table:
Value Meaning
-1 Timeout : user did not respond to dialog within specified timeout.
1 OK button selected.
2 Cancel button selected.
3 Abort button selected.
4 Retry button selected.
5 Ignore button selected.
6 Yes button selected.
7 No button selected.
If the dialog box displays a Cancel button, pressing the Esc key has the same effect as choosing Cancel.
Example
$Selection = MessageBox( "Do you want to continue ?" , "KiXtart" , 36 )
If $Selection = 6
? "Yes selected, continuing...."
Endif
OPEN (
FileNumber ,
"FileName"
)
Opens the ASCII file referred to by FileName, for the internal buffer indicated by FileNumber. KiXtart
supports a maximum of 10 open files, so FileNumber must be within the range of 1 to 10.
NB the file-IO functions in KiXtart (OPEN, READLINE, CLOSE) are primarily targetted at
handling small configuration files. They are not intended to be used for, for example,
scanning huge files. For the sake of simplicity and speed, the OPEN command reads the
entire ASCII file into memory, and any subsequent READLINE commands actually read
from memory. This design is obviously memory-intensive, but also very fast and simple.
Parameter
FileNumber
A numeric expression indicating the filenumber of the file to open. Possible values range from 1 to 10.
FileName
A string expression indicating the path and name of the ASCII file to open.
Returns
-3 FileNumber already in use.
-2 Invalid FileNumber specified.
-1 Invalid FileName specified.
0 File successfully opened.
>0 some sort of Operating System error (see chapter on possible errorcodes).
Example
IF Open( 3 , @LDRIVE + "\CONFIG\SETTINGS.INI" ) = 0
$x = ReadLine( 3 )
WHILE @ERROR = 0
? "Line read : [" + $x + "]"
$x = ReadLine( 3 )
LOOP
ENDIF
READLINE (
FileNumber
)
Reads a line (ie : a string ending with a <Carriage Return>) from the file indicated by FileNumber. The
string is returned without the trailing <Carriage Return>. If ReadLine encounters an error, @ERROR is
set to the relevant errorcode.
Parameter
FileNumber
A numeric expression indicating the filenumber of the file to open. Possible values range from 1 to 10.
Returns
Line read (if @ERROR = 0).
Possible @ERROR values :
-3 FileNumber not open.
-2 Invalid FileNumber specified.
-1 End of File.
0 Successfully read a line.
Example
IF Open( 3 , @LDRIVE + "\CONFIG\SETTINGS.INI" ) = 0
$x = ReadLine( 3 )
WHILE @ERROR = 0
? "Line read : [" + $x + "]"
$x = ReadLine( 3 )
LOOP
Close ( 3 )
ELSE
BEEP
? "Config file not opened, error code : [" + @ERROR + "]"
ENDIF
READPROFILESTRING
READPROFILESTRING (
"File" ,
"Section" ,
"Key" ,
)
The ReadProfileString function retrieves a string from the specified section in an initialization file.
This function is provided for compatibility with 16-bit Windows-based applications. Win32-based
applications should store initialization information in the registry.
Parameters
File
A string that names the initialization file. If this parameter does not contain a full path to the file,
Windows searches for the file in the Windows directory.
Section
A string that specifies the section containing the key name. If this parameter is empty, the
ReadProfileString function returns all section names in the file.
Key
A string containing the key name whose associated string is to be retrieved. If this parameter is empty,
all key names in the section specified by the Section parameter are returned.
Returns
If the function succeeds, the function returns a string representing the value of the key specified, and
the @ERROR value will be set to 0. If the function fails, the @ERROR value represents an errorcode.
Example
$dev = ReadProfileString( "Windows", "Device" , "win.ini" )
If @ERROR = 0
? "Windows device = " + $dev
Endif
READTYPE (
"Key" ,
"Value"
)
Returns ASCII representation of the type of the value specified.
Parameters
Key
Identifies the key you want to get information on.
Value
Identifies the value you want to get the type of.
Returns
If the function succeeds, the function returns the ASCII representation of the type of the registry value
specified, and the @ERROR value will be set to 0. If the function fails, the @ERROR value represents
an errorcode.
The following types can be returned :
REG_NONE
REG_SZ
REG_EXPAND_SZ
REG_BINARY
REG_DWORD
REG_DWORD_LITTLE_ENDIAN
REG_DWORD_BIG_ENDIAN
REG_LINK
REG_MULTI_SZ
REG_RESOURCE_LIST
REG_FULL_RESOURCE_DESCRIPTOR
Example
$RowsType = ReadType( "HKEY_CURRENT_USER\Console\Configuration" , "WindowRows" )
If @ERROR = 0
? "Type of WindowRows : $RowsType"
Endif
READVALUE (
"Key" ,
"Value"
)
Reads a value from the registry.
Parameters
Key
Identifies the key you want to get information on.
Value
Identifies the value you want to get the value of.
Returns
If the function succeeds, the function returns the ASCII representation of the registry value specified,
and the @ERROR value will be set to 0. If the function fails, the @ERROR value represents an
errorcode.
REG_MULTI_SZ (multi-string) variables are returned with the '|' character as the separator between the
strings. If a string actually contains a '|' character, it will be represented by 2 '|' characters.
REG_DWORD variables are returned in decimal.
Example
$Rows = ReadValue( "HKEY_CURRENT_USER\Console\Configuration" , "WindowRows" )
If @ERROR = 0
? "Number of window-rows : $Rows"
Endif
REDIRECTOUTPUT (
"File"
Overwrite
)
The RedirectOutput function enables you to redirect all screen output to a specific file. If all output is
redirected to a file, AT, BIG, BOX and CLS commands will be ignored.
Parameters
File
A string that names the file to redirect the output to. If this parameter is an empty string (""), output is
redirected to the screen.
Overwrite
Optional numerical value indicating if file to redirect output to should be cleared before any output is
written to it (Overwrite = 1), or if new output should be appended to the file (Overwrite = 0).
Returns
If the function succeeds, the return value will be 0. If the function fails, the return value represents an
operating system errorcode.
Example
IF RedirectOutput( "kixtart.log" ) = 0
? "Opened 'KiXtart.log' at " + @TIME ?
ENDIF
SAVEKEY (
"Key" ,
"File"
)
Saves a key (including subkeys and values) to the file specified.
Parameters
Key
Identifies the key you want to save.
File
Identifies the file you want to save the information in.
NB 1 the destination file is overwritten without warning.
NB 2 on Windows NT, SAVEKEY requires Backup/Restore privileges.
Returns
If the function succeeds, the return value is 0. If the function fails, the return value represents an
errorcode.
Example
$ReturnCode = SaveKey( "HKEY_CURRENT_USER\EZReg" , "c:\temp\tst.reg" )
If $ReturnCode = 0
? "Key saved...."
Endif
SENDMESSAGE (
"Recipient" ,
"Message"
)
Sends a message across the network to another user or workstation.
Parameters
Recipient
Identifies the user or workstation you want to send a message to.
Message
The message you want to send.
Returns
If the function succeeds, the return value is 0. If the function fails, the return value represents an
operating system errorcode.
Example
$ReturnCode = SendMessage( "ADMIN" , @USERID + " logged in at " + @TIME )
If $ReturnCode = 0
? "Message has been sent.."
Endif
SETCONSOLE(
"Mode"
)
The SetConsole function enables you to change the display state of the console in which KiXtart is
running.
Parameters
Mode
String that specifies the new display state. The following table shows the display states that are
supported by this function :
"SHOW" - show console window
"HIDE" - hides console window
"FOREGROUND" - moves console window to foreground
"ALWAYSONTOP" - makes console window topmost window
"MINIMIZE" - minimizes console window
"MAXIMIZE" - maximizes console window
NB if you 'hide' the window, it doesn't really disappear from the system. The window (and
thus the console) remain active, it's just become invisible.
Returns
If the function succeeds, the return value is 0. If the function fails, the return value represents an
errorcode.
Example
If SetConsole ( "FOREGROUND" ) = 0
? "Console moved to foreground......"
Endif
SETDEFAULTPRINTER (
"PrinterName"
)
The SetDefaultPrinter function sets the printer to which applications send any printed documents by
default.
Parameters
PrinterName
String that specifies the name of the printer to set as the default printer.
Returns
If the function succeeds, the return value is 0. If the function fails, the return value represents an
errorcode.
Example
If SetDefaultPrinter ( "hplaser4" ) = 0
? "Set default printer to HP LaserJet 4...."
Endif
SHOWPROGRAMGROUP (
"GroupName",
ShowCommand ,
CommonGroupFlag
)
The SHOWPROGRAMGROUP command instructs Program Manager to minimize, maximize, or
restore the window of an existing group.
Parameters
GroupName
Identifies the group window to be minimized, maximized, or restored.
ShowCommand
Specifies the action Program Manager is to perform on the group window. This parameter is an integer. It must have one of the following values.
Value Action
1 Activates and displays the group window. If the window is minimized or maximized, Windows restores it to its original size and position.
2 Activates the group window and displays it as an icon.
3 Activates the group window and displays it as a maximized window.
4 Displays the group window in its most recent size and position. The window that is currently active remains active.
5 Activates the group window and displays it in its current size and position.
6 Minimizes the group window.
7 Displays the group window as an icon. The currently active window remains active.
8 Displays the group window in its current state. The currently active window remains active.
CommonGroupFlag
Optional numerical parameter, specifying whether the group is a common group or a personal group. If
this parameter is 1, the group being minimized, maximized, or restored is a common group; if it is 0,
the group is a personal group. To minimize, maximize, or restore a common group, the user currently
logged on must have administrative privileges. If this parameter is 1 but the user does not have
administrative privileges, the command fails. This parameter is only applicable on Windows NT
workstations.
Returns
If the function succeeds, the return value is 0. If the function fails, the return value represents an
errorcode.
Example
If ShowProgramGroup( "NewGroup" , 6 , 0 ) = 0
? "NewGroup has been minimized...."
Endif
SHUTDOWN (
"System" ,
"Message" ,
Wait ,
Force ,
Reboot
)
Shutdown enables you to shutdown or reboot the local or remote system.
Parameters
System
The name of the system you want to shutdown or reboot (where an empty string"" identifies the local
system).
Message
String that specifies a message to display in the shutdown dialog box.
Wait
Optional parameter specifying the time (in seconds) that the dialog should be displayed. While this dialog box is displayed, the shutdown can be stopped by the AbortSystemShutdown function.
If Wait is not zero, Shutdown displays a dialog box on the specified computer. The dialog box displays the name of the user who called the function, displays the message specified by the Message parameter, and prompts the user to log off. The dialog box beeps when it is created and remains on top of other windows in the system. The dialog box can be moved but not closed. A timer counts down the remaining time before a forced shutdown. If the user logs off, the system shuts down immediately. Otherwise, the computer is shut down when the timer expires.
If Wait is zero, the computer shuts down without displaying the dialog box, and the shutdown
cannot be stopped by AbortSystemShutdown.
Force
Specifies whether applications with unsaved changes are to be forcibly closed. If this parameter is
non-zero, such applications are closed. If this parameter is zero, a dialog box is displayed prompting
the user to close the applications..
Reboot
Optional parameter, specifying whether the computer is to restart immediately after shutting down.
If this parameter is non-zero, the computer is to restart. If this parameter is zero, the system flushes
all caches to disk, clears the screen, and displays a message indicating that it is safe to power down.
Returns
If the function succeeds, the return value is 0. If the function fails, the return value represents an
operating system errorcode.
Example
$RC = Shutdown( "" , "System is being rebooted to enable new settings." , 60, 0 , 1 )
SUBSTR (
"String" ,
Start ,
Length
)
SUBSTR returns a part of string1 indicated by the starting position and the length.
Parameters
String
The string you want to get a substring of.
Start
Numeric value representing the offset into the string where you want to the substring to start.
Length
Numeric value representing the lenght of the substring you want to get from the string.
Returns
Stringvalue representing substring of string1 indicated by the starting position and the length.
Example
$x = SUBSTR( @USERID , LEN( @USERID) - 2 , 2 ) ; get the last 2 chars of the userid
WRITEPROFILESTRING (
"File" ,
"Section" ,
"Key" ,
"String"
)
The WriteProfileString function copies a string into the specified section of the specified initialization
file. This function is provided for compatibility with 16-bit Windows-based applications. Win32-based
applications should store initialization information in the registry.
Parameters
File
String that names the initialization file.
Section
String containing the name of the section to which the string will be copied. If the section does not
exist, it is created. The name of the section is case-independent; the string can be any combination of
uppercase and lowercase letters.
Key
String containing the name of the key to be associated with a string. If the key does not exist in the
specified section, it is created. If this parameter is empty, the entire section, including all entries within
the section, is deleted.
String
String to be written to the file. If this parameter is empty, the key pointed to by the Key parameter is deleted.
Windows 95: This platform does not support the use of the TAB (\t) character as part of this
parameter.
Returns
If the function succeeds, the return value is 0. If the function fails, the return value represents an errorcode.
WRITEVALUE (
"Key" ,
"Value" ,
"Expression" ,
"Type"
)
(Re-)writes value with expression of specified type.
Parameters
Key
Identifies the key you want to write a value to.
Value
Identifies the name of the value.
Expression
The actual data you want to store.
The strings of a REG_MULTI_SZ (multi-string) variable should be separated by a '|' character. If a
single string actually contains a '|' character, you should specify 2 '|' characters in the string.
Type
Identifies the type of the value.
The following types can be written :
REG_NONE
REG_SZ
REG_EXPAND_SZ
REG_BINARY
REG_DWORD
REG_DWORD_LITTLE_ENDIAN
REG_DWORD_BIG_ENDIAN
REG_LINK
REG_MULTI_SZ
REG_RESOURCE_LIST
REG_FULL_RESOURCE_DESCRIPTOR
Returns
If the function succeeds, the return value is 0. If the function fails, the return value represents an
errorcode.
Example
WriteValue( "EZReg\Test" , "A MultiString variable", "Line 1|Line 2|Line 3 with a || in it|"
"REG_MULTI_SZ" )
If @ERROR = 0
? "Ok, value written to the registry"
Endif
1. if @ADDRESS returns an empty string, you are probably not running a protocol with a
NetBIOS interface on LANA 0.
2. if @DOMAIN returns an empty string, KiXtart's call to one of the LM API's failed. On
Windows NT, this probably means you are not running the workstation service. On Windows
95, this may mean that one of the support dlls (KX16.DLL, KX32.DLL or NETAPI.DLL), is
unavailable. If you suspect this is the case, please make sure both dlls are present either in one
of the directories on the path, or in the directory where KIX32.EXE resides.
3. if KiXtart seems to 'hang' for a while each time you run it, it is likely that KiXtart is having
trouble connecting to your logonserver (to retrieve your user information). This can easily be
checked by determining the name of the logonserver (@LSERVER), and trying to connect to
it manually.
4. if you are using the CALL command, and strange things appear to be happening to your
variables, remember that all variables are global.
5. when in doubt : enclose any literal(s) in quotes. KiXtart was designed to be as free-format as
possible, and whereas this is fine most of the time, it can sometimes produce unexpected side-effects. Notorious situations are servernames containing a '-'.
Example
USE X: \\SRV-01\SHARE ; will fail
USE X: "\\SRV-01\SHARE" ; will work fine
6. if you encounter inexplicable errors ("label not found", "unknown command"), in a seemingly
faultless script, it is pretty likely that there is an unmatched quote somewhere in the script
(unmatched quotes are not easy to catch, and can thoroughly upset the interpreter).
7. yes : screen output in KiXtart 95 is a lot slower compared to the original DOS-based version of KiXtart. This is caused by the fact that being a true 32-bit application, KiXtart can only write to the screen using the Win32 Console API, which is 'not as fast' as the direct screen output used by the DOS version of KiXtart.
Although KiXtart is provided strictly on an 'AS IS' basis, and no official support for it is available from Microsoft, any feedback on the program is welcome, and suggestions or problems will be investigated and considered for a future version of KiXtart.
Below is a list of known issues, some of which may be fixed in a future update of Windows 95/NT,
and some may be fixed in an update of KiXtart :
1 Screen scrolls when text is output to bottom right position of the screen due to an issue with
the Console API on Windows 95.
2 Color is sometimes garbled when the screen is scrolled due to a problem with color-attribute
handling on Windows 95.
3 Due to a limitation in the Net API on Windows 95, INGROUP only works on Global Groups
4 The LockLog utility (shipped with the MS-DOS based version of KiXtart) does not work on
Windows 95.
5 KiX32 currently does not support LMSCRIPT-emulation (as did the MS-DOS based version).
Basically, this feature is no longer necessary because memory is (should) no longer be an
issue. However, if this is an issue for you, please let me know, and I'll consider implementing
this feature anyway.
6 SET and SETM commands currently don't work on Windows 95. This will hopefully be
addressed in a future update of KiX32. In the meantime, the only workaround available is to
run WINSET.EXE (available on the Windows 95 CD) from within KiX32 using the SHELL
command.
7 On Windows 95, SAVEKEY produces a Hidden, System, Read-Only file in the Windows
system directory (whereas on Windows NT, the command produces a 'normal' file in the
current directory). In any case, the file is ok, and can be used with LOADKEY (after you have
made it visible with ATTRIB).
8 On Windows 95, if you remove a network drive (eg : "USE E: /d") that was redirected using
the Windows interface (ie in 'My Computer' or in the Explorer), the drive will remain visible
in the Windows interface as a 'disabled/ghosted' drive (and the drive will be reconnected as
soon as the user clicks on it. To work around this, after removing the drive, simply also delete
the corresponding key from the registry : HKEY_CURRENT_USER\Network\Persistent\
In other words, to completely delete a drive :
USE E: /d
DELKEY( "HKEY_CURRENT_USER\Network\Persistent\E" )
9 on Windows 95, 2 support dlls are required for retrieval of the network information and for
playing spk-files. These dll's (KX32.DLL and KX16.DLL) should be present anywhere on the
PATH of your machine, or in the directory where KIX32.EXE resides.
10. on Windows 95, due to a sharing issue in MSNET32.DLL, the logonscript is sometimes completely skipped. This issue was addressed in an update of MSNET32.DLL (version 4.00.951 (4/18/96, 60,416 bytes)) and later. The latest version of this file can be obtained from your local Microsoft PSS contact (refer to Q150589).
About the program.
KiXtart 95 was designed and developed by Ruud van Velsen of Microsoft Benelux.
The program was developed using the Microsoft Visual C 4.0, Microsoft C 7.00, Microsoft MASM
6.11 and the Windows 32 Software Development Kit.
The ".SPK" format used by the PLAY command was originally designed by Gordon E. Peterson II who
used it for a (rather cool) 'shareware' PC speaker device driver he wrote back in those glorious days
when PC XT's were 'powerful desktop machines' and AT's were 'ideal LAN servers'. The ".SPK" files
provided were translated from BASIC and Assembler programs gathered from various public domain
sources. My sincerest thanks to all the authors involved (including of course the writers of the original
songs).
As for the future : KiXtart is continuously extended, enhanced and improved based on your feedback.
So, if you have suggestions or ideas concerning KiXtart, please let me know either thru your local
Microsoft contact, or by sending email to RUUDV@Microsoft.com.
THE INFORMATION AND CODE PROVIDED AS PART OF KIXTART (HEREUNDER
COLLECTIVELY REFERRED TO AS "SOFTWARE") IS PROVIDED AS IS WITHOUT
WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS
SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT,
INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL
DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED
OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE
EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL
DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.
This Software may be copied and distributed royalty-free subject to the following conditions:
1. You must copy all Software without modification and must include all pages.
2. You must place all copyright notices and other protective disclaimers and notices contained on
the Software on all copies of the Software.
3. You may not distribute this Software for profit.
4. You agree to indemnify, hold harmless, and defend Microsoft and its suppliers from and
against any claims or lawsuits, including attorneys' fees, that arise or result from the use or
distribution of the Software.
Copyright (c) 1995 Microsoft Corporation. All rights reserved.
To find out if a KiXtart command or function is successful, you can always check the @ERROR macro
(most functions also return this value). If @ERROR is zero, the previous command or function was
successful. If @ERROR is non-zero, the value corresponds to the errorcode returned by the most
recently executed Win32 API. What follows is a list of all possible errorcodes that could be returned by
the Win32 API. Obviously, only a limited number of errorcodes are actually relevant for KiXtart.
0L NO_ERROR
0L ERROR_SUCCESS
1L ERROR_INVALID_FUNCTION
2L ERROR_FILE_NOT_FOUND
3L ERROR_PATH_NOT_FOUND
4L ERROR_TOO_MANY_OPEN_FILES
5L ERROR_ACCESS_DENIED
6L ERROR_INVALID_HANDLE
7L ERROR_ARENA_TRASHED
8L ERROR_NOT_ENOUGH_MEMORY
9L ERROR_INVALID_BLOCK
10L ERROR_BAD_ENVIRONMENT
11L ERROR_BAD_FORMAT
12L ERROR_INVALID_ACCESS
13L ERROR_INVALID_DATA
14L ERROR_OUTOFMEMORY
15L ERROR_INVALID_DRIVE
16L ERROR_CURRENT_DIRECTORY
17L ERROR_NOT_SAME_DEVICE
18L ERROR_NO_MORE_FILES
19L ERROR_WRITE_PROTECT
20L ERROR_BAD_UNIT
21L ERROR_NOT_READY
22L ERROR_BAD_COMMAND
23L ERROR_CRC
24L ERROR_BAD_LENGTH
25L ERROR_SEEK
26L ERROR_NOT_DOS_DISK
27L ERROR_SECTOR_NOT_FOUND
28L ERROR_OUT_OF_PAPER
29L ERROR_WRITE_FAULT
30L ERROR_READ_FAULT
31L ERROR_GEN_FAILURE
32L ERROR_SHARING_VIOLATION
33L ERROR_LOCK_VIOLATION
34L ERROR_WRONG_DISK
36L ERROR_SHARING_BUFFER_EXCEEDED
38L ERROR_HANDLE_EOF
39L ERROR_HANDLE_DISK_FULL
50L ERROR_NOT_SUPPORTED
51L ERROR_REM_NOT_LIST
52L ERROR_DUP_NAME
53L ERROR_BAD_NETPATH
54L ERROR_NETWORK_BUSY
55L ERROR_DEV_NOT_EXIST
56L ERROR_TOO_MANY_CMDS
57L ERROR_ADAP_HDW_ERR
58L ERROR_BAD_NET_RESP
59L ERROR_UNEXP_NET_ERR
60L ERROR_BAD_REM_ADAP
61L ERROR_PRINTQ_FULL
62L ERROR_NO_SPOOL_SPACE
63L ERROR_PRINT_CANCELLED
64L ERROR_NETNAME_DELETED
65L ERROR_NETWORK_ACCESS_DENIED
66L ERROR_BAD_DEV_TYPE
67L ERROR_BAD_NET_NAME
68L ERROR_TOO_MANY_NAMES
69L ERROR_TOO_MANY_SESS
70L ERROR_SHARING_PAUSED
71L ERROR_REQ_NOT_ACCEP
72L ERROR_REDIR_PAUSED
80L ERROR_FILE_EXISTS
82L ERROR_CANNOT_MAKE
83L ERROR_FAIL_I24
84L ERROR_OUT_OF_STRUCTURES
85L ERROR_ALREADY_ASSIGNED
86L ERROR_INVALID_PASSWORD
87L ERROR_INVALID_PARAMETER
88L ERROR_NET_WRITE_FAULT
89L ERROR_NO_PROC_SLOTS
100L ERROR_TOO_MANY_SEMAPHORES
101L ERROR_EXCL_SEM_ALREADY_OWNED
102L ERROR_SEM_IS_SET
103L ERROR_TOO_MANY_SEM_REQUESTS
104L ERROR_INVALID_AT_INTERRUPT_TIME
105L ERROR_SEM_OWNER_DIED
106L ERROR_SEM_USER_LIMIT
107L ERROR_DISK_CHANGE
108L ERROR_DRIVE_LOCKED
109L ERROR_BROKEN_PIPE
110L ERROR_OPEN_FAILED
111L ERROR_BUFFER_OVERFLOW
112L ERROR_DISK_FULL
113L ERROR_NO_MORE_SEARCH_HANDLES
114L ERROR_INVALID_TARGET_HANDLE
117L ERROR_INVALID_CATEGORY
118L ERROR_INVALID_VERIFY_SWITCH
119L ERROR_BAD_DRIVER_LEVEL
120L ERROR_CALL_NOT_IMPLEMENTED
121L ERROR_SEM_TIMEOUT
122L ERROR_INSUFFICIENT_BUFFER
123L ERROR_INVALID_NAME
124L ERROR_INVALID_LEVEL
125L ERROR_NO_VOLUME_LABEL
126L ERROR_MOD_NOT_FOUND
127L ERROR_PROC_NOT_FOUND
128L ERROR_WAIT_NO_CHILDREN
129L ERROR_CHILD_NOT_COMPLETE
130L ERROR_DIRECT_ACCESS_HANDLE
131L ERROR_NEGATIVE_SEEK
132L ERROR_SEEK_ON_DEVICE
133L ERROR_IS_JOIN_TARGET
134L ERROR_IS_JOINED
135L ERROR_IS_SUBSTED
136L ERROR_NOT_JOINED
137L ERROR_NOT_SUBSTED
138L ERROR_JOIN_TO_JOIN
139L ERROR_SUBST_TO_SUBST
140L ERROR_JOIN_TO_SUBST
141L ERROR_SUBST_TO_JOIN
142L ERROR_BUSY_DRIVE
143L ERROR_SAME_DRIVE
144L ERROR_DIR_NOT_ROOT
145L ERROR_DIR_NOT_EMPTY
146L ERROR_IS_SUBST_PATH
147L ERROR_IS_JOIN_PATH
148L ERROR_PATH_BUSY
149L ERROR_IS_SUBST_TARGET
150L ERROR_SYSTEM_TRACE
151L ERROR_INVALID_EVENT_COUNT
152L ERROR_TOO_MANY_MUXWAITERS
153L ERROR_INVALID_LIST_FORMAT
154L ERROR_LABEL_TOO_LONG
155L ERROR_TOO_MANY_TCBS
156L ERROR_SIGNAL_REFUSED
157L ERROR_DISCARDED
158L ERROR_NOT_LOCKED
159L ERROR_BAD_THREADID_ADDR
160L ERROR_BAD_ARGUMENTS
161L ERROR_BAD_PATHNAME
162L ERROR_SIGNAL_PENDING
164L ERROR_MAX_THRDS_REACHED
167L ERROR_LOCK_FAILED
170L ERROR_BUSY
173L ERROR_CANCEL_VIOLATION
174L ERROR_ATOMIC_LOCKS_NOT_SUPPORTED
180L ERROR_INVALID_SEGMENT_NUMBER
182L ERROR_INVALID_ORDINAL
183L ERROR_ALREADY_EXISTS
186L ERROR_INVALID_FLAG_NUMBER
187L ERROR_SEM_NOT_FOUND
188L ERROR_INVALID_STARTING_CODESEG
189L ERROR_INVALID_STACKSEG
190L ERROR_INVALID_MODULETYPE
191L ERROR_INVALID_EXE_SIGNATURE
192L ERROR_EXE_MARKED_INVALID
193L ERROR_BAD_EXE_FORMAT
194L ERROR_ITERATED_DATA_EXCEEDS_64k
195L ERROR_INVALID_MINALLOCSIZE
196L ERROR_DYNLINK_FROM_INVALID_RING
197L ERROR_IOPL_NOT_ENABLED
198L ERROR_INVALID_SEGDPL
199L ERROR_AUTODATASEG_EXCEEDS_64k
200L ERROR_RING2SEG_MUST_BE_MOVABLE
201L ERROR_RELOC_CHAIN_XEEDS_SEGLIM
202L ERROR_INFLOOP_IN_RELOC_CHAIN
203L ERROR_ENVVAR_NOT_FOUND
205L ERROR_NO_SIGNAL_SENT
206L ERROR_FILENAME_EXCED_RANGE
207L ERROR_RING2_STACK_IN_USE
208L ERROR_META_EXPANSION_TOO_LONG
209L ERROR_INVALID_SIGNAL_NUMBER
210L ERROR_THREAD_1_INACTIVE
212L ERROR_LOCKED
214L ERROR_TOO_MANY_MODULES
215L ERROR_NESTING_NOT_ALLOWED
230L ERROR_BAD_PIPE
231L ERROR_PIPE_BUSY
232L ERROR_NO_DATA
233L ERROR_PIPE_NOT_CONNECTED
234L ERROR_MORE_DATA
240L ERROR_VC_DISCONNECTED
254L ERROR_INVALID_EA_NAME
255L ERROR_EA_LIST_INCONSISTENT
259L ERROR_NO_MORE_ITEMS
266L ERROR_CANNOT_COPY
267L ERROR_DIRECTORY
275L ERROR_EAS_DIDNT_FIT
276L ERROR_EA_FILE_CORRUPT
277L ERROR_EA_TABLE_FULL
278L ERROR_INVALID_EA_HANDLE
282L ERROR_EAS_NOT_SUPPORTED
288L ERROR_NOT_OWNER
298L ERROR_TOO_MANY_POSTS
317L ERROR_MR_MID_NOT_FOUND
487L ERROR_INVALID_ADDRESS
534L ERROR_ARITHMETIC_OVERFLOW
535L ERROR_PIPE_CONNECTED
536L ERROR_PIPE_LISTENING
994L ERROR_EA_ACCESS_DENIED
995L ERROR_OPERATION_ABORTED
996L ERROR_IO_INCOMPLETE
997L ERROR_IO_PENDING
998L ERROR_NOACCESS
999L ERROR_SWAPERROR
1001L ERROR_STACK_OVERFLOW
1002L ERROR_INVALID_MESSAGE
1003L ERROR_CAN_NOT_COMPLETE
1004L ERROR_INVALID_FLAGS
1005L ERROR_UNRECOGNIZED_VOLUME
1006L ERROR_FILE_INVALID
1007L ERROR_FULLSCREEN_MODE
1008L ERROR_NO_TOKEN
1009L ERROR_BADDB
1010L ERROR_BADKEY
1011L ERROR_CANTOPEN
1012L ERROR_CANTREAD
1013L ERROR_CANTWRITE
1014L ERROR_REGISTRY_RECOVERED
1015L ERROR_REGISTRY_CORRUPT
1016L ERROR_REGISTRY_IO_FAILED
1017L ERROR_NOT_REGISTRY_FILE
1018L ERROR_KEY_DELETED
1019L ERROR_NO_LOG_SPACE
1020L ERROR_KEY_HAS_CHILDREN
1021L ERROR_CHILD_MUST_BE_VOLATILE
1022L ERROR_NOTIFY_ENUM_DIR
1051L ERROR_DEPENDENT_SERVICES_RUNNING
1052L ERROR_INVALID_SERVICE_CONTROL
1053L ERROR_SERVICE_REQUEST_TIMEOUT
1054L ERROR_SERVICE_NO_THREAD
1055L ERROR_SERVICE_DATABASE_LOCKED
1056L ERROR_SERVICE_ALREADY_RUNNING
1057L ERROR_INVALID_SERVICE_ACCOUNT
1058L ERROR_SERVICE_DISABLED
1059L ERROR_CIRCULAR_DEPENDENCY
1060L ERROR_SERVICE_DOES_NOT_EXIST
1061L ERROR_SERVICE_CANNOT_ACCEPT_CTRL
1062L ERROR_SERVICE_NOT_ACTIVE
1063L ERROR_FAILED_SERVICE_CONTROLLER_CONNECT
1064L ERROR_EXCEPTION_IN_SERVICE
1065L ERROR_DATABASE_DOES_NOT_EXIST
1066L ERROR_SERVICE_SPECIFIC_ERROR
1067L ERROR_PROCESS_ABORTED
1068L ERROR_SERVICE_DEPENDENCY_FAIL
1069L ERROR_SERVICE_LOGON_FAILED
1070L ERROR_SERVICE_START_HANG
1071L ERROR_INVALID_SERVICE_LOCK
1072L ERROR_SERVICE_MARKED_FOR_DELETE
1073L ERROR_SERVICE_EXISTS
1074L ERROR_ALREADY_RUNNING_LKG
1075L ERROR_SERVICE_DEPENDENCY_DELETED
1076L ERROR_BOOT_ALREADY_ACCEPTED
1077L ERROR_SERVICE_NEVER_STARTED
1078L ERROR_DUPLICATE_SERVICE_NAME
1100L ERROR_END_OF_MEDIA
1101L ERROR_FILEMARK_DETECTED
1102L ERROR_BEGINNING_OF_MEDIA
1103L ERROR_SETMARK_DETECTED
1104L ERROR_NO_DATA_DETECTED
1105L ERROR_PARTITION_FAILURE
1106L ERROR_INVALID_BLOCK_LENGTH
1107L ERROR_DEVICE_NOT_PARTITIONED
1108L ERROR_UNABLE_TO_LOCK_MEDIA
1109L ERROR_UNABLE_TO_UNLOAD_MEDIA
1110L ERROR_MEDIA_CHANGED
1111L ERROR_BUS_RESET
1112L ERROR_NO_MEDIA_IN_DRIVE
1113L ERROR_NO_UNICODE_TRANSLATION
1114L ERROR_DLL_INIT_FAILED
1115L ERROR_SHUTDOWN_IN_PROGRESS
1116L ERROR_NO_SHUTDOWN_IN_PROGRESS
1117L ERROR_IO_DEVICE
1118L ERROR_SERIAL_NO_DEVICE
1119L ERROR_IRQ_BUSY
1120L ERROR_MORE_WRITES
1121L ERROR_COUNTER_TIMEOUT
1122L ERROR_FLOPPY_ID_MARK_NOT_FOUND
1123L ERROR_FLOPPY_WRONG_CYLINDER
1124L ERROR_FLOPPY_UNKNOWN_ERROR
1125L ERROR_FLOPPY_BAD_REGISTERS
1126L ERROR_DISK_RECALIBRATE_FAILED
1127L ERROR_DISK_OPERATION_FAILED
1128L ERROR_DISK_RESET_FAILED
1129L ERROR_EOM_OVERFLOW
1130L ERROR_NOT_ENOUGH_SERVER_MEMORY
1131L ERROR_POSSIBLE_DEADLOCK
1132L ERROR_MAPPED_ALIGNMENT
1140L ERROR_SET_POWER_STATE_VETOED
1141L ERROR_SET_POWER_STATE_FAILED
1150L ERROR_OLD_WIN_VERSION
1151L ERROR_APP_WRONG_OS
1152L ERROR_SINGLE_INSTANCE_APP
1153L ERROR_RMODE_APP
1154L ERROR_INVALID_DLL
1155L ERROR_NO_ASSOCIATION
1156L ERROR_DDE_FAIL
1157L ERROR_DLL_NOT_FOUND
1200L ERROR_BAD_DEVICE
1201L ERROR_CONNECTION_UNAVAIL
1202L ERROR_DEVICE_ALREADY_REMEMBERED
1203L ERROR_NO_NET_OR_BAD_PATH
1204L ERROR_BAD_PROVIDER
1205L ERROR_CANNOT_OPEN_PROFILE
1206L ERROR_BAD_PROFILE
1207L ERROR_NOT_CONTAINER
1208L ERROR_EXTENDED_ERROR
1209L ERROR_INVALID_GROUPNAME
1210L ERROR_INVALID_COMPUTERNAME
1211L ERROR_INVALID_EVENTNAME
1212L ERROR_INVALID_DOMAINNAME
1213L ERROR_INVALID_SERVICENAME
1214L ERROR_INVALID_NETNAME
1215L ERROR_INVALID_SHARENAME
1216L ERROR_INVALID_PASSWORDNAME
1217L ERROR_INVALID_MESSAGENAME
1218L ERROR_INVALID_MESSAGEDEST
1219L ERROR_SESSION_CREDENTIAL_CONFLICT
1220L ERROR_REMOTE_SESSION_LIMIT_EXCEEDED
1221L ERROR_DUP_DOMAINNAME
1247L ERROR_ALREADY_INITIALIZED
1248L ERROR_NO_MORE_DEVICES
1300L ERROR_NOT_ALL_ASSIGNED
1301L ERROR_SOME_NOT_MAPPED
1302L ERROR_NO_QUOTAS_FOR_ACCOUNT
1303L ERROR_LOCAL_USER_SESSION_KEY
1304L ERROR_NULL_LM_PASSWORD
1305L ERROR_UNKNOWN_REVISION
1306L ERROR_REVISION_MISMATCH
1307L ERROR_INVALID_OWNER
1308L ERROR_INVALID_PRIMARY_GROUP
1309L ERROR_NO_IMPERSONATION_TOKEN
1310L ERROR_CANT_DISABLE_MANDATORY
1311L ERROR_NO_LOGON_SERVERS
1312L ERROR_NO_SUCH_LOGON_SESSION
1313L ERROR_NO_SUCH_PRIVILEGE
1314L ERROR_PRIVILEGE_NOT_HELD
1315L ERROR_INVALID_ACCOUNT_NAME
1316L ERROR_USER_EXISTS
1317L ERROR_NO_SUCH_USER
1318L ERROR_GROUP_EXISTS
1319L ERROR_NO_SUCH_GROUP
1320L ERROR_MEMBER_IN_GROUP
1321L ERROR_MEMBER_NOT_IN_GROUP
1322L ERROR_LAST_ADMIN
1323L ERROR_WRONG_PASSWORD
1324L ERROR_ILL_FORMED_PASSWORD
1325L ERROR_PASSWORD_RESTRICTION
1326L ERROR_LOGON_FAILURE
1327L ERROR_ACCOUNT_RESTRICTION
1328L ERROR_INVALID_LOGON_HOURS
1329L ERROR_INVALID_WORKSTATION
1330L ERROR_PASSWORD_EXPIRED
1331L ERROR_ACCOUNT_DISABLED
1332L ERROR_NONE_MAPPED
1333L ERROR_TOO_MANY_LUIDS_REQUESTED
1334L ERROR_LUIDS_EXHAUSTED
1335L ERROR_INVALID_SUB_AUTHORITY
1336L ERROR_INVALID_ACL
1337L ERROR_INVALID_SID
1338L ERROR_INVALID_SECURITY_DESCR
1340L ERROR_BAD_INHERITANCE_ACL
1341L ERROR_SERVER_DISABLED
1342L ERROR_SERVER_NOT_DISABLED
1343L ERROR_INVALID_ID_AUTHORITY
1344L ERROR_ALLOTTED_SPACE_EXCEEDED
1345L ERROR_INVALID_GROUP_ATTRIBUTES
1346L ERROR_BAD_IMPERSONATION_LEVEL
1347L ERROR_CANT_OPEN_ANONYMOUS
1348L ERROR_BAD_VALIDATION_CLASS
1349L ERROR_BAD_TOKEN_TYPE
1350L ERROR_NO_SECURITY_ON_OBJECT
1351L ERROR_CANT_ACCESS_DOMAIN_INFO
1352L ERROR_INVALID_SERVER_STATE
1353L ERROR_INVALID_DOMAIN_STATE
1354L ERROR_INVALID_DOMAIN_ROLE
1355L ERROR_NO_SUCH_DOMAIN
1356L ERROR_DOMAIN_EXISTS
1357L ERROR_DOMAIN_LIMIT_EXCEEDED
1358L ERROR_INTERNAL_DB_CORRUPTION
1359L ERROR_INTERNAL_ERROR
1360L ERROR_GENERIC_NOT_MAPPED
1361L ERROR_BAD_DESCRIPTOR_FORMAT
1362L ERROR_NOT_LOGON_PROCESS
1363L ERROR_LOGON_SESSION_EXISTS
1364L ERROR_NO_SUCH_PACKAGE
1365L ERROR_BAD_LOGON_SESSION_STATE
1366L ERROR_LOGON_SESSION_COLLISION
1367L ERROR_INVALID_LOGON_TYPE
1368L ERROR_CANNOT_IMPERSONATE
1369L ERROR_RXACT_INVALID_STATE
1370L ERROR_RXACT_COMMIT_FAILURE
1371L ERROR_SPECIAL_ACCOUNT
1372L ERROR_SPECIAL_GROUP
1373L ERROR_SPECIAL_USER
1374L ERROR_MEMBERS_PRIMARY_GROUP
1375L ERROR_TOKEN_ALREADY_IN_USE
1376L ERROR_NO_SUCH_ALIAS
1377L ERROR_MEMBER_NOT_IN_ALIAS
1378L ERROR_MEMBER_IN_ALIAS
1379L ERROR_ALIAS_EXISTS
1380L ERROR_LOGON_NOT_GRANTED
1381L ERROR_TOO_MANY_SECRETS
1382L ERROR_SECRET_TOO_LONG
1383L ERROR_INTERNAL_DB_ERROR
1384L ERROR_TOO_MANY_CONTEXT_IDS
1385L ERROR_LOGON_TYPE_NOT_GRANTED
1386L ERROR_NT_CROSS_ENCRYPTION_REQUIRED
1387L ERROR_NO_SUCH_MEMBER
1388L ERROR_INVALID_MEMBER
1389L ERROR_TOO_MANY_SIDS
1390L ERROR_LM_CROSS_ENCRYPTION_REQUIRED
1391L ERROR_NO_INHERITANCE
1392L ERROR_FILE_CORRUPT
1393L ERROR_DISK_CORRUPT
1394L ERROR_NO_USER_SESSION_KEY
1395L ERROR_LICENSE_QUOTA_EXCEEDED
1400L ERROR_INVALID_WINDOW_HANDLE
1401L ERROR_INVALID_MENU_HANDLE
1402L ERROR_INVALID_CURSOR_HANDLE
1403L ERROR_INVALID_ACCEL_HANDLE
1404L ERROR_INVALID_HOOK_HANDLE
1405L ERROR_INVALID_DWP_HANDLE
1406L ERROR_TLW_WITH_WSCHILD
1407L ERROR_CANNOT_FIND_WND_CLASS
1408L ERROR_WINDOW_OF_OTHER_THREAD
1409L ERROR_HOTKEY_ALREADY_REGISTERED
1410L ERROR_CLASS_ALREADY_EXISTS
1411L ERROR_CLASS_DOES_NOT_EXIST
1412L ERROR_CLASS_HAS_WINDOWS
1413L ERROR_INVALID_INDEX
1414L ERROR_INVALID_ICON_HANDLE
1415L ERROR_PRIVATE_DIALOG_INDEX
1416L ERROR_LISTBOX_ID_NOT_FOUND
1417L ERROR_NO_WILDCARD_CHARACTERS
1418L ERROR_CLIPBOARD_NOT_OPEN
1419L ERROR_HOTKEY_NOT_REGISTERED
1420L ERROR_WINDOW_NOT_DIALOG
1421L ERROR_CONTROL_ID_NOT_FOUND
1422L ERROR_INVALID_COMBOBOX_MESSAGE
1423L ERROR_WINDOW_NOT_COMBOBOX
1424L ERROR_INVALID_EDIT_HEIGHT
1425L ERROR_DC_NOT_FOUND
1426L ERROR_INVALID_HOOK_FILTER
1427L ERROR_INVALID_FILTER_PROC
1428L ERROR_HOOK_NEEDS_HMOD
1429L ERROR_GLOBAL_ONLY_HOOK
1430L ERROR_JOURNAL_HOOK_SET
1431L ERROR_HOOK_NOT_INSTALLED
1432L ERROR_INVALID_LB_MESSAGE
1433L ERROR_SETCOUNT_ON_BAD_LB
1434L ERROR_LB_WITHOUT_TABSTOPS
1435L ERROR_DESTROY_OBJECT_OF_OTHER_THREAD
1436L ERROR_CHILD_WINDOW_MENU
1437L ERROR_NO_SYSTEM_MENU
1438L ERROR_INVALID_MSGBOX_STYLE
1439L ERROR_INVALID_SPI_VALUE
1440L ERROR_SCREEN_ALREADY_LOCKED
1441L ERROR_HWNDS_HAVE_DIFFERENT_PARENT
1442L ERROR_NOT_CHILD_WINDOW
1443L ERROR_INVALID_GW_COMMAND
1444L ERROR_INVALID_THREAD_ID
1445L ERROR_NON_MDICHILD_WINDOW
1446L ERROR_POPUP_ALREADY_ACTIVE
1447L ERROR_NO_SCROLLBARS
1448L ERROR_INVALID_SCROLLBAR_RANGE
1449L ERROR_INVALID_SHOWWIN_COMMAND
1500L ERROR_EVENTLOG_FILE_CORRUPT
1501L ERROR_EVENTLOG_CANT_START
1502L ERROR_LOG_FILE_FULL
1503L ERROR_EVENTLOG_FILE_CHANGED
1700L RPC_S_INVALID_STRING_BINDING
1701L RPC_S_WRONG_KIND_OF_BINDING
1702L RPC_S_INVALID_BINDING
1703L RPC_S_PROTSEQ_NOT_SUPPORTED
1704L RPC_S_INVALID_RPC_PROTSEQ
1705L RPC_S_INVALID_STRING_UUID
1706L RPC_S_INVALID_ENDPOINT_FORMAT
1707L RPC_S_INVALID_NET_ADDR
1708L RPC_S_NO_ENDPOINT_FOUND
1709L RPC_S_INVALID_TIMEOUT
1710L RPC_S_OBJECT_NOT_FOUND
1711L RPC_S_ALREADY_REGISTERED
1712L RPC_S_TYPE_ALREADY_REGISTERED
1713L RPC_S_ALREADY_LISTENING
1714L RPC_S_NO_PROTSEQS_REGISTERED
1715L RPC_S_NOT_LISTENING
1716L RPC_S_UNKNOWN_MGR_TYPE
1717L RPC_S_UNKNOWN_IF
1718L RPC_S_NO_BINDINGS
1719L RPC_S_NO_PROTSEQS
1720L RPC_S_CANT_CREATE_ENDPOINT
1721L RPC_S_OUT_OF_RESOURCES
1722L RPC_S_SERVER_UNAVAILABLE
1723L RPC_S_SERVER_TOO_BUSY
1724L RPC_S_INVALID_NETWORK_OPTIONS
1725L RPC_S_NO_CALL_ACTIVE
1726L RPC_S_CALL_FAILED
1727L RPC_S_CALL_FAILED_DNE
1728L RPC_S_PROTOCOL_ERROR
1730L RPC_S_UNSUPPORTED_TRANS_SYN
1731L RPC_S_SERVER_OUT_OF_MEMORY
1732L RPC_S_UNSUPPORTED_TYPE
1733L RPC_S_INVALID_TAG
1734L RPC_S_INVALID_BOUND
1735L RPC_S_NO_ENTRY_NAME
1736L RPC_S_INVALID_NAME_SYNTAX
1737L RPC_S_UNSUPPORTED_NAME_SYNTAX
1739L RPC_S_UUID_NO_ADDRESS
1740L RPC_S_DUPLICATE_ENDPOINT
1741L RPC_S_UNKNOWN_AUTHN_TYPE
1742L RPC_S_MAX_CALLS_TOO_SMALL
1743L RPC_S_STRING_TOO_LONG
1744L RPC_S_PROTSEQ_NOT_FOUND
1745L RPC_S_PROCNUM_OUT_OF_RANGE
1746L RPC_S_BINDING_HAS_NO_AUTH
1747L RPC_S_UNKNOWN_AUTHN_SERVICE
1748L RPC_S_UNKNOWN_AUTHN_LEVEL
1749L RPC_S_INVALID_AUTH_IDENTITY
1750L RPC_S_UNKNOWN_AUTHZ_SERVICE
1751L EPT_S_INVALID_ENTRY
1752L EPT_S_CANT_PERFORM_OP
1753L EPT_S_NOT_REGISTERED
1755L RPC_S_INCOMPLETE_NAME
1756L RPC_S_INVALID_VERS_OPTION
1757L RPC_S_NO_MORE_MEMBERS
1758L RPC_S_NOT_ALL_OBJS_UNEXPORTED
1759L RPC_S_INTERFACE_NOT_FOUND
1760L RPC_S_ENTRY_ALREADY_EXISTS
1761L RPC_S_ENTRY_NOT_FOUND
1762L RPC_S_NAME_SERVICE_UNAVAILABLE
1764L RPC_S_CANNOT_SUPPORT
1765L RPC_S_NO_CONTEXT_AVAILABLE
1766L RPC_S_INTERNAL_ERROR
1767L RPC_S_ZERO_DIVIDE
1768L RPC_S_ADDRESS_ERROR
1769L RPC_S_FP_DIV_ZERO
1770L RPC_S_FP_UNDERFLOW
1771L RPC_S_FP_OVERFLOW
1772L RPC_X_NO_MORE_ENTRIES
1773L RPC_X_SS_CHAR_TRANS_OPEN_FAIL
1774L RPC_X_SS_CHAR_TRANS_SHORT_FILE
1775L RPC_X_SS_IN_NULL_CONTEXT
1776L RPC_X_SS_CONTEXT_MISMATCH
1777L RPC_X_SS_CONTEXT_DAMAGED
1778L RPC_X_SS_HANDLES_MISMATCH
1779L RPC_X_SS_CANNOT_GET_CALL_HANDLE
1780L RPC_X_NULL_REF_POINTER
1781L RPC_X_ENUM_VALUE_OUT_OF_RANGE
1782L RPC_X_BYTE_COUNT_TOO_SMALL
1783L RPC_X_BAD_STUB_DATA
1784L ERROR_INVALID_USER_BUFFER
1785L ERROR_UNRECOGNIZED_MEDIA
1786L ERROR_NO_TRUST_LSA_SECRET
1787L ERROR_NO_TRUST_SAM_ACCOUNT
1788L ERROR_TRUSTED_DOMAIN_FAILURE
1789L ERROR_TRUSTED_RELATIONSHIP_FAILURE
1790L ERROR_TRUST_FAILURE
1791L RPC_S_CALL_IN_PROGRESS
1792L ERROR_NETLOGON_NOT_STARTED
1793L ERROR_ACCOUNT_EXPIRED
1794L ERROR_REDIRECTOR_HAS_OPEN_HANDLES
1795L ERROR_PRINTER_DRIVER_ALREADY_INSTALLED
1796L ERROR_UNKNOWN_PORT
1797L ERROR_UNKNOWN_PRINTER_DRIVER
1798L ERROR_UNKNOWN_PRINTPROCESSOR
1799L ERROR_INVALID_SEPARATOR_FILE
1800L ERROR_INVALID_PRIORITY
1801L ERROR_INVALID_PRINTER_NAME
1802L ERROR_PRINTER_ALREADY_EXISTS
1803L ERROR_INVALID_PRINTER_COMMAND
1804L ERROR_INVALID_DATATYPE
1805L ERROR_INVALID_ENVIRONMENT
1806L RPC_S_NO_MORE_BINDINGS
1807L ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT
1808L ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT
1809L ERROR_NOLOGON_SERVER_TRUST_ACCOUNT
1810L ERROR_DOMAIN_TRUST_INCONSISTENT
1811L ERROR_SERVER_HAS_OPEN_HANDLES
1812L ERROR_RESOURCE_DATA_NOT_FOUND
1813L ERROR_RESOURCE_TYPE_NOT_FOUND
1814L ERROR_RESOURCE_NAME_NOT_FOUND
1815L ERROR_RESOURCE_LANG_NOT_FOUND
1816L ERROR_NOT_ENOUGH_QUOTA
1817L RPC_S_NO_INTERFACES
1818L RPC_S_CALL_CANCELLED
1819L RPC_S_BINDING_INCOMPLETE
1820L RPC_S_COMM_FAILURE
1821L RPC_S_UNSUPPORTED_AUTHN_LEVEL
1822L RPC_S_NO_PRINC_NAME
1823L RPC_S_NOT_RPC_ERROR
1824L RPC_S_UUID_LOCAL_ONLY
1825L RPC_S_SEC_PKG_ERROR
1826L RPC_S_NOT_CANCELLED
1827L RPC_X_INVALID_ES_ACTION
1828L RPC_X_WRONG_ES_VERSION
1829L RPC_X_WRONG_STUB_VERSION
1898L RPC_S_GROUP_MEMBER_NOT_FOUND
1899L EPT_S_CANT_CREATE
1900L RPC_S_INVALID_OBJECT
1901L ERROR_INVALID_TIME
1902L ERROR_INVALID_FORM_NAME
1903L ERROR_INVALID_FORM_SIZE
1904L ERROR_ALREADY_WAITING
1905L ERROR_PRINTER_DELETED
1906L ERROR_INVALID_PRINTER_STATE
1907L ERROR_PASSWORD_MUST_CHANGE
1908L ERROR_DOMAIN_CONTROLLER_NOT_FOUND
1909L ERROR_ACCOUNT_LOCKED_OUT
2000L ERROR_INVALID_PIXEL_FORMAT
2001L ERROR_BAD_DRIVER
2002L ERROR_INVALID_WINDOW_STYLE
2003L ERROR_METAFILE_NOT_SUPPORTED
2004L ERROR_TRANSFORM_NOT_SUPPORTED
2005L ERROR_CLIPPING_NOT_SUPPORTED
2138L ERROR_NO_NETWORK
2202L ERROR_BAD_USERNAME
2250L ERROR_NOT_CONNECTED
2401L ERROR_OPEN_FILES
2404L ERROR_DEVICE_IN_USE
3000L ERROR_UNKNOWN_PRINT_MONITOR
3001L ERROR_PRINTER_DRIVER_IN_USE
3002L ERROR_SPOOL_FILE_NOT_FOUND
3003L ERROR_SPL_NO_STARTDOC
3004L ERROR_SPL_NO_ADDJOB
3005L ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED
3006L ERROR_PRINT_MONITOR_ALREADY_INSTALLED
4000L ERROR_WINS_INTERNAL
4001L ERROR_CAN_NOT_DEL_LOCAL_WINS
4002L ERROR_STATIC_INIT
4003L ERROR_INC_BACKUP
4004L ERROR_FULL_BACKUP
4005L ERROR_REC_NON_EXISTENT
4006L ERROR_RPL_NOT_ALLOWED
6118L ERROR_NO_BROWSER_SERVERS_FOUND