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





Intro

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.

Hard- / software requirements

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

Contents

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.

Starting KiXtart

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.

General syntax rules

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.

Expressions

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

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

BEEP

Does what it says it does (surprise, hmm?).

BIG

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

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

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

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

CD "directory"

CD changes the current working directory to the directory specified.

Check the @ERROR macro to see if CD was successful.

CLS

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

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

DEL "file"

DEL deletes the file specified.

NB : no warning given, no questions asked.

DEL also sets the @ERROR macro.

DISPLAY

DISPLAY "filename"

Outputs the contents of the specified file to the screen starting at the current cursor position.

DO - UNTIL

DO ... UNTIL "expression"

Loops until the expression becomes true.

Notes

- maximum number of nested DO loops = 10.

EXIT

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

FLUSHKB

Flushes all pending characters from the keyboardbuffer.

GET

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

GETS $x

GETS reads a line of characters from the keyboard until <Enter> is pressed, and stores the result in the script variable.

[ GO ]

[ 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

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 ELSE ENDIF

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

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

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

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

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

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

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

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

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

SLEEP <seconds>

Will halt script execution for the number of seconds specified.

SMALL

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

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

WHILE "expression" ... LOOP

Loops as long as the expression is true.

Notes

- maximum number of nested WHILE loops = 10.

Detailed description of KiXtart functions.

General remarks

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Troubleshooting

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.

Support

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.

KiXtart on Windows 95

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.

Disclaimer.

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.

Possible KiXtart error codes.

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