List of Fixes and Improvements
WinBatch versions 5.0H through 97D
Keywords: fixes improvements new releases features
**************************************************************************
IMPORTANT NOTICE: In the 32-bit version, the following functions, which
in earlier versions returned space-delimited lists of items:
DirItemize
DiskScan
FileItemize
now return tab-delimited lists. This can be changed using IntControl(29).
See "DLL 2.2abh" section below for more information.
--------------------------------------------------------------------------
In the 32-bit version, the following functions work only with 32-bit apps:
AppExist
AppWaitClose
WinExeName
See "DLL 2.2abk" section below for more information.
**************************************************************************
WinBatch/WIL DLL fixes. Dates indicate disk drop into manufacturing. Actual
ship is often a week or two later.
5.0H Sept 1, 1994
Initial public release
5.0J Sept 10, 1994
Network Extender fixes
5.0K Sept 19, 1994
Fixed "Use Older / Use Newer" swap in Confirm Replace dialog
Fixed problem where \*.* was required on a target directory on
FileCopy/FileMove functions (Oops See 5.0N)
5.0L Sept 26, 1994
Fixed MenuChange function
Added DiskSize function
Added \\machine\share capability to DiskFree and DiskSize functions
WinBatch 32 for Intel PCs available
5.0M Oct 3, 1994
Fixed TimeDiffSecs function
Fixed DDERequest memory leak problem
Started adding this fixes.txt file
5.0N Oct 10 1994
Fixed memory leak on Dialog() function when CTL3DV2 was used.
New n3Logout function in Novell3 extender
Really fixed the \*.* problem. Previous fix only copied
the first file.
Modified the DiskFree, DiskSize, and FileSize functions to
return a floating point answer if the result is larger than
about 2 Gigabytes
Fixed Novell 3 Extenders (DLL10G)
n3Map fixed to work with ODI drivers
n3GetMapped
n3MemberSet
n3MemberDel
5.0P Oct 19 1994
Fixed FileSize for 32bit versions to return the proper answer
Fixed a bug in StrIndex where a @backscan on a one character
string would provide an incorrect answer.
Fixed problem in CopyMove confirm dialog - Cancel works now.
Fixed problem in CopyMove dialog - missing source file error caught before
dialog.
Fixed problem where Dialog function dialog boxes used BUTTON_FACE color
instead of LTGRAY color.
Fixed Novell 4 Extenders (DLL10H)
n4Map (improved)
n4GetMapped
n4MemberSet
n4MemberDel
Novell DLL's updated from the Novell 11/93 release to the 2/94 release
WinBatch 32 for Dec Alpha and MIPS now available.
Actually, its almost pointless to watch the Winbatch version number, as nearly all
the fixes appear in the Dll, which has its own version numbering scheme.
Henceforth, we will be tracking the DLL version number. The WinBatch
VersionDll() function will return the DLL version.
This is already built into the SYSINFO.WBT file.
DLL 2.1ebc Oct 26
First showing up in WinBatch 5.0Q
User pointed out problems in the sin and cos routines. Problem traced to
what appear to be singularity-type problems in the Microsoft runtime
cos and sin routines. The Dll now checks for the bad numbers, and if it is
in the range where the runtime routines fail, it stuffs in an appropriate
answer. Fix installed in the 16 bit version only, as the 32 bit versions
do not seem to have this problem in the runtimes.
Fixed a nit in the dialog editor where, when it was requested to
display a script, would do so in a dialog box with a "(Unlicensed)"
in the title.
Fix a parser problem where an error occurred when the first part
of a variable name matched a function name provided by the calling
exe program. This problem first showed up in using a "Dialog1"
name for a dialog in the Dialog Editor.
Fixed a SendKey to DOS bug where stuff like {UP} did not work when
the NumLock was set. Fixed by turning off NumLock when sending
keystrokes to DOS.
DLL 2.1fbc
Fixed look of Dialog boxes (back to white) when CTL3DV2.DLL is
not installed on system.
Fixed >very insignificant< problem where if a user did an
AddExtender for the same DLL twice (or more) only one instance
of the DLL was freed when the WBT file shut down.
Fixed problem in 32 bit version for Windows'95 where default
directory was not set properly in =C: environment variable.
This problem caused wildcarded filenames to be improperly
resolved into real filenames.
Fixed problem in 16 bit version where DirRemove always
returned a true, whether or not the directory was deleted.
If the directory is not deleted, it now returns a suppressable,
1030 error.
DLL 2.2abf First showing up in WB 5.1A
Because of a data structure change to support more binary
buffers (5 was coded, 10 was documented) the main dll
renamed to WBDBFxxx.dll
Fixed TimeDiffSecs (again). If the first date was smaller
than the second date, the answer could be incorrect.
Fixed a problem in FileAppend where the following code would not
work properly.
FileAppend("AAA.*","BBB.TXT")
The DLL now does better checking.
SendKey slowed down a minor tad to help other applications out.
32Bit versions will try harder to locate the WIL DLL on startup.
The compiler time check of various DLLS has been removed because
of assorted problems. We'll just roll the DLL name instead when
incompatibilities arise. The DLL appears to be extremely stable,
and the bug fixes implemented lately tend to be minor (see above)
A buglet where an ItemInsert on a null string installed a leading
delimiter before the inserted item - leading to a list with two
items, the first being null, and the second being the desired item
- was fixed. When ItemInsert'ing into a null list, no leading
delimiter is stuffed in.
A problem with PlayWaveForm where it was not checking the [Sounds]
section of the WIN.INI file for all possible cases has been fixed.
Fixed a problem with FileCopy/FileMove, where the target was ".."
and it was a root directory.
DirExist now returns TRUE for hidden and system directories. It
also uses an improved method (hopefully) of checking for root
directories and directories with relative paths (eg, "..\TEMP").
Changed FileExist to return a value of '2' if the specified file
exists but is currently open by another application in "read-deny"
mode. Most of the other file manipulation functions (except
FileOpen) will cause a sharing violation if they try to access
such a file.
Fixed problems handling file and directory names containing high
ANSI characters (>127).
Fixed a problem that occurred if, inside a FOR loop, the user
changed the increment variable to a string.
Fixed an intermittent problem with performing comparisons of
negative floating point numbers.
FileFullName now correctly expands "dot" directories
("." and "..") in the path name.
Fixed a problem processing lines such as "Gosub %param1%" inside
conditional structures, when param1 was undefined.
(32-bit version) Fixed some incompatabilities with Windows 95:
FileAppend
FileMove
MsgTextGet
WinActivate (where the specified parent window had a modal
child window displayed -- focus was going to the parent
window instead of to the child window)
Fixed a problem with accessing the DLL if it was located in the
parent directory and ".." was on the path.
FileCopy, FileMove, and FileAppend now check for sufficient free
disk space before performing the requested operation, and return
an error if there is insufficient space, as follows:
1404 FileCopy: Insufficient free space on target drive
1405 FileMove: Insufficient free space on target drive
1406 FileAppend: Insufficient free space on target drive
NetWare 3 extender 12012 First showing up in WB 5.1A
New functions:
n3ServerList(request)
Returns name of connected server(s)
n3FileAttrGet(filename)
Returns NetWare file attributes
n3FileAttrSet(filename, attribs, mode)
Sets NetWare file attributes
NetWare 4 extender 14007 First showing up in WB 5.1A
Changed functions:
n4memberGet(group, user)
n4memberSet(group, user)
n4memberDel(group, user)
these functions no longer take a 'server' parameter (they change the
groups on all servers)
New functions:
n4ServerList(request)
Returns name of connected servers(s)
n4FileAttrGet(filename)
Returns NetWare file attributes
n4FileAttrSet(filename, attribs, mode)
Sets NetWare file attributes
WB 5.1C April 18, 1995
Fixed problem with compiler and compiled WBT's causing a sharing
violation if the DLL was on a network and not marked read-only.
Fixed problem with compiler and compiled WBT's not finding the DLL
if it was located in the Windows or Windows System directory.
Fixed problem with large compiled WBT's being unable to extract the
WIL DLL when run on a disk >= 4 gigabytes in size.
In WILX.DLL extender -- fixed problem with xDriveReady sometimes
causing a GP fault.
DLL 2.2abg First showing up in WB 5.1C
Added two new string constants: @CR and @LF
Fixed bug in BinaryIndex where it wouldn't find the last character
in the buffer.
WB 5.1D July 18, 1995
WinBatch compiler: for new projects, compiler will use settings (type,
icon, and extenders) from the last project.
DLL 2.2abh First showing up in WB 5.1D
**************************************************************************
IMPORTANT: File delimiters
**************************************************************************
In order to support long file names in Windows NT and Windows 95, which
can contain embedded spaces, we have changed the default file delimiter,
used to delimit lists of files and directories, to a TAB in the 32-bit
version of WIL. In the 16-bit version of WIL, the default delimiter has
not changed, and remains a space.
Note that this is the "default" file delimiter. We have added the ability
to change the file delimiter to a character of your own choosing, using
the new IntControl 29. If you are using the 32-bit version of WIL, and
want to make the file delimiter a space for compatability with existing
scripts, you can place the following line at the beginning of each of your
scripts:
IntControl(29, " ", 0, 0, 0)
Conversely, if you want to standardize on a TAB delimiter, you can use:
IntControl(29, @TAB, 0, 0, 0)
Apostrophes (') and back quotes (`) are no longer treated as special
characters to delimit file names containing spaces. They are now treated
as ordinary characters in a file name.
----------------------------
Functions which are affected
----------------------------
The most important functions affected by this change are:
DirItemize
DiskScan
FileItemize
which now return lists delimited by the current file delimiter character.
The following functions, which take file or directory lists as input
parameters, now expect the lists to be delimited by the current file
delimiter character. However, they now also accept lists delimited with a
TAB or a vertical bar ("|", which may be easier to code in a WIL script):
DirItemize
DirRemove
DiskFree
FileAppend
FileAttrSet
FileCopy
FileDelete
FileItemize
FileMove
FileRename
FileSize
FileTimeSet
FileTimeTouch
Note that DiskFree will continue to accept space-delimited lists as input.
**************************************************************************
New IntControl:
IntControl(29, delimiter, 0, 0, 0)
Changes the default file delimiter.
The first parameter is the new file delimiter you want to use, and must
be a single character. The return value of the function is the previous
file delimiter character. If you specify an empty string ("") as the
first parameter, the function will return the current file delimiter
character but the file delimiter will not be changed.
Added option to WinMetrics: WinMetrics(-4) will return the Windows
platform:
0 = Other
1 = Windows
2 = Windows for Workgroups
3 = Win32s
4 = Windows NT
5 = Windows 95
In StrSub, you can now specify a length of -1, which will extract the rest
of the string.
In TimeWait, you can now specify "00:00:00" for the date, which will wait
for the next occurrence of the specified time (ie, today or tomorrow).
Added support for 3-D Dialog's in Windows NT, if CTL3D32.DLL is present in
the SYSTEM32 directory.
Fixed TimeAdd so that it doesn't trim out leading zeros in each field.
The Wallpaper function now obeys the tile parameter in Windows 95.
Improved handling of colors in Dialog function.
Added 3D effect to radio buttons and checkboxes in Dialog function.
Fixed problem where if an error occurred in a called WBT, control would go
to the "Cancel" label in the calling program.
In Dialog and DialogBox, you can now really use IntControl(4) to allow the
dialog to be closed without selecting a file, even if there is an edit box
associated with a file listbox. If you press a pushbutton after changing
the file mask in an edit box, the listbox will be updated with the new
mask. But if you press a pushbutton without changing the file mask, the
dialog will close (and will return a file name of "NOFILESELECTED").
Fixed problem where string variables were not converted properly to
integers at the beginning of a "For" loop.
Fixed problem where lines that should have been ignored (eg, if they
followed a Break statement) could cause errors if they contained invalid
syntax.
If the second parameter of an IntControl(12) statement is "" or "0", any
previously-set exit message will now be cleared. Also, you can now
specify a message beginning with "0".
Fixed problem processing "If" statements with a blank string to the left
of the equals sign.
Fixed a problem in the 32-bit version where the Dialog function would
return an invalid file name (garbage characters) if no file was selected.
Improved IsKeyDown processing (especially under Windows 95).
Improved Ctrl-Break checking (especially under Windows 95).
Made WinWaitClose steal less processor time in the 32-bit version.
WB 5.1E Aug 3, 1995
In the 32-bit version of WinBatch, it is now possible to run WinBatch
files whose names contain spaces, by delimiting the file name with
double quotes on the WinBatch command line. For example:
WBAT32I "Sample Program.WBT" param1 param2
CallExt now handles file names containing spaces, in 32-bit version.
32-bit version of WinBatch will now run WBT's with file names longer than
64 characters.
INI settings have been moved from WWW-PROD.INI to the registry, under key:
HKEY_LOCAL_MACHINE\SOFTWARE\Wilson WindowWare\Settings\WWW-PROD
DLL 2.2abj First showing up in WB 5.1E
For functions which take a partial window name, you can now specify a
tilde (~) as the first character of the window name, which will match any
window containing the specified string anywhere in its title (ie, not
necessarily at the beginning of the title). For example, "~Notepad" will
match a window title of "(Untitled) - Notepad" and a window title of "My
Notepad Application", as well as a window title of "Notepad - (Untitled)".
This should prove especially useful under Windows 95. A '~' at the end of
the specified window name indicates (as before) that the name must match
the window title through to the end of the title. So, "~Notepad~" will
match a window title of "Notepad" and a window title of "(Untitled) -
Notepad", but will not match a window title of "Notepad - (Untitled)".
New function:
WinIdGet(partial-winname).
Returns a unique "Window ID" (pseudo-handle) for the specified window.
New functions to manipulate Windows 95 shortcut link files (Windows 95 only):
ShortcutEdit(linkname, pathname, params, workdir, showmode)
Modifies the specified shortcut file.
showmode = @NORMAL, @ZOOMED, or @ICON
ShortcutExtra(linkname, description, hotkey, iconpath, iconindex)
Sets additional information for the specified shortcut file.
iconindex = 0=based index of desired icon in "iconpath"
ShortcutInfo(linkname)
Returns information on the specified shortcut file (TAB-delimited):
path, params, workdir, showmode, desc, hotkey, iconpath, iconindex
ShortcutMake(linkname, pathname, params, workdir, showmode)
Creates a shortcut for the specified filename.
showmode = @NORMAL, @ZOOMED, or @ICON
In 32-bit version, Run... commands now support file and directory names
containing spaces.
In 32-bit version, Run... commands no longer support the undocumented
method of running a program with a non-standard extension (eg,
"SSSTARS.SCR") by replacing the period (.) in the file name with an
asterisk (*). However, this is no longer necessary, as the Run...
commands in the 32-bit version can now run such programs directly.
The 32-bit bit version is now able to run Windows 95 shortcut files under
Windows 95, using any of the Run... functions. The "Run" mode specified
in the shortcut file (ie: "Normal window", "Minimized", or "Maximized")
will always be obeyed, any command-line parameters specified in the
shortcut's "Target" field will override any parameters passed by the
Run... function, and a working directory specified in the shortcut's
"Start in" field will override a working directory parameter in RunShell.
New directory attribute functions:
DirAttrGet(dirname)
Gets directory attributes (like FileAttrGet)
DirAttrSet(dir-list, settings)
Sets directory attributes (like FileAttrSet)
FileAttrGet and FileAttrSet now return an error if a directory name is
specified. Use the new DirAttrGet and DirAttrSet instead.
New functions (32-bit version only -- the 16-bit version will just return
the passed file name):
FileNameLong(filename)
Returns the long version of a filename.
FileNameShort(filename)
Returns the short (ie, 8.3) version of a filename.
New IntControl (32-bit, Windows NT only):
IntControl(30, "sourcefile", "destination", 0, 0)
Performs a delayed file move. The file is not actually moved until
the operating system is restarted.
New registry functions (32-bit version only):
RegApp(progname, path)
Creates registration entries for a program under "App Paths".
RegDelValue(handle, subkey-string)
Removes a named value for the specified subkey from the registry.
In 32-bit version, PlayMidi function now support file and directory names
containing spaces.
New function (32-bit version only):
InstallFile(filename, targname, default-targdir, delete-old, flags)
Installs and uncompresses file.
New function (menu-based implementations only):
CurrFilePath()
Returns the full path+filename of the currently-selected file.
Like CurrentFile, but returns a full pathname.
New IntControl (32-bit, Windows 95 only):
IntControl(31, 0, 0, 0, 0)
Returns a tab-delimited list of WinId's for all open Explorer windows.
IntControl(67) and IntControl(68) now work in Windows 95.
DosVersion now returns correct values in Windows 95.
Added new request #'s to WinResources for 32-bit version.
The existing request #'s (0-4) will still work, but are not useful on
32-bit platforms.
It is not possible to determine free system resources in the 32-bit
version.
Fixed problem with Dialog and DialogBox returning "NOFILESELECTED" even
if a file was selected, if IntControl(4) was set.
INI settings have been moved from WWW-PROD.INI to the registry, under key:
HKEY_LOCAL_MACHINE\SOFTWARE\Wilson WindowWare\Settings\WWW-PROD
WB 95B Sept 7, 1995
New Box functions:
BoxButtonDraw(BoxID, button ID, "text", "rect")
BoxButtonKill(BoxID, button ID)
BoxButtonStat(BoxID, button ID)
BoxCaption(BoxID, caption)
BoxColor(BoxID, "color", wash color)
BoxDataClear(BoxID, "tag")
BoxDataTag(BoxID, "tag")
BoxDestroy(BoxID)
BoxDrawCircle(BoxID, "rect", style)
BoxDrawLine(BoxID, "rect")
BoxDrawRect(BoxID, "rect", style)
BoxDrawText(BoxID, "rect", "text", erase flag, alignment)
BoxesUp("rect", show mode)
BoxMapMode(BoxID, map mode)
BoxNew(BoxID, "rect", style)
BoxPen(BoxID, "color", width)
BoxTextColor(BoxID, "color")
BoxTextFont(BoxID, "name", size, style, family)
BoxUpdates(BoxID, update flag)
The 32-bit WinBatch compiler now allows you to specify an icon for the EXE
being compiled.
DLL 2.2abk First showing up in WB 95B
In the 32-bit version, the Run... functions will look in the registry
under "App Paths" for the location of the specified program, if you do not
specify a path for it.
In the 32-bit version, the Run... functions will look in the registry
under "App Paths" for a "Path" setting for the specified program, and, if
found, will prepend it to the "PATH" environment variable before running
the program.
In the 32-bit version, the following functions now work, but only with
32-bit applications:
AppExist
AppWaitClose
WinExeName
In the 32-bit version, AppExist and AppWaitClose are not able to detect
the existence of 16-bit DOS or Windows applications, and WinExeName will
return the string "(16-bit application)".
In the 32-bit version under Windows NT, these functions accept (and
return) module names instead of full program names. The module name is
usually the same as the root name of the program, without the extension.
For example, WinExeName("Program Manager") will return "progman". With
AppExist and AppWaitClose, any file extension or path information which is
part of the 'program-name' parameter is ignored; so, for example,
AppExist("c:\temp\progman.exe") will return TRUE if Program Manager is
running, regardless of what directory PROGMAN.EXE is actually located in.
One exception: WinExeName("") will return a full path to the program
making the current call to the WIL Interpreter.
BinaryPeekStr, BinaryPokeStr, and BinaryStrCnt now check for (and reject)
negative parameters.
RunWait now gives up some processor time while it's waiting.
New function (32-bit version only):
WinSysInfo()
Returns a tab-delimited list of system configuration information.
This function should be used instead of WinConfig in the 32-bit version.
Additional request #'s for WinMetrics (32-bit version only).
New mouse functions:
MouseClick(click-type, modifiers)
Clicks mouse button(s).
MouseClickBtn(win-name, child-win, button-text)
Clicks on the specified button control.
MouseMove(x, y, win-name, child-win)
Moves the mouse to the specified X-Y coordinates (based on a 1000 x
1000 screen).
Fixed problem where an invalid YmdHms string containing two consecutive
colons could cause a GP Fault.
In the 32-bit version, AppExist and AppWaitClose will now wait several
seconds for the specified application to appear.
Fixed problem in menu-based WIL applications where tabs in menu item
descriptions would be displayed as non-printable "black-box" characters.
Added new request #'s to MouseInfo.
In the 32-bit version, IconReplace now supports 32-bit EXE files. The
replacement icon must be the exact same size as the original icon.
New IntControl:
IntControl(32, address, "data type", 0, 0)
Returns the contents of the memory location specified by "address".
Fixed WinMetrics(-1) with 32-bit graphics cards. It was returning -1 for
these; it now returns 2,147,483,647.
WB 95C Oct 10, 1995
New function:
BoxButtonWait()
Waits for any button in any box to be pressed.
Fixed problem with WinBatch locking up when minimizing a WinBatch box that
was displaying width-justified text.
DLL 2.2abl First showing up in WB 95C
Fixed problem with DirExist returning @FALSE for a UNC which was a root
directory share on another machine (eg, "\\SERVER\C").
DirMake will now create multi-level directories (eg, "C:\ABC\DEF\GHI").
New functions:
BinaryIndexNc(handle, offset, string, direction)
Like BinaryIndex, but case-insensitive.
WinItemNameId()
Returns a list of top-level window names and their "Window ID's", in
the form:
"window1-name|window1-ID|window2-name|window2-ID|..."
In the 32-bit version, Delay and TimeDelay functions now accept
floating point numbers: eg, Delay(0.5).
New function:
ShellExecute(file-name, params, directory, display mode, operation)
Performs a ShellExecute.
New function (32-bit version only):
RegQueryItem(handle, subkey)
Returns a tab-delimited list of named data items for the specified
subkey.
New IntControl:
IntControl(33, p1, 0, 0, 0)
Controls whether a listbox control in a dialog box allows multiple
items to be selected.
P1 Meaning
-- -------
0 Single selection
1 Multiple selection (default)
Improved registry functions in 32-bit version:
RegSetValue, RegQueryValue, and RegDelValue:
1. SEE NOTE BELOW!! Can now specify a named value of [Default] to
indicate the primary value for the key (shown in the Registry
Editor as "(Default)"); eg:
RegSetValue(mykey, "[Default]", "some data")
(*** The above feature was subsequently removed in version 96C ***)
2. Can now specify a subkey string containing a named value; eg:
RegSetValue(mykey, "MySubKey[MyItem]", "some data"), or,
RegSetValue(mykey, "MySubKey\[MyItem]", "some data")
Fixed WaitForKey in the 32-bit version.
In the 32-bit version, you can now use the Run... functions to "run" data
files (eg, Run("win.ini", "")).
FileItemize and DirItemize now handle names containing spaces.
In 32-bit version, fixed problem with 3D dialogs not being used under
Windows NT.
WB 95D Nov 1, 1995
Compiler now optimizes WBT's by removing comment lines and whitespace.
OLE automation (ObjectOpen and ObjectClose functions) now supported in
32-bit version.
When a custom icon is specified, the 32-bit compiler now installs it as
the icon that is displayed in the Win95 Explorer window, as well as the
icon that is shown in the task bar.
Fixed a problem with some of the Box functions, where a color or font that
was specified in a definition-type command (such as BoxTextColor) would be
used for an output-type command (such as BoxDrawText) that preceded it in
the command stack, instead of the default color or font being used.
DLL 2.2abl First showing up in WB 95D
New registry functions (32-bit version only):
RegQueryBin(handle, subkey)
Retrieves a binary value from the registry.
RegQueryDword(handle, subkey)
Retrieves a DWORD value from the registry.
RegSetBin(handle, subkey, value)
Sets a binary value in the registry.
RegSetDword(handle, subkey, value)
Sets a DWORD value in the registry.
New date/time functions:
TimeJulToYmd(julian-date)
Converts the specified Julian date value to a date in YmdHms format.
Hms will always be "00:00:00".
TimeSubtract(YmdHms1, YmdHms2)
Subtracts YmdHms2 from YmdHms1.
YmdHms2 can not be larger than YmdHms1.
New IntControl's:
IntControl(34, p1, 0, 0, 0)
Returns the error message string which corresponds to the specified
WIL error.
p1 = error number.
IntControl(35, p1, 0, 0, 0) (32-bit version only)
Adjusts SendKey delay.
p1 = amount of time to delay between each keypress, in milliseconds
(1000 milliseconds = 1 second).
Returns previous delay setting.
The default delay (in the 32-bit version) is 25. Specify a larger
number to slow SendKey down, or a smaller number to speed it up
(0 = no delay).
IntControl(36, p1, p2, 0, 0) (32-bit version only)
Waits until an application is waiting for user input.
p1 = window name associated with application
p2 = timeout, in milliseconds (-1 = no timeout)
In dialog boxes, if you create an EDITBOX field with a variable name that
begins with "PW_", it will be treated as a password field (ie, asterisks
will be echoed instead of the actual characters that the user types).
In dialog boxes, file listboxes now use long file names in the 32-bit
version under Windows 95.
In the DiskScan function, request numbers 8 (CD_ROM) and 16 (RamDisk) are
now supported in the 16-bit version.
In 32-bit version, added 3D effects to dialog listboxes and edit controls
under Windows 95.
SendMenusTo now accepts a Window ID for the window name parameter.
In 32-bit version, fixed a problem using the Run[] commands to launch a
Windows 95 shortcut file.
InstallFile function now supported in 16-bit version.
NetWare 3 extender 12013 First showing up in WB 95D
Fixed a problem with n3GetMapped, if the specified server name was also
the partial name of another server (eg, if you specified "\\SERVER1" and
you also had a server named "\\SERVER10").
n3FileAttrGet and n3FileAttrSet can now be used to get and set directory
attributes.
NetWare 4 extender 14010 First showing up in WB 95D
Fixed n4Detach function; it now does a full detach, and it now returns
@FALSE if it is unable to detach from the monitored connection (ie, from
the primary or login server).
Fixed a problem with n4GetMapped, if the specified server name was also
the partial name of another server (eg, if you specified "\\SERVER1" and
you also had a server named "\\SERVER10").
n4FileAttrGet and n4FileAttrSet can now be used to get and set directory
attributes.
WB 95E Nov 2, 1995
DLL 2.2abm First showing up in WB 95E
In 16-bit version, fixed a problem with DirMake creating a directory name
containing high ANSI characters (>127).
WB 96A Jan 1, 1996
WinBatch for PowerPC now available.
New IntControl:
IntControl(1000, p1, 0, 0, 0)
Sets the exit code returned by WinBatch.
Default exit code = 0.
Returns previous value.
Fixed the "Help" button in the WinBatch compiler.
In the BoxColor function, the gradient effect (wash color) now works with
video drivers > 256 colors.
DLL 2.3abm First showing up in WB 96A
New function:
DiskInfo(drive-letter, request#)
Returns information on the specified disk drive.
Req# Return value
---- ------------
1 sectors per cluster
2 bytes per sector
3 number of free clusters
4 total number of clusters
New IntControl's:
IntControl(37, p1, p2, p3, 0)
Replaces the specified icon in an EXE file.
p1 = EXE file
p2 = icon file
p3 = ordinal position of icon to replace
This is similar to the IconReplace function, except it allows you to
change an icon other than the first icon in the file.
Note: This IntControl is subject to change in future versions.
IntControl(39, p1, 0, 0, 0)
Sets the file sharing mode for file reads.
p1 = share mode for file reads (default = 1)
Valid share modes are:
-1 = don't change (just return current setting)
0 = prevent the file from being shared
1 = allow other open operations for read access
2 = allow other open operations for write access
3 = allow other open operations for read and write access
This affects the FileOpen("READ") and BinaryRead functions.
Returns previous setting.
IntControl(40, p1, 0, 0, 0)
Sets the file sharing mode for file writes.
p2 = share mode for file writes (default = 0)
This affects the FileOpen("WRITE"/"APPEND") and BinaryWrite functions.
Returns previous setting.
See IntControl(39) for a list of valid share modes.
New return code for WinMetrics(-3): 4 = PowerPC32
In 32-bit version, fixed a problem using DirName with directory names
containing spaces or commas.
Fixed problem with TimeJulToYmd with years >= 2000.
FileWrite now returns an error if the write failed.
In 16-bit version, fixed problem with DiskScan causing a GP fault on
systems with Stacker compression software installed.
In 32-bit version, the following functions are now a little more
well-behaved in giving up processor time: RunWait (and RunShell with the
"@WAIT" parameter), AppWaitClose, and Delay/TimeDelay.
Fixed a problem with the Dialog function, where if you defined an EDITBOX
control after a FILELISTBOX control, the file listbox would revert to a
filespec of "*.*".
In 32-bit version, fixed a prooblem with the Dialog function, where if you
had a filespec other than "*.*", it would not show subdirectories in the
file list.
In 32-bit version, added some code to the ClipGet and ClipPut functions to
try to avoid "Clipboard owned by another app" error messages.
Fixed problem with TimeWait, when specifying a date of "00:00:00" and a
time that was earlier than the current time.
In 32-bit version, added a 25-millisecond delay between keystrokes sent
using the SendKey function. This can be adjusted using IntControl(35).
Fixed problem with PlayWaveForm in 32-bit version.
Windows 32 extender 10004
netDirDialog no longer returns an error if user presses "Cancel".
Dialog Editor 96A
Fixed the "Help" menu.
WB 96B Feb 12, 1996
In the 16-bit version, fixed a problem where doing a BoxDestroy
immediately after resizing a box window caused a GPF.
Fixed a resource leak problem with BoxColor when using gradient effects.
DLL 2.3bbm First showing up in WB 96B
New binary functions:
BinaryHashRec(buffer, recsize, keyoffset, keysize, keyval)
Returns a pointer to a record in a binary buffer, using a hashing
algorithm.
BinaryIncr(buffer, offset)
BinaryIncr2(buffer, offset)
BinaryIncr4(buffer, offset)
BinaryIncrFlt(buffer, offset)
These functions are equivalent to doing a BinaryPeek[...],
incrementing the extracted value by 1, and then doing a
BinaryPoke[...] to store the new value.
They return the new value.
BinaryPeek2(buffer, offset)
BinaryPeek4(buffer, offset)
BinaryPeekFlt(buffer, offset)
These functions are like BinaryPeek, but they extract 2, 4, or 8 bytes
(respectively) beginning at "offset"
BinaryPoke2(buffer, offset, value)
BinaryPoke4(buffer, offset, value)
BinaryPokeFlt(buffer, offset, value)
These functions are like BinaryPoke, but they store the specified
"value" in 2, 4, or 8 bytes (respectively) beginning at "offset".
BinarySort(buffer, recsize, keyoffset, keysize, flags)
Sorts records in a binary buffer. The buffer is sorted in place.
Change to BinaryIndex and BinaryIndexNc:
You can now specify a blank string ("") for the "string" parameter, in
which case the function will return the offset of the first non-NULL
character found, starting at "offset".
Fixed BinaryIndexNC
BinaryPoke now correctly returns the previous value, as documented.
In the 32-bit version, KeyToggleSet no longer returns an error (however,
it is still subject to the limitations described in the documentation).
In the 16-bit version, fixed DirAttrSet.
The following string functions:
StrIndex
StrScan
StrSub
no longer return an error for illegal bounds conditions. Instead,
StrIndex/StrScan now return a 0, and StrSub returns a blank string.
WB 96C Mar 22, 1996
FileMenu now works in Windows NT 4.0.
PopMenu now works in Windows NT 4.0.
Fixed problem where BoxButtonDraw didn't change the text of an existing
button, or of a button which had previously existed but had been removed
with BoxButtonKill.
DLL 2.3cbm First showing up in WB 96C
In 32-bit version, the following functions now work in Windows NT 4.0:
ShortcutEdit
ShortcutExtra
ShortcutInfo
ShortcutMake
In 32-bit version, the Run... functions can now be used to launch shortcut
files in Windows NT 4.0.
In 32-bit version, added 3D effects to Windows NT 4.0.
In 32-bit version, fixed problem with licensing dialog in Windows NT 4.0.
In 32-bit version, the following registry functions:
RegSetValue
RegQueryValue
RegDelValue
no longer treat a named value of [Default] as indicating the primary value
for a key (and, therefore, it is now possible to access a value which is
actually named "Default").
In 32-bit version, fixed problem with international language strings not
being used.
New registry functions (32-bit version only):
RegQueryExpSz(handle, subkey)
Retrieves a REG_EXPAND_SZ value from the registry.
RegQueryMulSz(handle, subkey, delimiter)
Retrieves a REG_MULTI_SZ value from the registry.
RegSetExpSz(handle, subkey, value)
Sets a REG_EXPAND_SZ value in the registry.
RegSetMulSz(handle, subkey, value, delimiter)
Sets a REG_MULTI_SZ value in the registry.
In 32-bit version, fixed problem with RegQuery... functions when there
was a backslash between the subkey string and a named value, eg:
RegQueryValue(mykey, "MySubKey[MyItem]", "some data") -- this worked
RegQueryValue(mykey, "MySubKey\[MyItem]", "some data") -- this didn't
RegQuery, RegQueryBin, and RegSetBin can now handle longer strings (up to
available WIL string space).
In 32-bit version, fixed problem with OLE string parameters.
In 32-bit version, fixed problem with RegQueryBin with certain values.
In 32-bit version, fixed problem with RegSetDword with large values.
Fixed problem with TimeSubtract, where the result could have a day of "00"
(eg, "96:04:00" instead of "96:03:31").
In 16-bit version, fixed WinItemNameId.
Fixed problem with BinaryHashRec crashing if there was only one record in
the buffer.
NetWare 3 extender 12014 First showing up in WB 96C
Fixed n3FileAttrGet and n3FileAttrSet.
n3FileAttrGet and n3FileAttrSet no longer support directories (use new
functions n3DirAttrGet and n3DirAttrSet instead).
New functions:
n3DirAttrGet(dirname)
Same as n3FileAttrGet, but for directory attributes.
n3DirAttrSet(dirname, attribs, mode)
Same as n3FileAttrSet, but for directory attributes.
n3MapDir(net-path, local-name)
Like n3Map, but performs a regular (non-root) map.
n3MapRoot(net-path, local-name)
Identical to n3Map.
With n3Map[..], it is no longer necessary to add a trailing backslash when
mapping to the root of a volume.
New functions:
n3CapturePrt(s:server-name, s:queue-name, i:port-number, s:flags)
Captures a local printer port to a Netware printer queue.
"port-number" is a number from 1 to 9 (where 1 = "LPT1", etc).
"flags" is a tab-delimited list of keyword=value pairs, ie:
"key1=value1%@TAB%key2=value2%@TAB%key3=value3..."
Valid keywords are:
JobDescription
JobControlFlags
TabSize
NumCopies
PrintFlags
MaxLines
MaxChars
FormName
FormType
BannerText
FlushCaptureTimeout
FlushCaptureOnClose
See the Netware 3 extender help file for an explanation of these
flags.
n3CaptureEnd(i:port-number)
Ends a printer capture.
"port-number" is a number from 1 to 9 (where 1 = "LPT1", etc).
n3GetUserId(s:server-name, s:user-name, i:format)
Returns the object ID corresponding to the specified user name.
"Format" specifies the format in which the ID is returned:
0 Decimal number, in internal Netware format
1 Hexadecimal string, such as used for mail directories
n3ChgPassword(s:server-name, s:user-name, s:old-password, s:new-password)
Changes a user's password.
If you have supervisor or equivalent rights, you can specify a blank
string ("") for "old-password".
Passwords are NOT case-sensitive.
You must be currently logged in to the specified server.
n3GetNetAddr(s:server, i:flags)
Returns the internetwork address of the current workstation.
"server" can be a blank string (""), in which case the default
server is used.
"flags" is reserved for future use, and should be set to 0.
The return value is a string of hex bytes in the format:
x1x2x3x4:y1y2y3y4y5y6:z1z2
where:
x1x2x3x4 = 4-byte network address
y1y2y3y4y5y6 = 6-byte net node address (physical address of workstation's LAN board)
z1z2 = socket
n3ServerInfo(s:server, i:request)
Returns information on the specified Netware server.
Request Meaning
------- -------
1 major NetWare version number
2 minor NetWare version number
3 revision number of the NetWare OS on NetWare server
4 maximum number of connections the server will support
5 highest number of connections simultaneously in use
6 number of connections the server currently has in use
7 maximum number of volumes the server will support
8 SFT level the server supports
9 TTS Level of NetWare server operating system
n3UserGroups(s:server, s:username)
Lists groups to which the specified user belongs.
The return value is a tab-delimited list of groups.
Added new request # to n3ServerList:
4 = all known servers (TAB-delimited list)
NetWare 4 extender 14011 First showing up in WB 96C
Fixed n4FileAttrGet and n4FileAttrSet.
n4FileAttrGet and n4FileAttrSet no longer support directories (use new
functions n4DirAttrGet and n4DirAttrSet instead).
New functions:
n4DirAttrGet(dirname)
Same as n4FileAttrGet, but for directory attributes.
n4DirAttrSet(dirname, attribs, mode)
Same as n4FileAttrSet, but for directory attributes.
n4MapDir(net-path, local-name)
Like n4Map, but performs a regular (non-root) map.
n4MapRoot(net-path, local-name)
Identical to n4Map.
With n4Map[..], it is no longer necessary to add a trailing backslash when
mapping to the root of a volume.
New functions:
n4CapturePrt(s:server-name, s:queue-name, i:port-number, s:flags)
Captures a local printer port to a Netware printer queue.
"port-number" is a number from 1 to 9 (where 1 = "LPT1", etc).
"flags" is a tab-delimited list of keyword=value pairs, ie:
"key1=value1%@TAB%key2=value2%@TAB%key3=value3..."
Valid keywords are:
JobDescription
JobControlFlags
TabSize
NumCopies
PrintFlags
MaxLines
MaxChars
FormName
FormType
BannerText
FlushCaptureTimeout
FlushCaptureOnClose
See the Netware 4 extender help file for an explanation of these
flags.
n4CaptureEnd(i:port-number)
Ends a printer capture.
"port-number" is a number from 1 to 9 (where 1 = "LPT1", etc).
n4GetUserId(s:server-name, s:user-name, i:format)
Returns the object ID corresponding to the specified user name.
"Format" specifies the format in which the ID is returned:
0 Decimal number, in internal Netware format
1 Hexadecimal string, such as used for mail directories
n4ChgPassword(s:server-name, s:user-name, s:old-password, s:new-password)
Changes a user's password.
"old-password" must be specified for Directory Services connections.
For bindery connections, if you have supervisor or equivalent rights,
you can specify a blank string ("") for "old-password".
Passwords ARE case-sensitive for Directory Services connections, but
NOT for bindery connections.
For bindery connections, you must be currently logged in to the
specified server.
n4GetNetAddr(s:server, i:flags)
Returns the internetwork address of the current workstation.
"server" can be a blank string (""), in which case the default
server is used.
"flags" is reserved for future use, and should be set to 0.
The return value is a string of hex bytes in the format:
x1x2x3x4:y1y2y3y4y5y6:z1z2
where:
x1x2x3x4 = 4-byte network address
y1y2y3y4y5y6 = 6-byte net node address (physical address of workstation's LAN board)
z1z2 = socket
n4ServerInfo(s:server, i:request)
Returns information on the specified Netware server.
Request Meaning
------- -------
1 major NetWare version number
2 minor NetWare version number
3 revision number of the NetWare OS on NetWare server
4 maximum number of connections the server will support
5 highest number of connections simultaneously in use
6 number of connections the server currently has in use
7 maximum number of volumes the server will support
8 SFT level the server supports
9 TTS Level of NetWare server operating system
n4UserGroups(s:server, s:username)
Lists groups to which the specified user belongs.
The return value is a tab-delimited list of groups. If the
specified server is a Directory Services connection, the group names
will contain distinguishing path information (eg, "Server1.Users").
Added new request # to n4ServerList:
4 = all known servers (TAB-delimited list)
If the current default server is a Directory Services connection, only
servers that are part of Directory Services are returned. If the
current default server is a bindery connection, only servers listed in
the bindery are returned.
Windows 32 extender 10005
netGetCon now accepts printer ports higher than LPT3 (up to LPT9).
WB 96D June 26, 1996
Fixed problem with PopMenu, when generating a file name based on an
application whose class name contained characters that were not valid file
name characters. PopMenu now strips off such characters when generating
the file name (eg, class name of "Edit:App" becomes "EditApp.mnw").
Fixed problem with PopMenu, where it would occasionally fail to launch the
editor when editing/creating a menu file.
In the 16-bit version, WinBatch now does not try to load CTL3DV2.DLL at
startup unless the DLL is located in the Windows System directory.
Compiler now searches path for extender DLL's, if they are not found in
the compiler directory, when compiling a large EXE.
Fixed problem with FileMenu locking up in some cases if the user rapidly
clicked twice on a menu.
Fixed problem with BoxDrawText with "alignment" = 32 (adjust font), where
sometimes the displayed font was too large.
Added two new alignment flags to BoxDrawText:
64 Right-justify text by adding space between words
128 Clip (truncate) text if it doesn't fit within specified rectangle
In FileMenu, fixed a problem with the status bar descriptions under
Windows NT 4.0.
DLL 2.3dbm First showing up in WB 96D
New functions:
RegEntryType(i:handle, s:subkey)
Returns the type of data for the specified subkey.
In the 32-bit version, the return value will be one of the following:
0 (REG_NONE) No value type
1 (REG_SZ) Unicode nul terminated string
2 (REG_EXPAND_SZ) Unicode nul terminated string (with environment variable references)
3 (REG_BINARY) Free form binary
4 (REG_DWORD) 32-bit number
5 (REG_DWORD_BIG_ENDIAN) 32-bit number
6 (REG_LINK) Symbolic Link (unicode)
7 (REG_MULTI_SZ) Multiple Unicode strings
8 (REG_RESOURCE_LIST) Resource list in the resource map
9 (REG_FULL_RESOURCE_DESCRIPTOR) Resource list in the hardware description
10 (REG_RESOURCE_REQUIREMENTS_LIST)
In the 16-bit version, the return value will always be 1.
RegQueryEx(i:handle, s:subkey, s:delimiter, i:type)
Retrieves a value from the registry.
"Delimiter" is ignored unless "type" is 7.
In the 32-bit version, "type" can be one of the following:
1 (REG_SZ) Unicode nul terminated string
2 (REG_EXPAND_SZ) Unicode nul terminated string (with environment variable references)
3 (REG_BINARY) Free form binary
4 (REG_DWORD) 32-bit number
7 (REG_MULTI_SZ) Multiple Unicode strings
In the 16-bit version, "type" must be 1.
RegSetEx(i:handle, s:subkey, s:value, s:delimiter, i:type)
Sets a value in the registry.
"Delimiter" is ignored unless "type" is 7.
See "RegQueryEx" for a list of valid types.
FileVerInfo(s:filename, s:language-key, s:resource-string)
Returns a version resource string from a binary file.
"filename" is the name of the EXE, DLL, or other binary file
containing version resource information.
"language-key" is a hexadecimal string identifying the desired
language and character-set block within the file's resource table.
U.S. English (w/ Windows Multilingual character set) is "040904E4".
You can specify a blank string ("") to indicate U.S. English, which
will almost always be appropriate.
"resource-string" specifies the item to return. The following are
standard item names (although some of these are optional and will
not necessarily be present in any particular file):
"Comments"
"CompanyName"
"FileDescription"
"FileVersion"
"InternalName"
"LegalCopyright"
"LegalTrademarks"
"OriginalFilename"
"ProductName"
"ProductVersion"
Example:
desc = FileVerInfo("notepad.exe", "", "FileDescription")
ver = FileVerInfo("notepad.exe", "", "FileVersion")
Message(desc, ver)
WinWaitExist(s:partial-winname, i:timeout)
Waits for a top-level window to exist.
"timeout" is the number of seconds to wait (maximum = 86400).
Specify 0 to have the function return immediately without waiting.
Specify -1 for no timeout (ie, wait forever).
Returns @TRUE if the window appeared; @FALSE if it didn't.
WinWaitChild(s:partial-parent-winname, s:partial-child-winname, i:timeout)
Waits for a child window to exist.
"timeout" is the number of seconds to wait (maximum = 86400).
Specify 0 to have the function return immediately without waiting.
Specify -1 for no timeout (ie, wait forever).
Returns @TRUE if the window appeared; @FALSE if it didn't.
New IntControl's:
IntControl(41, p1, 0, 0, 0)
Controls YmdHms format returned by time functions.
P1 Meaning
-- -------
-1 Don't change (just return current setting)
0 2-digit year (YY:MM:DD:HH:MM:SS) (default)
1 4-digit year (YYYY:MM:DD:HH:MM:SS)
This affects the following functions which return a YmdHms string:
FileYmdHms
TimeAdd
TimeJulToYmd
TimeSubtract
TimeYmdHms
Returns previous setting.
IntControl(42, p1, 0, 0, 0)
Get pointer to a binary buffer.
This returns the address of a pointer to a binary buffer. The
address will be within the memory space of the WIL Interpreter.
"P1" specifies the binary buffer (see BinaryAlloc).
Fixed problem with RegQueryItem, where only one item was being returned.
In the 16-bit version, fixed a problem with WinMetrics(-4) returning 0
under Windows for Workgroups if a secondary network (such as Netware) was
installed.
FileSize no longer returns an error if a wildcard file mask is specified
which does not match any files; it now returns 0.
All functions which take a YmdHms string as a parameter will now accept a
string in the format "YYYY:MM:DD:HH:MM:SS" (ie, containing a 4-digit year).
Fixed problem with time functions which return a YmdHms string (such as
TimeAdd) with years >= 2000.
Fixed problem with Delay function where the current year was >= 2000.
Changed TimeJulianDay so that it treats 2-digit years in the input string
as falling within the range 1950-2049 (eg, "96:04:01" is April 1, 1996).
This is consistent with the behavior of the other time functions.
Previously, TimeJulianDay was not adjusting the year, so that "96:04:01"
would be treated as April 1, 0096. To retain the old behavior, you can
specify a full 4-digit year (eg, "0096:04:01").
TimeJulianDay now correctly calculates julian dates for leap years that
are evenly divisible by 400 (such as 2000).
AddExtender and DllCall/DllLoad now also look for the specified DLL in the
directory where the WIL Interpreter application is located.
In the 32-bit version, SendKey (and SendKeysTo and SendKeysChild) now
attempt to wait until the active application is ready to accept input
before sending each keystroke. This can be disabled with IntControl 43
(see "DLL 2.3ebm" section, below).
Fixed problem with RegQueryBin truncating long values.
In the 16-bit version, fixed problem with FileAppend where the target was
a UNC.
Fixed memory allocation problem with WinWaitClose.
The 32-bit version can now process batch and menu files which were saved
by Notepad as Unicode text files. It may be able to handle Unicode text
files created with other editors as well, as long as the first character
in the file is a hexadecimal FFFE or FEFF.
In the 32-bit version, the Dialog and DialogBox functions now properly set
the current working directory when the user selects a file from a listbox.
Fixed problem where an error that occurred in a CALL'ed script would not
cancel the calling program.
In the 32-bit version, fixed problem with FileCopy, FileMove, and
FileAppend causing a crash if the specified source file did not exist and
the specified target was a UNC.
When AddExtender fails with an error 3437, it now displays a message box
with some idea of what the problem may be, or with a Windows error code.
NetWare 3 extender 12015 First showing up in WB 96D
Fixed problem with n3ChgPassword.
NOTE: Added "old-password" parameter to n3ChgPassword (changed from 96C).
NetWare 4 extender 14012 First showing up in WB 96D
Fixed problem with n4ChgPassword, when using bindery emulation.
In the 32-bit version, fixed problem with Unicode initialization errors
when using the Netware NT client.
Windows 32 extender 10007 First showing up in WB 96D
New functions:
netResources(s:net-resource, i:scope, i:type, i:usage)
Itemizes network resources.
This function returns a tab-delimited list of network resources
which are located immediately below the specified 'net-resource'.
'net-resource' can be a UNC (eg, "\\FredsPC"), a domain (eg,
"SALES"), or "" for the root of the network.
'scope' can be one of the following:
1 All currently connected resources
2 All resources on the network
3 All remembered (persistent) connections
'type' can be one of the following:
0 All resources
1 All disk resources
2 All print resources
3 All disk and print resources
'usage' can be one of the following:
0 All resources
1 All connectable resources
2 All container resources
3 All connectable and container resources
Note: 'usage' is ignored unless 'scope' is 2.
WB 96E June 27, 1996
New IntControl:
IntControl(1001, p1, 0, 0, 0) (32-bit only)
Set service process status.
P1 Meaning
-- -------
0 Run as a normal application (default).
1 Run as a service.
If WinBatch is running as a service, it will not be closed when the
user logs out.
Under Windows 95, this function actually registers the currently
executing WinBatch program as a service. Under Windows NT, it just
causes the WinBatch program to behave as a service (ie, don't close
when the user logs out); in order to launch a WinBatch program as a
service under Windows NT, you will need to use a utility such as the
SRVANY.EXE program which is included with the Windows NT Resource Kit.
Returns @TRUE on success, @FALSE on failure.
For window class names beginning with "Afx", PopMenu now bases the menu
name upon the application's module name instead of the class name.
DLL 2.3ebm First showing up in WB 96E
New IntControl:
IntControl(43, p1, 0, 0, 0) (32-bit only)
Enable/disable "WaitForInputIdle".
P1 Meaning
-- -------
-1 Don't change (just return current setting)
0 Don't wait for application to be ready.
1 Wait for application to be ready (default).
This controls whether SendKey (and SendKeysTo and SendKeysChild)
attempt to wait until the active application is ready to accept input
before sending each keystroke.
Returns previous setting.
WB 96F Oct 18, 1996
In BoxTextFont, expanded the "pitch & family" parameter to now be
"pitch & family & character-set":
In addition to the existing flags for pitch and family, you can now
specify one of the following flags specifying a character set (combined
with the pitch and/or family flags using the binary "OR" ["|"] operator):
ANSI_CHARSET 0 (default)
DEFAULT_CHARSET 256
SYMBOL_CHARSET 512
SHIFTJIS_CHARSET 32768 (Kanji)
HANGEUL_CHARSET 33024
GB2312_CHARSET 34304
CHINESEBIG5_CHARSET 34816
OEM_CHARSET 65280
The following flags are for Windows 95 and NT 4.0 only:
JOHAB_CHARSET 33280
HEBREW_CHARSET 45312
ARABIC_CHARSET 45568
GREEK_CHARSET 41216
TURKISH_CHARSET 41472
THAI_CHARSET 56832
EASTEUROPE_CHARSET 60928
RUSSIAN_CHARSET 52224
MAC_CHARSET 19712
BALTIC_CHARSET 47616
The character set flags will not override the typeface specified by the
font "name" parameter. If you would rather specify a character set than
a specific typeface, specify a blank string ("") for font "name".
Note: If you wish to use a Kanji (Japanese) font, you must specify the
SHIFTJIS_CHARSET flag (32768).
New IntControls:
IntControl(1002, p1, 0, 0, 0)
Sets icon display state.
This function sets the state of the WinBatch icon to being visible
(default) or hidden. It is equivalent to using WinShow() or
WinHide() on the current WinBatch window, except that after using
any of the Box[..] functions and then doing a BoxShut(), the icon
will go back to its previous display state.
P1 Meaning
-- -------
-1 Don't change (just return current setting)
0 Hide WinBatch icon.
1 Show WinBatch icon (default).
Returns previous setting.
IntControl(1003, p1, 0, 0, 0)
Prevents WinBatch icon from being opened.
This function sets the "open-able" flag for the WinBatch icon. If
this flag is on (default), then the WinBatch icon can be opened
(restored) to a normal window by clicking on the icon. If this flag
is off, then it will not be possible to open the WinBatch icon by any
method, including WinShow() or BoxOpen().
P1 Meaning
-- -------
-1 Don't change (just return current setting)
0 WinBatch icon cannot be opened.
1 WinBatch icon can be opened (default).
Returns previous setting.
IntControl(1004, 0, 0, 0, 0)
Returns the file name of the current WinBatch program.
If the current WinBatch script is a child program that was called with
the Call() function, this IntControl will return the name of the main
(calling) program.
If the current WinBatch script is a child program that was called with
the CallExt() function, this IntControl will return the name of the
current (called) program.
Fixed a problem with BoxButtonWait returning erroneously when the Enter or
Escape key was pressed.
Fixed a problem where FileMenu was getting added twice to the menus of
shortcut files. This occurred if a user removed the "IsShortcut" value
from the "lnkfile" key in the registry.
Fixed a problem with excessive repainting in the Box functions.
The compiler can now be used to compile an encoded or encrypted WBT to an
EXE file.
If you try to compile a source WBT which is already encoded or encrypted
to a target type which is an encoded or encrypted WBT, no processing will
be done on the file and the target will be identical to the source. In
other words, you cannot use the compiler to re-encode or re-encrypt a WBT,
or convert an encoded WBT to an encrypted WBT (or vice versa).
It is now possible to specify an "AutoExec" WIL script that will be called
before every WinBatch program that you run. This would be a convenient
place to set global variables, or perform standard startup commands, such
as AddExtender or IntControl. This will have the same effect as placing a
"Call" command to the AutoExec script as the first line of every WinBatch
program you run, so therefore:
1. Any variables you set in the AutoExec script will be global, and any
extenders you add will be available to the main WinBatch program.
2. If an error occurs in the AutoExec script, it will terminate the
main WinBatch program (unless you use the ErrorMode function).
3. If an Exit command is encountered in the AutoExec script, the main
WinBatch program will not be run.
4. If the main WinBatch program is a compiled EXE, the AutoExec script
must be an encoded WBT.
The AutoExec script is specified as follows:
In the 16-bit version, add either or both of the following entries to
the [WB16I] section of WWW-PROD.INI:
AutoExecWbc=filename
AutoExecWbt=filename
where "filename" is the name of your AutoExec script file.
In the 32-bit version, under the registry key:
HKEY_LOCAL_MACHINE\SOFTWARE\Wilson WindowWare\Settings\WWW-PROD\WB32I
create either or both of the following string values:
AutoExecWbc
AutoExecWbt
and enter the name of your AutoExec script file as the value data.
The "AutoExecWbc" settings are used when the WinBatch program being run
is a compiled WinBatch EXE. The specified value must be an encoded WBT.
The "AutoExecWbt" settings are used when the WinBatch program being run
is an un-compiled WinBatch script. The specified value may be either a
normal WBT or an encoded WBT.
The specified script file name does not need to have an extension of "WBC"
or "WBT". If it does not contain a full path, it will be searched for.
If the file does not exist, it will be skipped without causing an error
(of course, an error will occur if your main WinBatch program refers to a
variable that was supposed to have been defined in the AutoExec script;
the "IsDefined" function can be useful here).
DLL 2.3fbn First showing up in WB 96F
New functions:
FindWindow(s:class-name)
Returns the window title matching a specified class name.
This function returns the window title of the first window whose
class name matches the specified "class-name". A blank string ("")
is returned if no matching window is found.
"Class-name" must be the full class name (ie, not a partial name).
It is not case sensitive.
RegConnect(s:computer-name, i:handle) (32-bit only)
Connects to a predefined registry handle on another computer.
"computer-name" is in the form "\\computername".
"handle" can be either @REGMACHINE OR @REGUSERS.
Returns a key handle to the specified handle on the remote computer.
You should use RegCloseKey to close the key when you are finished
using it.
RegQueryKeys(i:handle)
Returns a tab-delimited list of subkey names under a specified key.
StrFixLeft(base-string, pad-string, length)
Pads or truncates the left side of a string to a fixed length using bytes.
This function "fixes" the length of a string, either by truncating
it on the left, or by prepending enough copies of pad-string to
achieve the desired length.
See "StrFix" for parameters and other information.
StrFixCharsL(base-string, pad-string, length)
Pads or truncates the left side of a string to a fixed length using characters.
This function "fixes" the length of a string, either by truncating
it on the left, or by prepending enough copies of pad-string to
achieve the desired length.
See "StrFixChars" for parameters and other information.
BinaryOleType(i:bin-handle, i:type, i:reserved-1, i:reserved-2, i:reserved-3)
Specifies how a binary buffer will be used by OLE functions.
This function defines the attributes of the binary buffer specified
by "bin-handle", which determines what happens when you use the
binary buffer handle as a parameter to an OLE object (ie, one
created with the "ObjectOpen" function).
This function does not modify any data in the binary buffer itself.
When an OLE object is called, and one of the parameters is a binary
buffer handle, the following actions are automatically taken:
1. An internal OLE buffer is created which is (at least) as large
as the binary buffer.
2. If the binary buffer is defined as an input (or input/output)
parameter (see "type" below), any data in the binary buffer (up
to the binary EOD) is converted as necessary to the specified
format and copied to the OLE buffer.
3. The OLE buffer is passed to the OLE object.
When the OLE object returns:
4. If the binary buffer is defined as an output (or input/output)
parameter (see "type" below), then any data in the OLE buffer
is copied back to the binary buffer. If it is possible to
determine how much data was returned in the OLE buffer, then
the binary EOD is set to the end of the data; otherwise, the
binary EOD is set to the end of the binary buffer.
5. The OLE buffer is freed.
"type" specifies what type of parameter the buffer will represent,
and whether it will be used as an input or output parameter (or
both). It consists of one entry from each of the following groups,
added together:
data type:
0 undefined
1 BSTR (VT_BSTR)
2 BSTR* (VT_BSTR | VT_BYREF)
direction:
100 input parameter
200 output parameter
300 input/output parameter
When a binary buffer is created with BinaryAlloc, it has a "type"
of 0 (undefined). You must use BinaryOleType to set the buffer's
type before using it as a parameter to an OLE object.
Parameters 3, 4, and 5 are reserved for future use, and should be
specified as 0.
Returns 1.
DiskVolInfo(root-path, request#) (32-bit only)
Returns information on a file system volume.
"root-path" specifies the root directory of a file system volume
(eg, "C:\" or "\\SERVER\PUBLIC\")
Req# Return value
---- ------------
1 (s) volume name
2 (s) file system name (eg, "FAT" or "NTFS")
3 (s) volume serial number (hex string; eg, "1234-ABCD")
4 (i) volume serial number (decimal)
5 (i) max length of filename component (portion between backslashes)
6 (b) volume preserves the case of filenames when storing files
7 (b) volume supports case-sensitive filenames
8 (b) volume supports Unicode in filenames
9 (b) volume preserves and enforces ACL's
10 (b) volume supports file-based compression
11 (b) volume is a compressed volume (eg, a DoubleSpace volume)
Request numbers which indicate a return type of "(b)" (Boolean)
return a value of 1 (@TRUE) or 0 (@FALSE).
Yields(i:count)
Provides time for other windows to do processing.
This function is the same as the "Yield" command, but allows you to
specify the number of yields to perform; eg, "Yields(5)" is the same
as 5 consecutive "Yield" commands.
"count" is the number of yields to perform.
See "Yield" for more information.
RegLoadHive(i:handle, s:subkey, s:filename) (32-bit only)
Loads a hive into a registry subkey.
"handle" can be @REGUSERS or @REGMACHINE.
"subkey" specifies the name of the key which will be created.
"filename" specifies the name of a hive file.
This function creates a subkey under HKEY_USERS or HKEY_LOCAL_MACHINE
and stores registration information from the specified file into that
subkey. This registration information is in the form of a hive. A
hive is a discrete body of keys, subkeys, and values that is rooted
at the top of the registry hierarchy.
Returns 1.
RegUnloadHive(i:handle, s:subkey) (32-bit only)
Unloads a hive from the registry.
"handle" can be @REGUSERS or @REGMACHINE.
"subkey" must specify a key which is mapped to a hive file.
Returns 1.
StrIndexNc(s:string, s:sub-string, i:start, i:direction)
Searches a string for a sub-string, ignoring case.
This function is the same as StrIndex, but is not case sensitive.
New IntControls:
IntControl(44, p1, 0, 0, 0)
Returns the class name for specified window handle.
p1 = window handle
The window handle can be obtained with the DllHwnd function.
Returns a blank string ("") if the window doesn't exist.
IntControl(45, p1, 0, 0, 0) (32-bit only)
Enable/disable "SendKey speedup" in DOS programs in Windows NT.
P1 Meaning
-- -------
-1 Don't change (just return current setting)
0 Don't speed up SendKey in DOS programs in Windows NT.
1 Speed up SendKey in DOS programs in Windows NT (default).
Normally, SendKey (and SendKeysTo and SendKeysChild) yields a little
processor time between keystrokes, to allow other Windows programs to
multitask. However, when sending keystrokes to a DOS program in
Windows NT, this can result in excessive delays between keystrokes,
and so in that case SendKey goes into "speedup" mode and grabs all the
processor time it can get. Another factor that affects SendKey speed
is the delay that is normally inserted between keystrokes, which by
default is 25 milliseconds but can be adjusted with IntControl(35).
When "SendKey speedup" mode is in effect, no such delay is inserted.
This function allows you to disable the "SendKey speedup" behavior if
it causes problems or is not desired.
Returns previous setting.
IntControl(46, p1, 0, 0, 0) (32-bit only)
Set window retry timeout.
By default, in the 32-bit version, most WIL functions which take a
window title as a parameter (except for WinExist) will wait up to 9
seconds for the specified window to appear if it does not already
exist. This IntControl allows you to change the timeout setting.
p1 = number of seconds to wait (default = 9), or 0 for no retries.
You can specify -1 to return the current setting without changing it.
Returns previous setting.
IntControl(47, p1, 0, 0, 0)
Closes another WinBatch program.
This IntControl lets a WIL script close another WinBatch program (it's
not possible to close a WinBatch program using "WinClose").
P1 = window title (can be partial) of a WinBatch program window.
If P1 is the current window, this function is the same as an Exit.
Returns @TRUE on apparent success, or @FALSE on apparent failure.
IntControl(48, p1, 0, 0, 0)
Closes a DOS program.
This IntControl lets you close the window of an MS-DOS program (it's
not possible to close a DOS window using "WinClose").
Note: You will not receive any warning from the operating system
before the window is closed, even if the DOS application contains
unsaved work. Use this function carefully.
P1 = window title (can be partial) of a DOS program window.
If P1 is not a DOS window, this function has no effect.
This function is not supported in Windows NT.
Returns @TRUE on apparent success, or @FALSE on apparent failure.
IntControl(49, p1, 0, 0, 0)
Add system menus to popup windows.
This IntControl lets you specify that certain types of WIL popup
windows will have system menus (a little box or icon at the left
side of the title bar) and minimize/maximize icon buttons.
"P1" specifies what types of windows will have these icons:
P1 Meaning
-- -------
-1 Don't change (just return current setting)
0 No windows (default).
1 Dialog boxes (created with "Dialog").
2 Item listboxes (eg, created with "AskItemList").
3 Dialog boxes and item listboxes.
Returns previous setting.
IntControl(50, p1, 0, 0, 0)
Controls whether "Go to web page" button is added to error boxes.
By default, when an error occurs in one of the WIL programs
distributed by Wilson WindowWare, and the program displays an error
message box, it checks the system to see if a Web browser has been
configured; if so, it adds a pushbutton to the error message box
which says "Go to Tech Support Web Page". If pressed, the button
launches the Web browser. This IntControl lets you prevent that
button from being added.
P1 Meaning
-- -------
-1 Don't change (just return current setting)
0 Don't add "Go to web page" button to error boxes.
1 Add "Go to web page" button to error boxes (default).
Returns previous setting.
IntControl(51, p1, 0, 0, 0) (32-bit only)
Specifies flags for CreateProcess.
In the 32-bit version, all the Run[..] commands call the Windows API
"CreateProcess" function to launch the application. This IntControl
lets you specify certain flags that control the priority class and
the creation of the process, and affects all subsequent Run[..]
commands. Under normal circumstances, you should not need to use this
IntControl at all. It should be used only by knowledgeable users, and
completely at your own risk. Some of these flags can have unexpected
or undesirable results. We cannot provide any support for their use.
P1 = one or more of the following flags, combined using the binary
"OR" ("|") operator. The default setting is 32:
Value Flag name Meaning
----- --------- -------
1 DEBUG_PROCESS If this flag is set, the calling process is treated as a debugger, and
the new process is a process being debugged. The system notifies the
debugger of all debug events that occur in the process being debugged.
If you create a process with this flag set, only the calling thread (the
thread that called CreateProcess) can call the WaitForDebugEvent function.
2 DEBUG_ONLY_THIS_PROCESS If not set and the calling process is being debugged, the new process
becomes another process being debugged by the calling process’s
debugger. If the calling process is not a process being debugged, no
debugging-related actions occur.
4 CREATE_SUSPENDED The primary thread of the new process is created in a suspended state,
and does not run until the ResumeThread function is called.
8 DETACHED_PROCESS For console processes, the new process does not have access to the
console of the parent process. The new process can call the
AllocConsole function at a later time to create a new console. This
flag cannot be used with the CREATE_NEW_CONSOLE flag.
16 CREATE_NEW_CONSOLE The new process has a new console, instead of inheriting the parent’s
console. This flag cannot be used with the DETACHED_PROCESS flag.
512 CREATE_NEW_PROCESS_GROUP The new process is the root process of a new process group. The process
group includes all processes that are descendants of this root process.
The process identifier of the new process group is the same as the
process identifier, which is returned in the lpProcessInformation
parameter. Process groups are used by the GenerateConsoleCtrlEvent
function to enable sending a CTRL+C or CTRL+BREAK signal to a group of
console processes.
1024 CREATE_UNICODE_ENVIRONMENT If set, the environment block pointed to by lpEnvironment uses Unicode
characters. If clear, the environment block uses ANSI characters.
2048 CREATE_SEPARATE_WOW_VDM Windows NT only: This flag is valid only when starting a 16-bit
Windows-based application. If set, the new process is run in a private
Virtual DOS Machine (VDM). By default, all 16-bit Windows-based
applications are run as threads in a single, shared VDM. The advantage
of running separately is that a crash only kills the single VDM; any
other programs running in distinct VDMs continue to function normally.
Also, 16-bit Windows-based applications that are run in separate VDMs
have separate input queues. That means that if one application hangs
momentarily, applications in separate VDMs continue to receive input.
4096 CREATE_SHARED_WOW_VDM Windows NT only: The flag is valid only when starting a 16-bit
Windows-based application. If the DefaultSeparateVDM switch in the
Windows section of WIN.INI is TRUE, this flag causes the CreateProcess
function to override the switch and run the new process in the shared
Virtual DOS Machine.
67108864 CREATE_DEFAULT_ERROR_MODE The new process does not inherit the error mode of the calling process.
Instead, CreateProcess gives the new process the current default error
mode. An application sets the current default error mode by calling
SetErrorMode. This flag is particularly useful for multi-threaded shell
applications that run with hard errors disabled. The default behavior
for CreateProcess is for the new process to inherit the error mode of
the caller. Setting this flag changes that default behavior.
These flags control the new process’s priority class, which is used in determining the scheduling priorities
of the process’s threads. If none of the following priority class flags is specified, the priority class
defaults to NORMAL_PRIORITY_CLASS unless the priority class of the creating process is IDLE_PRIORITY_CLASS.
In this case the default priority class of the child process is IDLE_PRIORITY_CLASS. One of the following
flags can be specified:
Value Flag name Meaning
----- --------- -------
32 NORMAL_PRIORITY_CLASS Indicates a normal process with no special scheduling needs.
64 IDLE_PRIORITY_CLASS Indicates a process whose threads run only when the system is idle and
are preempted by the threads of any process running in a higher priority
class. An example is a screen saver. The idle priority class is
inherited by child processes.
128 HIGH_PRIORITY_CLASS Indicates a process that performs time-critical tasks that must be
executed immediately for it to run correctly. The threads of a
high-priority class process preempt the threads of normal-priority or
idle-priority class processes. An example is Windows Task List, which
must respond quickly when called by the user, regardless of the load on
the operating system. Use extreme care when using the high-priority
class, because a high-priority class CPU-bound application can use
nearly all available cycles.
256 REALTIME_PRIORITY_CLASS Indicates a process that has the highest possible priority. The threads
of a real-time priority class process preempt the threads of all other
processes, including operating system processes performing important
tasks. For example, a real-time process that executes for more than a
very brief interval can cause disk caches not to flush or cause the
mouse to be unresponsive.
Returns previous setting.
Fixed problem with RegDelValue under Windows NT.
In the 32-bit version, fixed problem with Ctrl-Break not working during a
RunWait.
In the 32-bit version, FileCopy can now copy files to COM and LPT ports
(the 16-bit version has always been able to do this).
Increased the maximum number of extender entries from 100 to 200.
In the 32-bit version of FileVerInfo, if you specify a blank string for
"language-key", it will first try to look up the item under the language
key "040904E4" (U.S. English w/ Windows Multilingual character set). If
that fails, it will then try the key "040904B0" (U.S. English w/ Unicode
character set).
FileVerInfo now returns a blank string ("") if the specified item was not
found, instead of returning an error.
Fixed problem passing the number -2147483648 as a string parameter to
functions.
In the 32-bit version, fixed FileExist so that it actually returns a value
of 2 (as documented) if the file is open by another application. It was
returning a 1.
Fixed problem with the Random() function crashing if a negative number was
specified.
Added new request #'s for WinMetrics:
-6 pixels per horizontal dialog unit (rounded to an integer)
-5 pixels per vertical dialog unit (rounded to an integer)
Fixed problem with Debug displaying a return value of 0 for the last
command in a script, if there was more than one blank line at the end of
the script file.
Fixed "Opening parenthesis missing" error when using a variable name such
as 'max_users', where the portion of the variable name which preceded the
underscore (ie, 'max') was the same as the name of a WIL function.
In 32-bit version, fixed problem with Wallpaper() function in Windows NT 4.0.
In 32-bit version, fixed problem with Display() function not timing out in
some unusual cases.
If you do an Exit from a called script, it will now really exit the program
instead of returning to the calling script.
In 32-bit version, you can now specify a blank section name for
IniItemizePvt, but the specified INI file name must be a real file, not
a "virtual" file that has been mapped to the registry.
In 16-bit version, fixed a problem with WinMetrics(-4) returning 0 under
Windows 3.1 if a network (such as Netware) was installed.
In 32-bit version, changed NetInfo:
NetInfo(0) will always return the string "WINNT", regardless of the
operating system. This is consistent with previous behavior.
NetInfo(1) will now depend on the operating system:
Under Windows 95, NetInfo(1) will return a list of installed network
client ID's, delimited with the standard file delimiter (by default, a
tab). Some possible client ID's, with their corresponding
descriptions, are:
Client ID Description
--------- -----------
3OPEN 3Com 3+Open (all versions)
3SHARE 3Com 3+Share (all versions)
DLR IBM OS/2 LAN Server (versions below 1.2)
DLR12 IBM OS/2 LAN Server (version 1.2)
DLR13 IBM OS/2 LAN Server (versions 1.2, 1.3, and 1.2 without /API)
DLR13CSD IBM OS/2 LAN Server (version 1.3 CSD 5015/5050)
DLR20 IBM OS/2 LAN Server (version 2.0)
FTPNFS FTP Software NFS Client (InterDrive 95)
LANMAN Microsoft Real Mode LAN Manager
LANT5 Artisoft LANtastic (version 5.X and above)
MSNET Real mode MS-Net Compatible
NETWARE3 Novell NetWare (Workstation Shell 3.X [NETX])
NETWARE4 Novell NetWare (Workstation Shell 4.0 and above [VLM])
NOVELL32 Novell NetWare Client 32
NWREDIR Client for NetWare Networks
PATHWKS DEC PATHWORKS (versions below 4.0)
PATHWKS40 DEC PATHWORKS (version 4.x)
PCLP IBM PC LAN Program (all versions)
PCNFS50 SunSoft PC-NFS (version 5.0)
VINES552 Banyan DOS/Windows 3.1 client
VREDIR Client for Microsoft Networks
Under Windows NT, NetInfo(1) will return a list of installed network
provider ID's, delimited with the standard file delimiter (by default,
a tab). Some possible providers, with their corresponding
descriptions, are:
Provider ID Description
----------- -----------
LanmanWorkstation Microsoft Windows Network
NetWareWorkstation NetWare Services
NWCWorkstation NetWare or Compatible Network
Fixed problem with Display() function causing a "DlgPointLookup Failure"
if you put the Display() in a loop and held down the spacebar.
In 32-bit version, improved the problem of SendKey (and SendKeysTo and
SendKeysChild) sending keystrokes very slowly to DOS programs in Windows
NT. The speedup seems more noticeable in NT 4.0, although there should
be some improvement in NT 3.51 as well. If this new "SendKey speedup"
mode causes problems, it can be disabled with the new IntControl(45).
Fixed problem with using WaitForKey twice in a row to wait for the same
key, where the second WaitForKey returned immediately and didn't wait.
In 32-bit version, fixed problem with PlayWaveForm not working if a
keyword was specified (eg, "SystemStart") instead of a filename.
In 32-bit version, fixed problem with StrCmp, StrCmpi, and BinarySort,
when comparing or sorting two strings which were the same except for a
hyphen or apostrophe (eg, "coop" and "co-op"). StrCmp and StrCmpi would,
in some cases, return 1 instead of -1 (and vice versa), and BinarySort
would sort the two strings improperly.
In Dialog function, fixed problem with radio buttons having text
descriptions longer than 60 characters always being selected by default.
In 32-bit version, changed the way the Run[..] functions launch data files:
When launching data files, the Run[..] functions now retrieve the
command-line parameters from the registry, as well as the application
name. For example, if the command line associated with .WBT files is:
"C:\Program Files\WinBatch\System\WinBatch.Exe" "%1" %2
(note the quote marks), and you use the WIL function:
Run("Test Script.Wbt", "Alpha Beta")
then the actual command that will be executed is:
"C:\Program Files\WinBatch\System\WinBatch.Exe" "Test Script.Wbt" Alpha
The quote marks from the command line (as specified in the registry) are
preserved. %1 gets replaced with the name of the data file. %2 gets
replaced with the first parameter from the Run function ('Alpha'), if any.
If there were a %3 specified in the command line, it would have been
replaced with the second parameter from the Run function ('Beta'), if any,
but since there was no %3 specified the 'Beta' parameter was stripped off.
If the command line specified in the registry does not contain a %1, the
Run[..] functions assume that the (only) parameter to be passed to the
application is the name of the data file, with quote marks around it.
KeyToggleGet and KeyToggleSet now work properly in the 32-bit version.
Sounds now defaults to @OFF in the 32-bit version.
Fixed a problem sending Alt-key combinations and other extended keystrokes
to a small number of unusual DOS programs, particularly the DOS EDIT.COM.
NetWare 3 extender 12016 First showing up in WB 96F
(Note: the internal version number is mistakenly set as 12015)
New function:
n3CaptureGet(i:port-number)
Returns the name of the print queue associated with a printer capture.
"port-number" is a number from 1 to 9 (where 1 = "LPT1", etc).
Fixed problem with n3ServerList(request #'s 1 and 2) returning a blank
string or garbage characters in the WWN3Z32I.DLL version.
In the 32-bit version, fixed problem with n3CaptureEnd returning 0 and not
ending the capture.
NetWare 4 extender 14014 First showing up in WB 96F
New functions:
n4CaptureGet(i:port-number)
Returns the name of the print queue associated with a printer capture.
"port-number" is a number from 1 to 9 (where 1 = "LPT1", etc).
n4ObjectList(s:context, s:parent, s:class, s:mask)
Lists objects in a Directory Services tree.
"context" is a NetWare context, or "" for the current context.
"parent" is the object whose immediate subordinates are to be
listed, or "" for the top of the tree.
"class" identifies the type of objects to be listed. It can be ""
for all objects, or it can be one of the following NetWare classes:
"AFP Server"
"Alias"
"Bindery Object"
"Bindery Queue"
"Computer"
"Country"
"Device"
"Directory Map"
"External Entity"
"Group"
"List"
"Locality"
"Message Routing Group"
"Messaging Routing Group"
"Messaging Server"
"NCP Server"
"Organization"
"Organizational Person"
"Organizational Role"
"Organizational Unit"
"Partition"
"Person"
"Print Server"
"Printer"
"Profile"
"Queue"
"Resource"
"Server"
"Top"
"Unknown"
"User"
"Volume"
Note: Standard NetWare servers have a class of "NCP Server".
"mask" identifies the objects to be listed. It can be "" for all
names, or it can be a wildcard mask such as "Serv*".
Returns a tab-delimited list of object names.
Example:
objects = n4ObjectList("", "", "Queue", "")
ItemSelect("Queues in current context", objects, @TAB)
n4ObjectInfo(s:context, s:object, i:request)
Returns information on the specified object.
"context" is a NetWare context, or "" for the current context.
"object" is the name of a NetWare object.
"request" is one of the following:
0 Server (UNC) where the object is stored (eg, "\\SERVER").
This is not necessarily the server on which the object is
physically located.
1 Object class (see "n4ObjectList" for a list of classes).
Example:
server = n4ObjectInfo("Admin", "Print01", 0)
Message("Print01 is located on", server)
n4ObjectProps(s:context, s:object, s:attribute)
Returns properties of the specified object.
"context" is a NetWare context, or "" for the current context.
"object" is the name of a NetWare object.
"attribute":
If "attribute" is a blank string (""), this function will return
a tab-delimited list of all attributes for "object".
If "attribute" specifies an valid attribute of "object", this
function will return a tab-delimited list of values for that
attribute.
Note: Only string values will be returned correctly.
Examples:
host = n4ObjectProps("", "Print01", "Host Device")
Message("Host Device", host)
; list all attributes and values for an object
attribs = n4ObjectProps("", "Print01", "")
count = ItemCount(attribs, @TAB)
For i = 1 To count
attrib = ItemExtract(i, attribs, @TAB)
values = n4ObjectProps("", "Print01", attrib)
ItemSelect(attrib, values, @TAB)
Next
n4NameConvert(s:context, s:object, i:format)
Converts an object name to a different format.
"context" is a NetWare context, or "" for the current context.
"object" is the name of a NetWare object.
If "object" contains a period ("."), it is assumed to be in
canonical format; otherwise, it is assumed to be in abbreviated
format. If "object" begins with two slashes "\\", it is assumed
to be a UNC.
If "object" is in an invalid format, it will be returned as-is,
without being converted.
"format" specifies what format "object" will be converted to, and
is one of the following:
1 canonical, typed (eg, "CN=Server.O=Office")
2 abbreviated, typed (eg, "CN=Server")
3 canonical, typeless (eg, "Server.Office")
4 abbreviated, typeless (eg, "Server")
5 UNC (eg, "\\Server")
Example:
objname = n4NameConvert("", "\\Server", 3)
Message("Object name", objname)
In the 32-bit version, fixed problem with n4CaptureEnd returning 0 and not
ending the capture.
Fixed problem with n4MemberGet erroneously returning @FALSE in some cases.
Fixed problem with n4ServerList(4) only returning the names of servers
that were located in the current context.
Windows 32 extender 11000 First showing up in WB 96F
Split the Windows 32 extender (WWNET32I.DLL) into separate extenders for
Windows 95 (WWW9532I.DLL) and Windows NT (WWWNT32I.DLL). The existing
net[..] functions have been renamed to w95[..] and wnt[..], respectively:
Old Windows 32 New Windows 95 New Windows NT
-------------- -------------- --------------
netAddDrive w95AddDrive wntAddDrive
netAddPrinter w95AddPrinter wntAddPrinter
netCancelCon w95CancelCon wntCancelCon
netDirDialog w95DirDialog wntDirDialog
netGetCon w95GetCon wntGetCon
netGetUser w95GetUser wntGetUser
netResources w95Resources wntResources
netVersion w95Version wntVersion
For backwards compatability, we are continuing to distribute an extender
DLL named WWNET32I.DLL which supports the existing net[..] functions.
However, this DLL is a "wrapper" or "shell" which calls the appropriate
platform-specific extender DLL (ie, WWW9532I.DLL or WWWNT32I.DLL).
Therefore, one of these two DLL's (depending on the operating system being
used) will need to be available (either in the current directory, in the
same directory as WWNET32I.DLL, or in a directory on the path).
Windows 95 extender 11000 First showing up in WB 96F
New functions:
w95ShareAdd(s:server-name, s:resource, s:share-name, i:share-type, i:flags)
Shares a resource.
"server-name" can be the name of the server on which the function
will execute, or a blank string ("") to indicate the current machine.
"resource" identifies the object to be shared. It can be a directory
name (eg, "C:\UTIL"), a printer object (eg, "HP LaserJet III"), or
the name of a shareable device.
"share-name" is the name by which other users will access the resource.
"share-type" identifies what type of object "resource" is, and can
be one of the following:
0 directory
1 printer
2 device
"flags" specifies the access type being granted to other users:
If share-level access control is being used, then "flags" can be
one of the following:
100001 read-only
100002 full
100003 depends on password
Note: If "resource" specifies a printer, then "flags" should
be set to 100002.
If user-level access control is being used, then "flags" should be
set to 100002.
Returns 1.
w95ShareSet(s:server-name, s:share-name, s:comment, s:full-password, s:read-password)
Sets additional share information for a resource.
"comment" is a text string that can be used to describe the share,
or a blank string ("") if no comment is desired.
"full-password" and "read-password":
If share-level access control is being used, and "share-name"
specifies a directory, then "full-password" specifies the password
that is required for full access, and "read-password" specifies
the password that is required for read-only access.
If share-level access control is being used, and "share-name"
specifies a printer, then "full-password" specifies the password
that is required for access, and "read-password" should be set to
a blank string ("").
If user-level access control is being used, then "full-password"
and "read-password" should be set to blank strings ("").
See "w95ShareAdd" for additional parameter information.
Returns 1.
w95ShareDel(s:server-name, s:share-name)
Un-shares a resource.
See "w95ShareAdd" for parameter information.
Returns @TRUE if the share was deleted, or @FALSE if there was no
share with the specified name.
w95AccessAdd(s:server-name, s:resource, s:user/group name, i:access-rights, i:flags)
Adds or updates an access (permission) record for a resource.
If "resource" is a printer, it should be specified in the form:
"\PRINT\sharename"
"user/group name" is the name of the user or group to whom access is
being granted. If necessary, it can be fully qualified as
"server\user".
"access-rights" specifies the type of access that is being granted:
It can be one of the following standard permission types:
@ACC_READ_95 Read-only access
@ACC_FULL_95 Full access
Or, you can can specify a combination of the following custom
permission bits, combined using the binary "OR" ("|") operator:
@ACC_READ Read
@ACC_WRITE Write
@ACC_CREATE Create
@ACC_DELETE Delete
@ACC_ATTRIB Change attributes
@ACC_LIST List files
@ACC_CONTROL Change access control
If "resource" specifies a printer, "access-rights" should be:
@ACC_FULL_95 Full access
"flags" is reserved for future use, and should be set to 0.
See "w95ShareAdd" for additional parameter information.
If an access record already exists for "resource" for the specified
"user/group name", it will be updated to have the specified
"access-rights".
Note: This function can only be used if user-level access control
is being used (this is configured under "Network" settings).
Returns 1.
w95AccessDel(s:server-name, s:resource, s:user/group name)
Removes an access (permission) record from a resource.
If "resource" is a printer, it should be specified in the form:
"\PRINT\sharename"
See "w95ShareAdd" and "w95AccessAdd" for parameter information.
Note: This function can only be used if user-level access control
is being used (this is configured under "Network" settings).
Returns @TRUE if any records were deleted, or @FALSE if no
appropriate records were found.
w95ListGroups(s:server)
Lists all global user groups in an NT domain.
"server" is the UNC name of an NT primary or backup domain
controller, to which you are logged in (eg, "\\MYSERVER").
Note: In order to use this function, you must have RADMIN32.DLL and
RLOCAL32.DLL present. These DLL's can be found in the Microsoft
Windows 95 Service Pack 1.
Returns tab-delimited list of groups.
w95MemberGet(s:server, s:group, s:user)
Determines if user is a member of a global group in an NT domain.
"server" is the UNC name of an NT primary or backup domain
controller, to which you are logged in (eg, "\\MYSERVER").
Note: In order to use this function, you must have RADMIN32.DLL and
RLOCAL32.DLL present. These DLL's can be found in the Microsoft
Windows 95 Service Pack 1.
Returns @TRUE or @FALSE.
w95MemberSet(s:server, s:group, s:user)
Adds user to a global group in an NT domain.
"server" is the UNC name of an NT primary or backup domain
controller, to which you are logged in (eg, "\\MYSERVER").
Note: In order to use this function, you must have RADMIN32.DLL and
RLOCAL32.DLL present. These DLL's can be found in the Microsoft
Windows 95 Service Pack 1.
Returns @TRUE on success; @FALSE if user already member of group.
w95MemberDel(s:server, s:group, s:user)
Removes user from a global group in an NT domain.
"server" is the UNC name of an NT primary or backup domain
controller, to which you are logged in (eg, "\\MYSERVER").
Note: In order to use this function, you must have RADMIN32.DLL and
RLOCAL32.DLL present. These DLL's can be found in the Microsoft
Windows 95 Service Pack 1.
Returns @TRUE on success; @FALSE if user not member of group.
w95MemberGrps(s:server, s:user)
Lists all global groups in an NT domain to which a user belongs.
"server" is the UNC name of an NT primary or backup domain
controller, to which you are logged in (eg, "\\MYSERVER").
Note: In order to use this function, you must have RADMIN32.DLL and
RLOCAL32.DLL present. These DLL's can be found in the Microsoft
Windows 95 Service Pack 1.
Returns tab-delimited list of groups.
w95MemberList(s:server, s:group)
Lists all members of a global group in an NT domain.
"server" is the UNC name of an NT primary or backup domain
controller, to which you are logged in (eg, "\\MYSERVER").
Note: In order to use this function, you must have RADMIN32.DLL and
RLOCAL32.DLL present. These DLL's can be found in the Microsoft
Windows 95 Service Pack 1.
Returns tab-delimited list of users.
Windows NT extender 11000 First showing up in WB 96F
New functions:
wntShareAdd(s:server-name, s:resource, s:share-name, i:share-type, i:max-users)
Shares a resource.
"server-name" can be the name of the server on which the function
will execute, or a blank string ("") to indicate the current machine.
If "share-type" = 1 (printer), then "server-name" is ignored and
should be set to a blank string ("").
"resource" identifies the object to be shared. It can be a directory
name (eg, "C:\UTIL"), a printer object (eg, "HP LaserJet III"), or
the name of a shareable device.
"share-name" is the name by which other users will access the resource.
"share-type" identifies what type of object "resource" is, and can
be one of the following:
0 directory
1 printer
2 device
"max-users" indicates the maximum number of users allowed, or -1 for
the highest possible number. If "share-type" = 1 (printer), this
parameter is ignored and should be set to -1.
Returns 1.
wntShareSet(s:server-name, s:resource/share-name, i:share-type, s:comment, s:location)
Sets additional share information for a resource.
"resource/share-name" identifies the object to be modified:
If "share-type" = 1 (printer), then "resource/share-name" should
specify the object's resource name (eg, "HP LaserJet III").
Otherwise, it should specify the object's share name.
"comment" is a text string that can be used to describe the share,
or a blank string ("") if no comment is desired.
"location":
If "share-type" = 1 (printer), then this is a text string that can
be used to describe the location of the printer, or a blank string
("") if no location description is desired.
For other share types, this parameter is ignored and should be set
to a blank string ("").
See "wntShareAdd" for additional parameter information.
Returns 1.
wntShareDel(s:server-name, s:resource/share-name, i:share-type)
Un-shares a resource.
"resource/share-name" identifies the object to be modified:
If "share-type" = 1 (printer), then "resource/share-name" should
specify the object's resource name (eg, "HP LaserJet III").
Otherwise, it should specify the object's share name.
See "wntShareAdd" for additional parameter information.
Returns @TRUE if the share was deleted, or @FALSE if there was no
share with the specified name.
wntAccessAdd(s:server-name, s:resource/share-name, s:user/group name, i:object-type, s:access-string)
Adds or updates access (permission) records for a resource.
"server-name" can be the name of the server on which the function
will execute, or a blank string ("") to indicate the current machine.
This is used for looking up share names (if "resource/share-name"
specifies a share) and user/group names.
"resource/share-name" identifies the object to be modified:
If "object-type" = 100 (share), then "resource/share-name" should
specify the name of the share.
If "object-type" = 400 (registry key), then "resource/share-name"
should be the handle of an open registry key (opened with the
"RegOpenKey" function), or a predefined registry handle (listed
in the WIL Reference under "Registration Database Operations").
Otherwise, "resource/share-name" should specify the name of the
resource (eg, "HP LaserJet III" or "C:\UTIL\MYFILE.TXT").
"user/group name" is the name of the user or group to whom access is
being granted. If necessary, it can be fully qualified as
"server\user".
"object-type" indicates the type of object identified by
"resource/share-name", and can be one of the following:
100 share (eg, a directory accessed through a share)
200 printer (accessed through a share)
300 file or directory in an NTFS partition
400 registry key
"access-string" specifies the type of access that is being granted.
It can be either (A) a predefined access type, or (B) a delimited list
of one or more specific "access-records". Both are described below:
(A) Predefined access types:
These get translated into specific access records, as shown. It
is possible that the appropriate values may vary depending on your
system configuration, or among different versions of Windows NT:
Access-string Meaning Specific equivalent
-------------- ---------------- --------------------------
"DirNT:List" List "0:2:1179817"
"DirNT:Read" Read "0:9:-1610612736|0:2:1179817"
"DirNT:Add" Add "0:2:1180086"
"DirNT:AddRead" Add & Read "0:9:-1610612736|0:2:1180095"
"DirNT:Change" Change "0:9:-536805376|0:2:1245631"
"DirNT:Full" Full Control "0:9:268435456|0:2:2032127"
"DirNT:None" No Access "1:9:268435456|1:2:2032127"
"DirShare:Read" Read "0:0:1179817"
"DirShare:Change" Change "0:0:1245631"
"DirShare:Full" Full Control "0:0:2032127"
"DirShare:None" No Access "1:0:2032127"
"File:Read" Read "0:0:1179817"
"File:Change" Change "0:0:1245631"
"File:Full" Full Control "0:0:2032127"
"File:None" No Access "1:0:2032127"
"Print:Print" Print "0:0:131080"
"Print:Manage" Manage Documents "0:0:131072|0:0:268435456"
"Print:Full" Full Control "0:0:983052|0:0:268435456"
"Print:None" No Access "1:0:983052|1:0:268435456"
"Reg:Read" Read "0:2:131097"
"Reg:Full" Full Control "0:2:983103"
Note: "DirShare" is a directory accessed through a share
("object-type" = 100). "DirNT" is a directory in an NTFS
partition, accessed through NT security ("object-type" = 300).
(B) Specific "access-records":
This can be a single record, or a list of records (maximum of 10)
delimited with vertical bars (|). Each record is in the format:
record-type:access-flags:access-rights
where "record-type", "access-flags", and "access-rights" are each
a decimal number, separated with colons (:).
It is not expected that most users will want to manually create
or edit "access-records" strings. Instead, you can use the
"wntAccessGet" function to return an "access-records" string in
the proper format to be used with this function. This can be
useful for transferring access rights from one user to another.
A brief description of the fields in the "access-records" string
follows (note that any detailed explanation is beyond the scope of
this document, but might be obtained from the WIN32 SDK programmers'
documentation available from Microsoft and other publishers):
"record-type" (one of the following):
0 ACCESS_ALLOWED_ACE_TYPE
1 ACCESS_DENIED_ACE_TYPE
"access-flags" (0, or, one or more of the following):
1 OBJECT_INHERIT_ACE
2 CONTAINER_INHERIT_ACE
4 NO_PROPAGATE_INHERIT_ACE
8 INHERIT_ONLY_ACE
"access-rights" (one or more of the following, usually several,
depending on the object type; this is not a complete list):
1 FILE_LIST_DIRECTORY (Dir)
1 FILE_READ_DATA (File)
2 FILE_ADD_FILE (Dir)
2 FILE_WRITE_DATA (File)
4 FILE_ADD_SUBDIRECTORY (Dir)
4 FILE_APPEND_DATA (File)
8 FILE_READ_EA
16 FILE_WRITE_EA
32 FILE_TRAVERSE (Dir)
32 FILE_EXECUTE (File)
64 FILE_DELETE_CHILD
128 FILE_READ_ATTRIBUTES
256 FILE_WRITE_ATTRIBUTES
65536 DELETE
131072 READ_CONTROL
262144 WRITE_DAC
524288 WRITE_OWNER
1048576 SYNCHRONIZE
268435456 GENERIC_ALL
536870912 GENERIC_EXECUTE
1073741824 GENERIC_WRITE
-2147483648 GENERIC_READ
If any access records already exist for "resource/share-name" for
the specified "user/group name", they will be removed before adding
the records specified by "access-string".
Note: If you have not previously added any permissions to a share,
it may implicitly have some default permissions (eg, when you create
a share for a directory, it defaults to giving "Full Control" access
to "Everyone"). When you use "wntAccessAdd" to create an access
record for such a share, it will supercede those default permissions
(ie, the default permissions will be removed). If you wish to keep
the default permissions, use "wntAccessAdd" to set them explicitly.
Returns 1.
wntAccessDel(s:server-name, s:resource/share-name, s:user/group name, i:object-type)
Removes access (permission) records from a resource.
This function removes all access records from "resource/share-name"
that are associated with "user/group name".
See "wntAccessAdd" for parameter information.
Returns @TRUE if any records were deleted, or @FALSE if no
appropriate records were found.
wntAccessGet(s:server-name, s:resource/share-name, s:user/group name, i:object-type)
Returns access (permission) records for a resource.
Returns a list of access records for "resource/share-name" for the
specified "user/group name", delimited with vertical bars (|). See
"wntAccessAdd" for information on the format of the access records.
If there are no appropriate records, it returns a blank string ("").
Note: If you have not previously added any permissions to a share,
it may implicitly have some default permissions (eg, when you create
a share for a directory, it defaults to giving "Full Control" access
to "Everyone"), although there may not actually be any access records
for the share. Therefore, "wntAccessGet" may return a blank string
(""). However, if you go into File Manager (or Explorer), bring up
the "Permissions" dialog for the share, and then simply select "OK",
it will cause the implicit permissions to become actual permissions,
which you can then retrieve using "wntAccessGet".
See "wntAccessAdd" for parameter information.
Returns a delimited list of access records.
wntListGroups(s:server, i:group-type)
Lists all user groups on a server or domain.
"server" is the UNC name of the server on which the function will
execute (eg, "\\MYSERVER"), or "" for the local computer.
"group-type" can be @LOCALGROUP or @GLOBALGROUP.
Returns tab-delimited list of groups.
wntMemberGet(s:server, s:group, s:user, i:group-type)
Determines if user is a member of a group.
"server" is the UNC name of the server on which the function will
execute (eg, "\\MYSERVER"), or "" for the local computer.
"group-type" can be @LOCALGROUP or @GLOBALGROUP.
Returns @TRUE or @FALSE.
wntMemberSet(s:server, s:group, s:user, i:group-type)
Adds user to a group.
"server" is the UNC name of the server on which the function will
execute (eg, "\\MYSERVER"), or "" for the local computer.
"group-type" can be @LOCALGROUP or @GLOBALGROUP.
Returns @TRUE on success; @FALSE if user already member of group.
wntMemberDel(s:server, s:group, s:user, i:group-type)
Removes user from a group.
"server" is the UNC name of the server on which the function will
execute (eg, "\\MYSERVER"), or "" for the local computer.
"group-type" can be @LOCALGROUP or @GLOBALGROUP.
Returns @TRUE on success; @FALSE if user not member of group.
wntMemberGrps(s:server, s:user, i:group-type, i:flags)
Lists all groups to which a user belongs.
"server" is the UNC name of the server on which the function will
execute (eg, "\\MYSERVER"), or "" for the local computer.
"group-type" can be @LOCALGROUP or @GLOBALGROUP.
"flags" -- if "group-type" = @LOCALGROUP, you can set "flags" to 1
to include groups that the user is a member of indirectly.
Otherwise, set to 0.
Returns tab-delimited list of groups.
wntMemberList(s:server, s:group, i:group-type)
Lists all members of a user group.
"server" is the UNC name of the server on which the function will
execute (eg, "\\MYSERVER"), or "" for the local computer.
"group-type" can be @LOCALGROUP or @GLOBALGROUP.
Returns tab-delimited list of users.
wntResources2(s:net-resource, i:scope, i:type, i:usage, s:provider)
Itemizes network resources.
Note: This function supercedes the "wntResources" function.
This function returns a tab-delimited list of network resources
which are located immediately below the specified 'net-resource'.
'net-resource' can be a server UNC (eg, "\\FredsPC"), a domain (eg,
"SALES"), or the name of a container object within a domain (eg,
"Directory Services"). It cannot be a network provider. You can
specify "" for the root of the network or the root of the network
provider (depending on the 'provider' parameter, below).
'scope' can be one of the following:
1 All currently connected resources
2 All resources on the network
3 All remembered (persistent) connections
'type' can be one of the following:
0 All resources
1 All disk resources
2 All print resources
3 All disk and print resources
'usage' can be one of the following:
0 All resources
1 All connectable resources
2 All container resources
3 All connectable and container resources
Note: A "connectable" object is an object that can be connected
to, such as a directory or a printer. A "container" object is an
object that contains other objects, such as a domain or a server.
'provider' is the name of the network provider under which
'net-resource' is located, most commonly "Microsoft Windows Network"
(for Windows NT) or "Netware Services" (for Netware). If you don't
have any secondary networks on your system, you can usually specify
a blank string ("") for 'provider'.
If you specify blank strings ("") for both 'net-resource' and
'provider', this function will return a list of network providers.
If you specify a blank string ("") for 'net-resource' and a non-blank
'provider', this function will return a list of network resources
located beneath 'provider'.
Note: 'net-resource', 'usage', and 'provider' are ignored unless
'scope' is 2. That is, you can itemize all current or persistent
connections network-wide, eg:
wntResources2("", 1, 0, 1, "")
Or you can itemize all available resources under a specific
'net-resource', eg:
wntResources2("\\JELLO", 2, 0, 1, "Microsoft Windows Network")
But you can't do both at the same time, ie, you can't itemize
current connections under a specific 'net-resource'.
wntServiceAt(s:server, s:domain, i:server-type, s:service-name, i:flags)
Lists all servers in a domain which contain a specified service.
"server" is the UNC name of the server on which the function will
execute (eg, "\\MYSERVER"), or "" for the local computer.
"domain" is the name of the domain which will be used (eg, "SALES"),
or "" for the primary domain.
"server-type" identifies the type of servers which will be examined.
You can specify -1 for all servers. Or, you can specify one or more
of the following flags, combined using the binary OR ("|") operator;
servers meeting
1 All LAN Manager workstation
2 All LAN Manager server
4 Any server running with Microsoft SQL Server
8 Primary domain controller
16 Backup domain controller
32 Server running the timesource service
64 Apple File Protocol servers
128 Novell servers
256 LAN Manager 2.x Domain Member
512 Server sharing print queue
1024 Server running dialin service
2048 Xenix server
4096 Windows NT (either workstation or server)
8192 Server running Windows for Workgroups
16384 Microsoft File and Print for Netware
32768 Windows NT Non-DC server
65536 Server that can run the browser service
131072 Server running a browser service as backup
262144 Server running the master browser service
524288 Server running the domain master browser
4194304 Windows 95 or newer
-2147483648 Domain announcement
"service-name" is the name of the service to be looked for.
"flags" specifies information on the service being looked for. It
consists of one entry from each of the following three groups, added
together:
service type:
1 services
2 drivers
3 both (services and drivers)
service state:
100 active services
200 inactive services
300 both (active and inactive)
name type (indicates what the "service-name" parameter represents):
0 display name (the name shown in Control Panel)
1000 service name (the actual registry key name)
Returns a tab-delimited list of server UNC names (eg, "\\MYSERVER").
Note: An NT workstation can be considered to be a "server".
Note: This function can take a while to run, depending on how many
servers are in the domain. Also, it will only return the names of
servers which it is able to access, which requires that the user
have browse access to their service control managers.
wntChgPswd(s:server/domain, s:user, s:old-pass, s:new-pass)
Changes a user's password.
"server/domain" can be either a server name (eg, "\\MYSERVER") or
domain name (eg, "SALES") on which the password will be changed, or
a blank string ("") for the current user's login domain.
"user" is the name of the user whose password will be changed, or a
blank string ("") for the current user's login name.
"old-pass" is the user's existing password on "server/domain". It
can be a blank string ("") if the user has no existing password.
"new-pass" is the new password to be set. It can be a blank string
to indicate ("") that no password is desired.
Returns 1.
Windows 3.1 (Basic) extender 15003 First showing up in WB 96F
w3AddCon and w3GetCon now accept printer ports higher than LPT3 (up to LPT9).
Windows for Workgroups (MultiNet) extender 16002 First showing up in WB 96F
wnAddCon and wnGetCon now accept printer ports higher than LPT3 (up to LPT9).
All functions which change the active sub-network now restore it afterwards.
This fixes a problem with using NetInfo after one of the extender functions.
WILX extender 11105 First showing up in WB 96F
In the 32-bit version, changed xMemCompact:
In Windows 95, this function is not supported and will return 0.
In Windows NT, this function has been fixed to use the appropriate Win32
system calls. Since there's no distinction between local and global
memory in NT, it doesn't make any difference whether you specify a
'type' of 0 or 1.
WB 96G Oct 21, 1996
Changed "AutoExec" processing (see "WB 96F" section, above), as follows:
The file names specified by "AutoExecWbc" and "AutoExecWbt" cannot
contain any path information (ie, no '\' or ':' characters). If they
do, they will be ignored. These files must be located in the same
directory as the WinBatch program (ie, for "AutoExecWbc", the directory
where your compiled WinBatch script is located; and for "AutoExecWbt",
the directory where WINBATCH.EXE or WBAT16I.EXE is located).
DLL 2.3gbn First showing up in WB 96G
Fixed string memory leak when comparing "floating point string" variables, eg:
x = "1.25"
If x != 0 Then y = 1
FileVerInfo now returns the string "NONE" if no version information is
available for the specified file (previously, it returned an error).
Windows NT extender 11001 First showing up in WB 96G
Fixed problem with wntAccessAdd, when accessing registry keys.
Windows 3.1 (Basic) extender 15004 First showing up in WB 96G
Fixed problem with the extender not loading due to a "wrong platform" error.
WB 96H Nov 4, 1996
In compiler, fixed a problem creating an EXE if the 'TEMP' environment
variable pointed to an invalid directory.
DLL 2.3hbn First showing up in WB 96H
You can now specify partial child window names beginning with a tilde (~)
(see "DLL 2.2abj" section, above).
In Debug mode, a couple of status strings were not being displayed when
appropriate: "*** Debug Initialized ***" and "IF DO==>FALSE".
WB 96J Nov 5, 1996
Fixed problem with BoxDestroy not removing buttons.
DLL 2.3jbn First showing up in WB 96J
In 32-bit version, fixed problem with network licensing.
Fixed problem parsing constant names which contain underscores (eg,
"@ATTR_RO") (this bug first appeared in 2.3fbn).
Improved MouseClick function. Double-clicks should now work better (there
was a problem with some applications). In the 32-bit version, improved
the method of emulating other types of clicks, especially when using
modifiers such as @SHIFT and @CTRL.
Fixed problem with SendMenusTo with double-byte character sets.
In the Dialog function, fixed problem where the dialog would be centered
on the screen if you specified a small number (less than 20 or so) for the
Y (vertical) coordinate.
In 32-bit version, improved the reliability of the DiskFree and DiskSize
functions with drives larger than 2 gigabytes, under Windows 95 OEM
Service Release 2 or higher. Under earlier versions of Windows 95, these
functions may not return accurate results. Under NT, there is no problem.
Windows NT extender 11002 First showing up in WB 96J
New functions:
wntOwnerGet(s:server-name, i:reg-key, s:resource-name, i:object-type, i:flag)
Returns the owner of an object.
"server-name" can be the name of the server on which the function
will execute, or a blank string ("") to indicate the current machine.
This is used for looking up user/group names.
"reg-key" is used only if the object is a registry key:
If "object-type" = 400 (registry key), then "reg-key" should be
the handle of an open registry key (opened with the "RegOpenKey"
function), or a predefined registry handle (listed in the WIL
Reference under "Registration Database Operations").
Otherwise, "reg-key" is ignored, and should be specified as 0.
"resource-name" identifies the object to be accessed:
If "object-type" = 400 (registry key), then "resource-name" can be
a subkey string relative to "reg-key", or a blank string ("") if
"reg-key" represents the actual object to be accessed.
Otherwise, "resource-name" should specify the name of the object
(eg, "C:\UTIL\MYFILE.TXT").
"object-type" indicates the type of object identified by
"resource-name", and can be one of the following:
300 file or directory in an NTFS partition
400 registry key
"flag" specifies the format of the returned string, and can be one
of the following:
0 account (eg, "johndoe")
1 domain\account (eg, "OFFICE\johndoe")
Note: For built-in accounts which are predefined by the system
(eg, "Administrators"), only the account name is returned,
regardless of the "flag" setting.
Returns the name of the account that owns the object, or a blank
string ("") if the object has no owner.
wntOwnerSet(s:server-name, i:reg-key, s:resource-name, i:object-type, s:user/group name)
Takes ownership of an object.
"user/group name" is the name of the user or group who is taking
ownership of the object. If necessary, it can be fully qualified as
"server\user". It can be either the current user, or "Administrators".
You can specify a blank string ("") to indicate "Administrators".
"object-type" indicates the type of object identified by
"resource-name", and can be one of the following:
300 file or directory in an NTFS partition
400 registry key
In addition to taking ownership of an object, you may also wish to
reset the object's access (permission) records to the system default
(which grants full control to everyone). To do this, add 50 to the
values for "object-type" listed above, ie:
350 file or directory in an NTFS partition -- reset access records
450 registry key -- reset access records
After resetting the object's access records, you can use the
wntAccessAdd function to change the object's permissions.
See wntOwnerGet for additional parameter information.
Returns 1.
NetWare 3 extender 12017 First showing up in WB 96J
n3MsgSend now returns @FALSE if the specified user is not logged in, and
returns an error if an invalid user name is specified.
NetWare 4 extender 14015 First showing up in WB 96J
Fixed problem with n4CaptureGet returning an incorrect name in some cases.
Changed n4CaptureGet to return an abbreviated name relative to the current
context (eg, "Printer1.Print") instead of a canonical name
(eg, "Printer1.Print.Sales").
n4MsgSend now returns @FALSE if the specified user is not logged in, and
returns an error if an invalid user name is specified.
WB 96K Dec 9, 1996
Fixed problem (introduced in 96J) with large EXE's failing to extract the
embedded DLL's if launched from a UNC (with a "Disk space lookup" error).
DLL 2.3kbn First showing up in WB 96K
Fixed problem (introduced in 96J) with FileCopy, FileMove, and FileAppend
failing if the target was a UNC (with an "Insufficient free space" error).
Fixed problem with DirExist returning @FALSE for a top-level UNC (eg,
"\\FredsPC\C").
WB 96M Dec 12, 1996
DLL 2.3mbn First showing up in WB 96M
In 32-bit version, fixed problem with SendKey causing a system crash under
NT 4.0 when sending keystrokess to two different windows and switching
back and forth rapidly between them.
NetWare 3 extender 12018 First showing up in WB 96M
Fixed problem with n3GetMapped truncating the server name parameter after
14 characters (instead of 16).
NetWare 4 extender 14016 First showing up in WB 96M
Fixed problem with n4GetMapped truncating the server name parameter after
14 characters (instead of 16).
WB 97A Jun 12, 1997
New IntControl's:
IntControl(1005, p1, 0, 0, 0)
Gets or starts shutdown script mode.
This IntControl allows you to specify a script that will run when Windows
is shut down or (in Windows 95 and Windows NT) when the user logs off.
P1 Meaning
-- -------
0 Get shutdown state (@TRUE if in shutdown mode, @FALSE if normal script)
1 Enter shutdown mode
If "p1" == 0, the function will return a TRUE/FALSE flag indicating whether
the current WinBatch script is running in shutdown mode. If "p1" == 1,
the current script will stop processing and will enter shutdown mode.
When WinBatch enters shutdown mode, it stops processing the current script,
closes the normal WinBatch window, and stays running in the background
waiting for Windows to shut down (or the user to log off). When this
shutdown event occurs, WinBatch re-loads the script (the same script that
was running when shutdown mode was entered) and runs it again from the
beginning. If the script that was previously running was launched via a
"Call" command, WinBatch will re-load and run the parent (calling) script.
The actual shutdown procedure varies a bit among different versions of
Windows. Here is what happens, step-by-step, when WinBatch is in
shutdown mode, and the user initiates a Windows shutdown (or logoff):
Windows 3.1 / Windows for Workgroups:
Windows queries all running applications, asking whether they agree
to close. WinBatch agrees to close. If all the other apps agree to
close as well, then Windows informs all the apps that the session is
ending. At that time, WinBatch runs the script. When the script is
finished, Windows shuts down.
Windows 95:
Windows queries all running applications, asking whether they agree
to close. WinBatch agrees to close. If all the other apps agree to
close as well, then Windows informs all the apps that the session is
ending. At that time, WinBatch runs the script. When the script is
finished, the Windows session ends. If the script takes more than
about 20 seconds to run, Windows unconditionally terminates the
script and the Windows session ends.
Windows NT:
Windows queries each running application in turn, asking whether it
agrees to close. When it queries WinBatch, WinBatch displays a
message box, asking the user to first close all other open windows.
When the user presses the "OK" button in the message box, WinBatch
agrees to close, then Windows informs WinBatch that the session is
ending, and then WinBatch runs the script. (If, however, the user
presses the "Cancel" button in the message box, WinBatch refuses to
close, and the shutdown process is cancelled.) If the script takes
more than about 20 seconds to run, Windows displays a message box,
giving the user an opportunity to terminate WinBatch, but the script
continues processing until the user responds to the message. When
the script is finished, if there are any other apps still running,
Windows continues querying each app in turn, asking whether it agrees
to close. Ater all the apps agree to close, the Windows session ends.
If any app refuses to close, the shutdown process is cancelled.
Example:
rc = IntControl(1005, 0, 0, 0, 0) ; get shutdown state
If rc == @FALSE ; if we're running as a normal script
IntControl(1005, 1, 0, 0, 0) ; enter shutdown mode
Exit ; this 'Exit' is not really necessary
Endif
; if we got here, we're running in shutdown mode
Display(1, "Windows Shutdown", "WinBatch shutdown processing begins now")
ErrorMode(@OFF)
FileDelete("c:\temp\*.tmp")
ErrorMode(@CANCEL)
IntControl(1006, 0, 0, 0, 0)
Returns the un-parsed WinBatch command line.
This returns the actual command line string that WinBatch was launched with.
IntControl 1004 now returns a full path for compiled WinBatch EXE's.
In 32-bit version, fixed problem with compiler where large (standalone)
compiled EXE's run from a floppy drive were extracting the DLL to the
floppy drive instead of to the Windows directory.
Improved the internal version information in the executables and DLL's.
Increased the amount of memory available for strings from 32000 bytes to
65500 bytes.
DLL 2.4abp First showing up in WB 97A
New functions:
RegExistKey(handle, subkey-string)
Checks whether a registry key exists.
This function returns @TRUE if the specified registry key exists and
is accessible (ie, can be opened with RegOpenKey). Otherwise, it
returns @FALSE.
See RegOpenKey for parameter information.
RegExistValue(handle, subkey-string) (32-bit only)
Checks whether a value for a registry key exists.
This function returns @TRUE if the specified registry value (data
item) exists and is accessible (ie, can be read with RegQuery[..]).
Otherwise, it returns @FALSE.
See RegQueryValue for parameter information.
StrIndexWild(string, pattern, start)
Finds wildcarded text within a larger string.
Parameters:
(s) string: The string to search in.
(s) pattern: The wildcarded text to search for.
(i) start: The position (in characters) within the string to begin searching.
Returns:
(i) The position (in characters) within the string where the text
matching the wildcard pattern was found, or 0 if not found.
In the wildcard pattern, "*" matches zero or more characters, and
"?" matches any one character.
Examples:
StrIndexWild("abcd1234wxyz", "ab*wx", 1) ; would return 1
StrIndexWild("abcd1234wxyz", "1*9", 1) ; would return 0 (no match)
StrIndexWild("abcd1234wxyz", "1*4", 1) ; would return 5
StrIndexWild("abcd1234wxyz", "1?34*z", 1) ; would return 5
StrLenWild(string, pattern, start)
Returns the length of wildcarded text within a larger string.
Parameters:
(s) string: The string to look in.
(s) pattern: The wildcarded text to match.
(i) start: The position (in characters) within the string to begin matching.
Returns:
(i) The length (in characters) of the portion of the string that matches
the wildcard pattern, or 0 if no match at the specified position.
In the wildcard pattern, "*" matches zero or more characters, and
"?" matches any one character.
Examples:
StrLenWild("abcd1234wxyz", "ab*wx", 1) ; would return 10
StrLenWild("abcd1234wxyz", "1*9", 1) ; would return 0
StrLenWild("abcd1234wxyz", "1*4", 5) ; would return 4
StrLenWild("abcd1234wxyz", "1?34*z", 5) ; would return 8
StrSubWild(string, pattern, start)
Extracts a substring matching wildcarded text from within a larger string.
Parameters:
(s) string: The string to look in.
(s) pattern: The wildcarded text to match.
(i) start: The position (in characters) within the string to begin matching.
Returns:
(s) The portion of the string matched by the wildcard pattern.
In the wildcard pattern, "*" matches zero or more characters, and
"?" matches any one character.
Examples:
StrSubWild("abcd1234wxyz", "ab*wx", 1) ; would return "abcd1234wx"
StrSubWild("abcd1234wxyz", "1*9", 1) ; would return ""
StrSubWild("abcd1234wxyz", "1*4", 5) ; would return "1234"
StrSubWild("abcd1234wxyz", "1?34*z", 5) ; would return "1234wxyz"
ClipGetEx(format)
Returns the contents of the Windows clipboard in a specified format.
This function is similar to ClipGet, but it allows to you specify
the format in which the text is returned. Valid formats are:
Format Meaning
------ -------
1 (CF_TEXT) Standard ANSI text (same as ClipGet).
7 (CF_OEMTEXT) Text containing characters in the OEM character set.
13 (CF_UNICODETEXT) Unicode text format (32-bit version under Windows NT only)
WinItemizeEx(s:partial-winname, i:multiple, i:hidden)
Returns the full name of window(s) matching a partial window name.
'partial-winname' specifies a partial window name to look for. It
can be a blank string (""), in which case it will match any window.
Note: this function does not accept a Window ID as the
'partial-winname' parameter.
If 'multiple' is @TRUE, then this function returns a tab-delimited
list of all open windows that match 'partial-winname'. If 'multiple'
is @FALSE, then it returns the name of the first open window found
that matches 'partial-winname'. If no appropriate matching windows
are found, it returns a blank string ("").
If 'hidden' is @TRUE, then hidden windows are included in the list
of returned windows. If 'hidden' is @FALSE, then hidden windows are
not included. If 'hidden' is @FALSE and 'multiple' is @FALSE, then
this function returns the name of the first visible (non-hidden)
open window found that matches 'partial-winname'.
Fixed problem with SendKey[..] in unusual cases displaying the error:
"WinIsDos: Window not found or bad window".
In 32-bit version, SendMenusTo now attempts to wait until the specified
application window is ready to accept input (like SendKey[..] does). This
can be disabled with IntControl(43).
Changed DateTime/TimeDate and FileTimeGet to return a Day/Night code (eg,
AM or PM) of from 0 to 4 characters (depending on what is set in the user's
current International/Regional settings), instead of a fixed 2-character
string, in order to support double-byte character sets. Therefore, the
length of the string returned by DateTime/TimeDate will now vary from 22
to 26 characters long, and the length of the string returned by FileTimeGet
will now vary from 15 to 19 characters long, instead of being a fixed length.
In the ItemExtract function, you can now specify -1 for "index" to return
the last item in the list.
In the Environment() function, the maximum value length has been increased
from 256 bytes to 1280 bytes. It will return a blank string ("") for
environment variables whose values are longer than 1280 bytes.
FileSize no longer returns 0 if one of the specified files does not exist.
FileDelete and DirRemove no longer return an error if one of the specified
files or directories does not exist.
In 32-bit version under international (non-US) versions of Windows NT, fixed
problem with licensee names containing certain extended characters (eg, Kanji).
In 32-bit version, the Run[..] commands now display a more informative
error message on failure.
In 32-bit version under Windows 95 and Windows NT 4.0, dialog boxes
created with the Dialog command now use the default GUI font instead of
the system font.
In 32-bit version, fixed problem with functions that test for file
existence when the full path and filename was longer than 128 characters.
Fixed problem with BinaryIndex (and BinaryIndexNc) returning the offset
past the end of the buffer (instead of 0) if the search string was blank
and no non-NULL characters were found.
Fixed problem with BinarySort causing random crashes if the key type was
set to @WORD1 or @WORD2.
Added a parameter to IntControl(50). P2 can now specify the URL of the
web page to be launched when the user clicks on the "Go to Tech Support
Web Page" button. If p2 is "" or 0, no change is made to URL that is
currently set. The default is:
IntControl(50, 1, "http://techsupt.windowware.com/", 0, 0)
Fixed a problem with OLE calls crashing if the called function returned a
NULL pointer; they now return a blank string in this case.
In 32-bit version, added a tiny delay to WinPlaceGet and WinPlaceSet,
to give newly-repositioned windows a chance to "settle down" before
retrieving their coordinates, making the returned values more reliable.
Fixed problem with IsNumber and IsFloat returning TRUE for some high ASCII
characters.
Windows 95 extender 11001 First showing up in WB 97A
New function:
w95FileClose(s:server-name, s:file-pathname)
Close all network connections to a file.
"server-name" is the name of a remote server on which the function
will execute, or a blank string ("") to indicate the local computer.
"file-pathname" is a fully-qualified file name (eg, "C:\DOC\MYFILE.TXT").
NOTE: The file name MUST be fully-qualified.
Returns @TRUE on success, or @FALSE if the specified file was not open.
Example:
w95FileClose("", "C:\DOC\MYFILE.TXT")
w95ServiceAt(s:server, s:domain, i:server-type, s:service-name, i:flags)
Lists all servers in a domain which contain a specified service.
"server" is the UNC name of the server on which the function will
execute (eg, "\\MYSERVER"), or "" for the local computer.
"domain" is the name of the domain which will be used (eg, "SALES"),
or "" for the primary domain.
"server-type" identifies the type of servers which will be examined.
You can specify -1 for all servers. Or, you can specify one or more
of the following flags, combined using the binary OR ("|") operator;
servers meeting
1 All LAN Manager workstation
2 All LAN Manager server
4 Any server running with Microsoft SQL Server
8 Primary domain controller
16 Backup domain controller
32 Server running the timesource service
64 Apple File Protocol servers
128 Novell servers
256 LAN Manager 2.x Domain Member
512 Server sharing print queue
1024 Server running dialin service
2048 Xenix server
4096 Windows NT (either workstation or server)
8192 Server running Windows for Workgroups
16384 Microsoft File and Print for Netware
32768 Windows NT Non-DC server
65536 Server that can run the browser service
131072 Server running a browser service as backup
262144 Server running the master browser service
524288 Server running the domain master browser
4194304 Windows 95 or newer
-2147483648 Domain announcement
"service-name" is the name of the service to be looked for.
"flags" specifies information on the service being looked for. It
consists of one entry from each of the following three groups, added
together:
service type:
1 services
2 drivers
3 both (services and drivers)
service state:
100 active services
200 inactive services
300 both (active and inactive)
name type (indicates what the "service-name" parameter represents):
0 display name (the name shown in Control Panel)
1000 service name (the actual registry key name)
Returns a tab-delimited list of server UNC names (eg, "\\MYSERVER").
Note: An NT workstation can be considered to be a "server".
Note: This function can take a while to run, depending on how many
servers are in the domain. Also, it will only return the names of
servers which it is able to access, which requires that the user
have browse access to their service control managers.
Note: In order to use this function, you must have an NT domain
server, and you must have RADMIN32.DLL and RLOCAL32.DLL present.
These DLL's can be found in the Microsoft Windows 95 Service Pack 1.
w95ShareInfo(s:server-name, s:share-name, i:request)
Returns information about a shared resource.
"request" specifies the information to be returned, and can be one
of the following:
0 (s) share name
1 (s) resource
2 (s) comment
4 (s) full password
5 (s) read password
6 (i) share type
7 (i) flags
See w95ShareAdd and w95ShareSet for information on these
parameters and values.
Returns a string or integer, depending on "request".
w95UserInfo(i:request)
Returns information about the currently logged-on user.
"request" specifies the information to be returned, and can be one
of the following:
Value Name Meaning
----- ---- -------
0 user name name of the user currently logged on to the workstation
1 logon domain domain name of the user account of the user currently logged on to the workstation
2 other domains space-delimited list of other LAN Manager domains browsed by the workstation
3 logon server name of the computer that authenticated the server
Returns a string.
Note: In order to use this function, you must have RADMIN32.DLL and
RLOCAL32.DLL present. These DLL's can be found in the Microsoft
Windows 95 Service Pack 1.
Windows NT extender 11003 First showing up in WB 97A
New functions:
wntFileClose(s:server-name, s:file-pathname)
Close all network connections to a file.
"server-name" is the name of a remote server on which the function
will execute, or a blank string ("") to indicate the local computer.
"file-pathname" is a fully-qualified file name (eg, "C:\DOC\MYFILE.TXT").
NOTE: The file name MUST be fully-qualified.
Returns @TRUE on success, or @FALSE if the specified file was not open.
Example:
wntFileClose("", "C:\DOC\MYFILE.TXT")
wntAccessList(s:server-name, s:resource/share-name, i:object-type, i:flags)
Returns list of users who have access (permission) records for a resource.
Returns a tab-delimited list of users and groups who have access
records for "resource/share-name"; ie, users and groups for whom
permissions have explicitly been set. Returns a blank string ("")
if there are no appropriate records.
"flag" specifies the format of the returned names, and can be one
of the following:
0 account (eg, "johndoe")
1 domain\account (eg, "OFFICE\johndoe")
Note: For built-in accounts which are predefined by the system
(eg, "Administrators"), only the account name is returned,
regardless of the "flag" setting.
See "wntAccessAdd" for additional parameter information.
Example:
users = wntAccessList("", "Public", 100, 0)
wntShareInfo(s:server-name, s:resource/share-name, i:share-type, i:request)
Returns information about a shared resource.
"request" specifies the information to be returned, and can be one
of the following:
0 (s) share name
1 (s) resource
2 (s) comment
3 (s) location
6 (i) share type
8 (i) max users
9 (i) current users
See wntShareAdd and wntShareSet for information on these
parameters and values.
Returns a string or integer, depending on "request".
wntGroupInfo(s:server-name, s:group, s:group-type, i:request)
Returns information about a group.
"server" is the UNC name of the server on which the function will
execute (eg, "\\MYSERVER"), or "" for the local computer.
"group-type" can be @LOCALGROUP or @GLOBALGROUP.
"request" specifies the information to be returned, and can be one
of the following:
0 group name
1 group comment
Returns a string.
wntUserInfo(i:request)
Returns information about the currently logged-on user.
"request" specifies the information to be returned, and can be one
of the following:
Value Name Meaning
----- ---- -------
0 user name name of the user currently logged on to the workstation
1 logon domain domain name of the user account of the user currently logged on to the workstation
2 other domains space-delimited list of other LAN Manager domains browsed by the workstation
3 logon server name of the computer that authenticated the server
Returns a string.
wntSvcStart(s:server, s:service-name, i:flags, s:params, s:delimiter)
Starts a service.
"server" is the UNC name of the server on which the function will
execute (eg, "\\MYSERVER"), or "" for the local computer.
"service-name" is the name of a service.
"flags" specifies the type of name that "service-name" represents:
0 display name (the name shown in Control Panel)
1000 service name (the actual registry key name)
"params" specifies a delimited list of parameters to be passed to
the service, or a blank string ("") for no parameters. You can
select any character you wish to be the delimiter, and must set the
"delimiter" parameter accordingly.
Note: driver services do not receive parameters.
"delimiter" specifies a single character, indicating the delimiter
used for "params". For example, if "params" specifies a
space-delimited list, then "delimiter" should be set to " ". If
"params" is a blank string, then "delimiters" is ignored and can be
set to a blank string.
Returns 1.
wntSvcControl(s:server, s:service-name, i:flags, i:control-code)
Stops or controls a service.
"control-code" specifies the operation to be performed. It can be
one of the following standard control codes:
Value Name Meaning
----- ---- -------
1 SERVICE_CONTROL_STOP Requests the service to stop.
2 SERVICE_CONTROL_PAUSE Requests the service to pause.
3 SERVICE_CONTROL_CONTINUE Requests the paused service to resume.
4 SERVICE_CONTROL_INTERROGATE Requests the service to update immediately its current
status information to the service control manager.
Or it can be a user-defined control code in the range of 128 to 255,
inclusive.
See "wntSvcStart" for additional parameter information.
Returns 1.
wntSvcStatus(s:server, s:service-name, i:flags, i:request)
Returns status information for a service.
"request" specifies the information to be returned, and can be one
of the following:
1 ServiceType
2 CurrentState
3 ControlsAccepted
4 Win32ExitCode
5 ServiceSpecificExitCode
6 CheckPoint
7 WaitHint
Further information on these values follows:
ServiceType:
The value returned includes one of the following service type flags to indicate the type
of service. In addition, for a SERVICE_WIN32 service, the SERVICE_INTERACTIVE_PROCESS
flag might be set, indicating that the service process can interact with the desktop.
Value Name Meaning
----- ---- -------
1 SERVICE_KERNEL_DRIVER A service type flag that indicates a Windows NT
device driver.
2 SERVICE_FILE_SYSTEM_DRIVER A service type flag that indicates a Windows NT file
system driver.
16 SERVICE_WIN32_OWN_PROCESS A service type flag that indicates a Win32 service
that runs in its own process.
32 SERVICE_WIN32_SHARE_PROCESS A service type flag that indicates a Win32 service
that shares a process with other services.
256 SERVICE_INTERACTIVE_PROCESS A flag that indicates a Win32 service process that
can interact with the desktop.
CurrentState:
Indicates the current state of the service. One of the following values is specified:
Value Name Meaning
----- ---- -------
1 SERVICE_STOPPED The service is not running.
2 SERVICE_START_PENDING The service is starting.
3 SERVICE_STOP_PENDING The service is stopping.
4 SERVICE_RUNNING The service is running.
5 SERVICE_CONTINUE_PENDING The service continue is pending.
6 SERVICE_PAUSE_PENDING The service pause is pending.
7 SERVICE_PAUSED The service is paused.
ControlsAccepted:
Specifies the control codes that the service will accept and process. A user interface
process can control a service by specifying a control command in the ControlService
function. By default, all services accept the SERVICE_CONTROL_INTERROGATE value. Any
or all of the following flags can be specified to enable the other control codes.
Value Name Meaning
----- ---- -------
1 SERVICE_ACCEPT_STOP The service can be stopped. This enables the
SERVICE_CONTROL_STOP value.
2 SERVICE_ACCEPT_PAUSE_CONTINUE The service can be paused and continued. This
enables the SERVICE_CONTROL_PAUSE and
SERVICE_CONTROL_CONTINUE values.
4 SERVICE_ACCEPT_SHUTDOWN The service is notified when system shutdown
occurs. This enables the system to send a
SERVICE_CONTROL_SHUTDOWN value to the service.
The ControlService function cannot send this
control code.
Win32ExitCode
Specifies a Win32 error code that the service uses to report an error that occurs when
it is starting or stopping. To return an error code specific to the service, the
service must set this value to ERROR_SERVICE_SPECIFIC_ERROR to indicate that the
dwServiceSpecificExitCode member contains the error code. The service should set this
value to NO_ERROR when it is running and on normal termination.
ServiceSpecificExitCode
Specifies a service specific error code that the service returns when an error occurs
while the service is starting or stopping. This value is ignored unless the
dwWin32ExitCode member is set to ERROR_SERVICE_SPECIFIC_ERROR.
CheckPoint
Specifies a value that the service increments periodically to report its progress during
a lengthy start, stop, or continue operation. For example, the service should increment
this value as it completes each step of its initialization when it is starting up. The
user interface program that invoked the operation on the service uses this value to
track the progress of the service during a lengthy operation. This value is not valid
and should be zero when the service does not have a start, stop, or continue operation
pending.
WaitHint
Specifies an estimate of the amount of time, in milliseconds, that the service expects a
pending start, stop, or continue operation to take before the service makes its next
call to the SetServiceStatus function with either an incremented dwCheckPoint value or a
change in dwCurrentState. If the amount of time specified by dwWaitHint passes, and
dwCheckPoint has not been incremented, or dwCurrentState has not changed, the service
control manager or service control program can assume that an error has occurred.
See "wntSvcStart" for additional parameter information.
Returns an integer.
Changed wntResources2 to ignore 'net-resource' and 'provider' unless
'scope' is 2. This avoids an "invalid parameter" error from Windows.
NetWare 3 extender 12019 First showing up in WB 97A
n3CapturePrt was truncating the queue name at 47 characters; it now accepts
queue names up to 65 characters long (the maximum length in Netware).
NetWare 4 extender 14017 First showing up in WB 97A
New functions:
n4LogoutTree(s:context, s:tree)
Logs out of Directory Services.
"context" is a Directory Services context, or "" for the default context.
"tree" is a Directory Services tree, or "" for the default tree.
Note: the "tree" parameter is supported in the 32-bit version only.
This function terminates a client's connection to the network. Unlike
the n4Logout function, it does not detach from any servers.
Returns @TRUE on success, or @FALSE if the user was not authenticated
through Directory Services.
n4UserGroupEx(s:server-name, s:user-name, s:context)
Returns a list of groups to which the specified user belongs, in the specified context.
"context" is a Directory Services context, or "" for the default context.
This function is the same as n4UserGroups, but lets you specify a
context for the operation.
See "n4UserGroups" for additional parameter information.
n4GetContext(i:request)
Returns the current user's default context or tree.
"request" specifies the information to be returned, and can be one
of the following:
Request Meaning
------- -------
0 Context
1 Tree (32-bit version only)
Fixed problem with n4MemberGet returning values other than @TRUE or @FALSE.
n4ObjectProps now returns a blank string ("") instead of an error if the
specified "attribute" is not a valid attribute of "object".
n4CapturePrt was truncating the queue name at 47 characters; it now accepts
queue names up to 65 characters long (the maximum length in Netware).
WILX extender 11106 First showing up in WB 97A
New function:
xEjectMedia(s:drive) (32-bit version only)
Ejects removable media from a device.
"drive" is the drive letter of the device (eg, "G", or "G:")
This can be used to eject media such as a CD-ROM, tape, or cartridge.
Returns TRUE on success, FALSE on failure
Fixed problem with xDriveReady always returning @TRUE in Windows NT.
WB 97B Jun 23, 1997
DLL 2.4bbp First showing up in WB 97B
In the Run... commands in the 32-bit version, fixed a problem with not
looking up the application path in the registry if the "program-name"
parameter contained any path information.
WB 97C Jun 26, 1997
DLL 2.4cbp First showing up in WB 97C
New function:
ShortcutDir(s:name) (32-bit only)
Returns the name of the directory where shortcuts of type "name" are
stored. This information is retrieved from the registry, under the key:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
Standard values for "name" include:
Desktop
Programs
Fonts
Recent
SendTo
Personal
Startup
Start Menu
NetHood
Favorites
Templates
Returns a directory name on success, or a blank string ("") if no
corresponding value was found.
New IntControl:
IntControl(52, p1, 0, 0, 0) (32-bit only)
Set dialog font.
P1 Meaning
-- -------
-1 Don't change (just return current setting)
0 Use standard system font.
1 Use GUI font (default).
This IntControl lets you specify whether the standard system font or
GUI font is used by dialog boxes created with the Dialog command. By
default, the GUI font is used.
Note: The GUI font is available only in Windows 95 and Windows NT 4.0.
Returns previous setting.
Fixed problem with OLE calls crashing if they returned a NULL sub-object.
They now return 0. Eg:
App = ObjectOpen("Excel.Application")
Sheet = App.ActiveSheet ; ** returns 0, because there is no worksheet
Fixed problem with dialog boxes created with the Dialog function, where
if you typed a file mask into a editbox associated with a filelistbox,
there would be garbage characters at the end of the file mask.
Fixed problem with BinaryIndex and BinaryIndex searching for characters
with ASCII values >= 128.
IntControl(5) now works in the 32-bit version. Before, it had no effect,
and hidden and system files were always included. The default is now to
exclude hidden and system files, as documented.
Windows 95 extender 11002 First showing up in WB 97C
New function:
w95IsNTServer(s:server-name)
Determines whether a computer is an NT server (or workstation).
"server-name" is the UNC name of a computer (eg, "\\SERVER1"), or a
blank string ("") to indicate the local machine.
Note: An NT workstation is considered to be a "server".
Returns @TRUE if the specified machine is an NT server (or
workstation); @FALSE if it is not.
Fixed problem with w95UserInfo crashing if RADMIN32.DLL was not available.
WB 97D Aug 21, 1997
In 32-bit version, fixed (hopefully) intermittent problem with FileMenu
crashing, notably when the files in the Explorer directory window changed.
In 16-bit version, fixed problem with the WinBatch box window stealing the
input focus from an application window on top of WinBatch.
Fixed probblem with the compiler not finding the OLE DLL if the DLL was
located in the compiler directory but was not on the path.
DLL 2.4dbp First showing up in WB 97D
Fixed problem with the FileCopy and FileMove commands, if the overwrite
warning option was specified and the file already existed. In the
"Confirm File Replace" dialog that was displayed, the "Use Newer All" and
"Use Older All" buttons did not work properly.
Dialog Editor 97D First showing up in WB 97D
In 32-bit version under Windows 95 and Windows NT 4.0, can now select GUI
or system font (via "Edit" menu items). Defaults to GUI font, like the
WIL Dialog() command does.
Windows NT extender 11004 First showing up in WB 97D
Increased the maximum length of the server, resource, and username
parameters in the wntAccess[..] and wntOwner[..] functions.
NetWare 3 extender 12020 First showing up in WB 97D
In the n3MsgSend and n3MsgSendAll functions, increased the maximum length
of the message string from 57 characters to 254 characters, when using
NetWare client version 3.11 or later.
NetWare 4 extender 14018 First showing up in WB 97D
In the n3MsgSend and n3MsgSendAll functions, increased the maximum length
of the message string from 57 characters to 254 characters.
Article ID: W12711
Filename: WB Fixes and Improvements Through 97D.txt