home *** CD-ROM | disk | FTP | other *** search
/ PC World 2004 November / PCWorld_2004-11_cd.bin / software / topware / activeperl / ActivePerl-5.8.4.810-MSWin32-x86.exe / ActivePerl-5.8.4.810 / Perl / lib / Win32.pm < prev    next >
Text File  |  2004-06-01  |  24KB  |  690 lines

  1. package Win32;
  2.  
  3. BEGIN {
  4.     use strict;
  5.     use vars qw|$VERSION @ISA @EXPORT @EXPORT_OK|;
  6.  
  7.     require Exporter;
  8.     require DynaLoader;
  9.  
  10.     @ISA = qw|Exporter DynaLoader|;
  11.     $VERSION = '0.23';
  12.  
  13.     @EXPORT = qw(
  14.     NULL
  15.     WIN31_CLASS
  16.     OWNER_SECURITY_INFORMATION
  17.     GROUP_SECURITY_INFORMATION
  18.     DACL_SECURITY_INFORMATION
  19.     SACL_SECURITY_INFORMATION
  20.     MB_ICONHAND
  21.     MB_ICONQUESTION
  22.     MB_ICONEXCLAMATION
  23.     MB_ICONASTERISK
  24.     MB_ICONWARNING
  25.     MB_ICONERROR
  26.     MB_ICONINFORMATION
  27.     MB_ICONSTOP
  28.     );
  29.     @EXPORT_OK = qw(
  30.         GetOSName
  31.         SW_HIDE
  32.         SW_SHOWNORMAL
  33.         SW_SHOWMINIMIZED
  34.         SW_SHOWMAXIMIZED
  35.         SW_SHOWNOACTIVATE
  36.  
  37.         CSIDL_DESKTOP
  38.         CSIDL_PROGRAMS
  39.         CSIDL_PERSONAL
  40.         CSIDL_FAVORITES
  41.         CSIDL_STARTUP
  42.         CSIDL_RECENT
  43.         CSIDL_SENDTO
  44.         CSIDL_STARTMENU
  45.         CSIDL_MYMUSIC
  46.         CSIDL_MYVIDEO
  47.         CSIDL_DESKTOPDIRECTORY
  48.         CSIDL_NETHOOD
  49.         CSIDL_FONTS
  50.         CSIDL_TEMPLATES
  51.         CSIDL_COMMON_STARTMENU
  52.         CSIDL_COMMON_PROGRAMS
  53.         CSIDL_COMMON_STARTUP
  54.         CSIDL_COMMON_DESKTOPDIRECTORY
  55.         CSIDL_APPDATA
  56.         CSIDL_PRINTHOOD
  57.         CSIDL_LOCAL_APPDATA
  58.         CSIDL_COMMON_FAVORITES
  59.         CSIDL_INTERNET_CACHE
  60.         CSIDL_COOKIES
  61.         CSIDL_HISTORY
  62.         CSIDL_COMMON_APPDATA
  63.         CSIDL_WINDOWS
  64.         CSIDL_SYSTEM
  65.         CSIDL_PROGRAM_FILES
  66.         CSIDL_MYPICTURES
  67.         CSIDL_PROFILE
  68.         CSIDL_PROGRAM_FILES_COMMON
  69.         CSIDL_COMMON_TEMPLATES
  70.         CSIDL_COMMON_DOCUMENTS
  71.         CSIDL_COMMON_ADMINTOOLS
  72.         CSIDL_ADMINTOOLS
  73.         CSIDL_COMMON_MUSIC
  74.         CSIDL_COMMON_PICTURES
  75.         CSIDL_COMMON_VIDEO
  76.         CSIDL_RESOURCES
  77.         CSIDL_RESOURCES_LOCALIZED
  78.         CSIDL_CDBURN_AREA
  79.     );
  80. }
  81.  
  82. # Routines available in core:
  83. # Win32::GetLastError
  84. # Win32::LoginName
  85. # Win32::NodeName
  86. # Win32::DomainName
  87. # Win32::FsType
  88. # Win32::GetCwd
  89. # Win32::GetOSVersion
  90. # Win32::FormatMessage ERRORCODE
  91. # Win32::Spawn COMMAND, ARGS, PID
  92. # Win32::GetTickCount
  93. # Win32::IsWinNT
  94. # Win32::IsWin95
  95.  
  96. # We won't bother with the constant stuff, too much of a hassle.  Just hard
  97. # code it here.
  98.  
  99. sub NULL                 { 0 }
  100. sub WIN31_CLASS             { &NULL }
  101.  
  102. sub OWNER_SECURITY_INFORMATION        { 0x00000001 }
  103. sub GROUP_SECURITY_INFORMATION        { 0x00000002 }
  104. sub DACL_SECURITY_INFORMATION        { 0x00000004 }
  105. sub SACL_SECURITY_INFORMATION        { 0x00000008 }
  106.  
  107. sub MB_ICONHAND                { 0x00000010 }
  108. sub MB_ICONQUESTION            { 0x00000020 }
  109. sub MB_ICONEXCLAMATION            { 0x00000030 }
  110. sub MB_ICONASTERISK            { 0x00000040 }
  111. sub MB_ICONWARNING            { 0x00000030 }
  112. sub MB_ICONERROR            { 0x00000010 }
  113. sub MB_ICONINFORMATION            { 0x00000040 }
  114. sub MB_ICONSTOP                { 0x00000010 }
  115.  
  116. #
  117. # Newly added constants.  These have an empty prototype, unlike the
  118. # the ones above, which aren't prototyped for compatibility reasons.
  119. #
  120. sub SW_HIDE           ()        { 0 }
  121. sub SW_SHOWNORMAL     ()        { 1 }
  122. sub SW_SHOWMINIMIZED  ()        { 2 }
  123. sub SW_SHOWMAXIMIZED  ()        { 3 }
  124. sub SW_SHOWNOACTIVATE ()        { 4 }
  125.  
  126. sub CSIDL_DESKTOP              ()       { 0x0000 }     # <desktop>
  127. sub CSIDL_PROGRAMS             ()       { 0x0002 }     # Start Menu\Programs
  128. sub CSIDL_PERSONAL             ()       { 0x0005 }     # "My Documents" folder
  129. sub CSIDL_FAVORITES            ()       { 0x0006 }     # <user name>\Favorites
  130. sub CSIDL_STARTUP              ()       { 0x0007 }     # Start Menu\Programs\Startup
  131. sub CSIDL_RECENT               ()       { 0x0008 }     # <user name>\Recent
  132. sub CSIDL_SENDTO               ()       { 0x0009 }     # <user name>\SendTo
  133. sub CSIDL_STARTMENU            ()       { 0x000B }     # <user name>\Start Menu
  134. sub CSIDL_MYMUSIC              ()       { 0x000D }     # "My Music" folder
  135. sub CSIDL_MYVIDEO              ()       { 0x000E }     # "My Videos" folder
  136. sub CSIDL_DESKTOPDIRECTORY     ()       { 0x0010 }     # <user name>\Desktop
  137. sub CSIDL_NETHOOD              ()       { 0x0013 }     # <user name>\nethood
  138. sub CSIDL_FONTS                ()       { 0x0014 }     # windows\fonts
  139. sub CSIDL_TEMPLATES            ()       { 0x0015 }
  140. sub CSIDL_COMMON_STARTMENU     ()       { 0x0016 }     # All Users\Start Menu
  141. sub CSIDL_COMMON_PROGRAMS      ()       { 0x0017 }     # All Users\Start Menu\Programs
  142. sub CSIDL_COMMON_STARTUP       ()       { 0x0018 }     # All Users\Startup
  143. sub CSIDL_COMMON_DESKTOPDIRECTORY ()    { 0x0019 }     # All Users\Desktop
  144. sub CSIDL_APPDATA              ()       { 0x001A }     # Application Data, new for NT4
  145. sub CSIDL_PRINTHOOD            ()       { 0x001B }     # <user name>\PrintHood
  146. sub CSIDL_LOCAL_APPDATA        ()       { 0x001C }     # non roaming, user\Local Settings\Application Data
  147. sub CSIDL_COMMON_FAVORITES     ()       { 0x001F }
  148. sub CSIDL_INTERNET_CACHE       ()       { 0x0020 }
  149. sub CSIDL_COOKIES              ()       { 0x0021 }
  150. sub CSIDL_HISTORY              ()       { 0x0022 }
  151. sub CSIDL_COMMON_APPDATA       ()       { 0x0023 }     # All Users\Application Data
  152. sub CSIDL_WINDOWS              ()       { 0x0024 }     # GetWindowsDirectory()
  153. sub CSIDL_SYSTEM               ()       { 0x0025 }     # GetSystemDirectory()
  154. sub CSIDL_PROGRAM_FILES        ()       { 0x0026 }     # C:\Program Files
  155. sub CSIDL_MYPICTURES           ()       { 0x0027 }     # "My Pictures", new for Win2K
  156. sub CSIDL_PROFILE              ()       { 0x0028 }     # USERPROFILE
  157. sub CSIDL_PROGRAM_FILES_COMMON ()       { 0x002B }     # C:\Program Files\Common
  158. sub CSIDL_COMMON_TEMPLATES     ()       { 0x002D }     # All Users\Templates
  159. sub CSIDL_COMMON_DOCUMENTS     ()       { 0x002E }     # All Users\Documents
  160. sub CSIDL_COMMON_ADMINTOOLS    ()       { 0x002F }     # All Users\Start Menu\Programs\Administrative Tools
  161. sub CSIDL_ADMINTOOLS           ()       { 0x0030 }     # <user name>\Start Menu\Programs\Administrative Tools
  162. sub CSIDL_COMMON_MUSIC         ()       { 0x0035 }     # All Users\My Music
  163. sub CSIDL_COMMON_PICTURES      ()       { 0x0036 }     # All Users\My Pictures
  164. sub CSIDL_COMMON_VIDEO         ()       { 0x0037 }     # All Users\My Video
  165. sub CSIDL_RESOURCES            ()       { 0x0038 }     # %windir%\Resources\, For theme and other windows resources.
  166. sub CSIDL_RESOURCES_LOCALIZED  ()       { 0x0039 }     # %windir%\Resources\<LangID>, for theme and other windows specific resources.
  167. sub CSIDL_CDBURN_AREA          ()       { 0x003B }     # <user name>\Local Settings\Application Data\Microsoft\CD Burning
  168.  
  169. ### This method is just a simple interface into GetOSVersion().  More
  170. ### specific or demanding situations should use that instead.
  171.  
  172. my ($found_os, $found_desc);
  173.  
  174. sub GetOSName {
  175.     my ($os,$desc,$major, $minor, $build, $id)=("","");
  176.     unless (defined $found_os) {
  177.         # If we have a run this already, we have the results cached
  178.         # If so, return them
  179.  
  180.         # Use the standard API call to determine the version
  181.         ($desc, $major, $minor, $build, $id) = Win32::GetOSVersion();
  182.  
  183.         # If id==0 then its a win32s box -- Meaning Win3.11
  184.         unless($id) {
  185.             $os = 'Win32s';
  186.         }
  187.     else {
  188.         # Magic numbers from MSDN documentation of OSVERSIONINFO
  189.         # Most version names can be parsed from just the id and minor
  190.         # version
  191.         $os = {
  192.         1 => {
  193.             0  => "95",
  194.             10 => "98",
  195.             90 => "Me"
  196.         },
  197.         2 => {
  198.             0  => "2000",
  199.             1  => "XP/.Net",
  200.                     2  => "2003",
  201.             51 => "NT3.51"
  202.         }
  203.         }->{$id}->{$minor};
  204.     }
  205.  
  206.         # This _really_ shouldnt happen.  At least not for quite a while
  207.         # Politely warn and return undef
  208.         unless (defined $os) {
  209.             warn qq[Windows version [$id:$major:$minor] unknown!];
  210.             return undef;
  211.         }
  212.  
  213.         my $tag = "";
  214.  
  215.         # But distinguising W2k from NT4 requires looking at the major version
  216.         if ($os eq "2000" && $major != 5) {
  217.             $os = "NT4";
  218.         }
  219.  
  220.         # For the rest we take a look at the build numbers and try to deduce
  221.     # the exact release name, but we put that in the $desc
  222.         elsif ($os eq "95") {
  223.             if ($build eq '67109814') {
  224.                     $tag = '(a)';
  225.             }
  226.         elsif ($build eq '67306684') {
  227.                     $tag = '(b1)';
  228.             }
  229.         elsif ($build eq '67109975') {
  230.                     $tag = '(b2)';
  231.             }
  232.         }
  233.     elsif ($os eq "98" && $build eq '67766446') {
  234.             $tag = '(2nd ed)';
  235.         }
  236.  
  237.     if (length $tag) {
  238.         if (length $desc) {
  239.             $desc = "$tag $desc";
  240.         }
  241.         else {
  242.             $desc = $tag;
  243.         }
  244.     }
  245.  
  246.         # cache the results, so we dont have to do this again
  247.         $found_os      = "Win$os";
  248.         $found_desc    = $desc;
  249.     }
  250.  
  251.     return wantarray ? ($found_os, $found_desc) : $found_os;
  252. }
  253.  
  254. bootstrap Win32;
  255.  
  256. 1;
  257.  
  258. __END__
  259.  
  260. =head1 NAME
  261.  
  262. Win32 - Interfaces to some Win32 API Functions
  263.  
  264. =head1 DESCRIPTION
  265.  
  266. Perl on Win32 contains several functions to access Win32 APIs.  Some
  267. are included in Perl itself (on Win32) and some are only available
  268. after explicitly requesting the Win32 module with:
  269.  
  270.     use Win32;
  271.  
  272. The builtin functions are marked as [CORE] and the other ones
  273. as [EXT] in the following alphabetical listing.
  274.  
  275. =head2 Alphabetical Listing of Win32 Functions
  276.  
  277. =over
  278.  
  279. =item Win32::AbortSystemShutdown(MACHINE)
  280.  
  281. [EXT] Aborts a system shutdown (started by the
  282. InitiateSystemShutdown function) on the specified MACHINE.
  283.  
  284. =item Win32::BuildNumber()
  285.  
  286. [CORE] Returns the ActivePerl build number.  This function is
  287. only available in the ActivePerl binary distribution.
  288.  
  289. =item Win32::CopyFile(FROM, TO, OVERWRITE)
  290.  
  291. [CORE] The Win32::CopyFile() function copies an existing file to a new
  292. file.  All file information like creation time and file attributes will
  293. be copied to the new file.  However it will B<not> copy the security
  294. information.  If the destination file already exists it will only be
  295. overwritten when the OVERWRITE parameter is true.  But even this will
  296. not overwrite a read-only file; you have to unlink() it first
  297. yourself.
  298.  
  299. =item Win32::DomainName()
  300.  
  301. [CORE] Returns the name of the Microsoft Network domain that the
  302. owner of the current perl process is logged into.  This function does
  303. B<not> work on Windows 9x.
  304.  
  305. =item Win32::ExpandEnvironmentStrings(STRING)
  306.  
  307. [EXT] Takes STRING and replaces all referenced environment variable
  308. names with their defined values.  References to environment variables
  309. take the form C<%VariableName%>.  Case is ignored when looking up the
  310. VariableName in the environment.  If the variable is not found then the
  311. original C<%VariableName%> text is retained.  Has the same effect
  312. as the following:
  313.  
  314.     $string =~ s/%([^%]*)%/$ENV{$1} || "%$1%"/eg
  315.  
  316. =item Win32::FormatMessage(ERRORCODE)
  317.  
  318. [CORE] Converts the supplied Win32 error number (e.g. returned by
  319. Win32::GetLastError()) to a descriptive string.  Analogous to the
  320. perror() standard-C library function.  Note that C<$^E> used
  321. in a string context has much the same effect.
  322.  
  323.     C:\> perl -e "$^E = 26; print $^E;"
  324.     The specified disk or diskette cannot be accessed
  325.  
  326. =item Win32::FsType()
  327.  
  328. [CORE] Returns the name of the filesystem of the currently active
  329. drive (like 'FAT' or 'NTFS').  In list context it returns three values:
  330. (FSTYPE, FLAGS, MAXCOMPLEN).  FSTYPE is the filesystem type as
  331. before.  FLAGS is a combination of values of the following table:
  332.  
  333.     0x00000001  supports case-sensitive filenames
  334.     0x00000002  preserves the case of filenames
  335.     0x00000004  supports Unicode in filenames
  336.     0x00000008  preserves and enforces ACLs
  337.     0x00000010  supports file-based compression
  338.     0x00000020  supports disk quotas
  339.     0x00000040  supports sparse files
  340.     0x00000080  supports reparse points
  341.     0x00000100  supports remote storage
  342.     0x00008000  is a compressed volume (e.g. DoubleSpace)
  343.     0x00010000  supports object identifiers
  344.     0x00020000  supports the Encrypted File System (EFS)
  345.  
  346. MAXCOMPLEN is the maximum length of a filename component (the part
  347. between two backslashes) on this file system.
  348.  
  349. =item Win32::FreeLibrary(HANDLE)
  350.  
  351. [EXT] Unloads a previously loaded dynamic-link library.  The HANDLE is
  352. no longer valid after this call.  See L<LoadLibrary|Win32::LoadLibrary(LIBNAME)>
  353. for information on dynamically loading a library.
  354.  
  355. =item Win32::GetArchName()
  356.  
  357. [EXT] Use of this function is deprecated.  It is equivalent with
  358. $ENV{PROCESSOR_ARCHITECTURE}.  This might not work on Win9X.
  359.  
  360. =item Win32::GetChipName()
  361.  
  362. [EXT] Returns the processor type: 386, 486 or 586 for Intel processors,
  363. 21064 for the Alpha chip.
  364.  
  365. =item Win32::GetCwd()
  366.  
  367. [CORE] Returns the current active drive and directory.  This function
  368. does not return a UNC path, since the functionality required for such
  369. a feature is not available under Windows 95.
  370.  
  371. =item Win32::GetFolderPath(FOLDER [, CREATE])
  372.  
  373. [EXT] Returns the full pathname of one of the Windows special folders.
  374. The folder will be created if it doesn't exist and the optional CREATE
  375. argument is true.  The following FOLDER constants are defined by the
  376. Win32 module, but only exported on demand:
  377.  
  378.         CSIDL_ADMINTOOLS
  379.         CSIDL_APPDATA
  380.         CSIDL_CDBURN_AREA
  381.         CSIDL_COMMON_ADMINTOOLS
  382.         CSIDL_COMMON_APPDATA
  383.         CSIDL_COMMON_DESKTOPDIRECTORY
  384.         CSIDL_COMMON_DOCUMENTS
  385.         CSIDL_COMMON_FAVORITES
  386.         CSIDL_COMMON_MUSIC
  387.         CSIDL_COMMON_PICTURES
  388.         CSIDL_COMMON_PROGRAMS
  389.         CSIDL_COMMON_STARTMENU
  390.         CSIDL_COMMON_STARTUP
  391.         CSIDL_COMMON_TEMPLATES
  392.         CSIDL_COMMON_VIDEO
  393.         CSIDL_COOKIES
  394.         CSIDL_DESKTOP
  395.         CSIDL_DESKTOPDIRECTORY
  396.         CSIDL_FAVORITES
  397.         CSIDL_FONTS
  398.         CSIDL_HISTORY
  399.         CSIDL_INTERNET_CACHE
  400.         CSIDL_LOCAL_APPDATA
  401.         CSIDL_MYMUSIC
  402.         CSIDL_MYPICTURES
  403.         CSIDL_MYVIDEO
  404.         CSIDL_NETHOOD
  405.         CSIDL_PERSONAL
  406.         CSIDL_PRINTHOOD
  407.         CSIDL_PROFILE
  408.         CSIDL_PROGRAMS
  409.         CSIDL_PROGRAM_FILES
  410.         CSIDL_PROGRAM_FILES_COMMON
  411.         CSIDL_RECENT
  412.         CSIDL_RESOURCES
  413.         CSIDL_RESOURCES_LOCALIZED
  414.         CSIDL_SENDTO
  415.         CSIDL_STARTMENU
  416.         CSIDL_STARTUP
  417.         CSIDL_SYSTEM
  418.         CSIDL_TEMPLATES
  419.         CSIDL_WINDOWS
  420.  
  421. Note that not all folders are defined on all versions of Windows.
  422.  
  423. Please refer to the MSDN documentation of the CSIDL constants,
  424. currently available at:
  425.  
  426. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/enums/csidl.asp
  427.  
  428. =item Win32::GetFullPathName(FILENAME)
  429.  
  430. [CORE] GetFullPathName combines the FILENAME with the current drive
  431. and directory name and returns a fully qualified (aka, absolute)
  432. path name.  In list context it returns two elements: (PATH, FILE) where
  433. PATH is the complete pathname component (including trailing backslash)
  434. and FILE is just the filename part.  Note that no attempt is made to
  435. convert 8.3 components in the supplied FILENAME to longnames or
  436. vice-versa.  Compare with Win32::GetShortPathName and
  437. Win32::GetLongPathName.
  438.  
  439. =item Win32::GetLastError()
  440.  
  441. [CORE] Returns the last error value generated by a call to a Win32 API
  442. function.  Note that C<$^E> used in a numeric context amounts to the
  443. same value.
  444.  
  445. =item Win32::GetLongPathName(PATHNAME)
  446.  
  447. [CORE] Returns a representation of PATHNAME composed of longname
  448. components (if any).  The result may not necessarily be longer
  449. than PATHNAME.  No attempt is made to convert PATHNAME to the
  450. absolute path.  Compare with Win32::GetShortPathName and
  451. Win32::GetFullPathName.
  452.  
  453. =item Win32::GetNextAvailDrive()
  454.  
  455. [CORE] Returns a string in the form of "<d>:" where <d> is the first
  456. available drive letter.
  457.  
  458. =item Win32::GetOSVersion()
  459.  
  460. [CORE] Returns the list (STRING, MAJOR, MINOR, BUILD, ID), where the
  461. elements are, respectively: An arbitrary descriptive string, the major
  462. version number of the operating system, the minor version number, the
  463. build number, and a digit indicating the actual operating system.
  464. For the ID, the values are 0 for Win32s, 1 for Windows 9X/Me and 2 for
  465. Windows NT/2000/XP/2003.  In scalar context it returns just the ID.
  466.  
  467. Currently known values for ID MAJOR and MINOR are as follows:
  468.  
  469.     OS                    ID    MAJOR   MINOR
  470.     Win32s                 0      -       -
  471.     Windows 95             1      4       0
  472.     Windows 98             1      4      10
  473.     Windows Me             1      4      90
  474.     Windows NT 3.51        2      3      51
  475.     Windows NT 4           2      4       0
  476.     Windows 2000           2      5       0
  477.     Windows XP             2      5       1
  478.     Windows Server 2003    2      5       2
  479.  
  480. On Windows NT 4 SP6 and later this function returns the following
  481. additional values: SPMAJOR, SPMINOR, SUITEMASK, PRODUCTTYPE.
  482.  
  483. SPMAJOR and SPMINOR are are the version numbers of the latest
  484. installed service pack.
  485.  
  486. SUITEMASK is a bitfield identifying the product suites available on
  487. the system.  Known bits are:
  488.  
  489.     VER_SUITE_SMALLBUSINESS             0x00000001
  490.     VER_SUITE_ENTERPRISE                0x00000002
  491.     VER_SUITE_BACKOFFICE                0x00000004
  492.     VER_SUITE_COMMUNICATIONS            0x00000008
  493.     VER_SUITE_TERMINAL                  0x00000010
  494.     VER_SUITE_SMALLBUSINESS_RESTRICTED  0x00000020
  495.     VER_SUITE_EMBEDDEDNT                0x00000040
  496.     VER_SUITE_DATACENTER                0x00000080
  497.     VER_SUITE_SINGLEUSERTS              0x00000100
  498.     VER_SUITE_PERSONAL                  0x00000200
  499.     VER_SUITE_BLADE                     0x00000400
  500.     VER_SUITE_EMBEDDED_RESTRICTED       0x00000800
  501.     VER_SUITE_SECURITY_APPLIANCE        0x00001000
  502.  
  503. The VER_SUITE_xxx names are listed here to crossreference the Microsoft
  504. documentation.  The Win32 module does not provide symbolic names for these
  505. constants.
  506.  
  507. PRODUCTTYPE provides additional information about the system.  It should
  508. be one of the following integer values:
  509.  
  510.     1 - Workstation (NT 4, 2000 Pro, XP Home, XP Pro)
  511.     2 - Domaincontroller
  512.     3 - Server
  513.  
  514. =item Win32::GetOSName()
  515.  
  516. [EXT] In scalar context returns the name of the Win32 operating system
  517. being used.  In list context returns a two element list of the OS name
  518. and whatever edition information is known about the particular build
  519. (for Win9X boxes) and whatever service packs have been installed.
  520. The latter is roughly equivalent to the first item returned by
  521. GetOSVersion() in list context.
  522.  
  523. Currently the possible values for the OS name are
  524.  
  525.  Win32s Win95 Win98 WinMe WinNT3.51 WinNT4 Win2000 WinXP/.Net Win2003
  526.  
  527. This routine is just a simple interface into GetOSVersion().  More
  528. specific or demanding situations should use that instead.  Another
  529. option would be to use POSIX::uname(), however the latter appears to
  530. report only the OS family name and not the specific OS.  In scalar
  531. context it returns just the ID.
  532.  
  533. The name "WinXP/.Net" is used for historical reasons only, to maintain
  534. backwards compatibility of the Win32 module.  Windows .NET Server has
  535. been renamed as Windows 2003 Server before final release and uses a
  536. different major/minor version number than Windows XP.
  537.  
  538. =item Win32::GetShortPathName(PATHNAME)
  539.  
  540. [CORE] Returns a representation of PATHNAME composed only of
  541. short (8.3) path components.  The result may not necessarily be
  542. shorter than PATHNAME.  Compare with Win32::GetFullPathName and
  543. Win32::GetLongPathName.
  544.  
  545. =item Win32::GetProcAddress(INSTANCE, PROCNAME)
  546.  
  547. [EXT] Returns the address of a function inside a loaded library.  The
  548. information about what you can do with this address has been lost in
  549. the mist of time.  Use the Win32::API module instead of this deprecated
  550. function.
  551.  
  552. =item Win32::GetTickCount()
  553.  
  554. [CORE] Returns the number of milliseconds elapsed since the last
  555. system boot.  Resolution is limited to system timer ticks (about 10ms
  556. on WinNT and 55ms on Win9X).
  557.  
  558. =item Win32::InitiateSystemShutdown
  559.  
  560. (MACHINE, MESSAGE, TIMEOUT, FORCECLOSE, REBOOT)
  561.  
  562. [EXT] Shutsdown the specified MACHINE, notifying users with the
  563. supplied MESSAGE, within the specified TIMEOUT interval.  Forces
  564. closing of all documents without prompting the user if FORCECLOSE is
  565. true, and reboots the machine if REBOOT is true.  This function works
  566. only on WinNT.
  567.  
  568. =item Win32::IsAdminUser()
  569.  
  570. [EXT] Returns non zero if the account in whose security context the
  571. current process/thread is running belongs to the local group of
  572. Administrators in the built-in system domain; returns 0 if not.
  573. Returns the undefined value and prints a warning if an error occurred.
  574. This function always returns 1 on Win9X.
  575.  
  576. =item Win32::IsWinNT()
  577.  
  578. [CORE] Returns non zero if the Win32 subsystem is Windows NT.
  579.  
  580. =item Win32::IsWin95()
  581.  
  582. [CORE] Returns non zero if the Win32 subsystem is Windows 95.
  583.  
  584. =item Win32::LoadLibrary(LIBNAME)
  585.  
  586. [EXT] Loads a dynamic link library into memory and returns its module
  587. handle.  This handle can be used with Win32::GetProcAddress and
  588. Win32::FreeLibrary.  This function is deprecated.  Use the Win32::API
  589. module instead.
  590.  
  591. =item Win32::LoginName()
  592.  
  593. [CORE] Returns the username of the owner of the current perl process.
  594.  
  595. =item Win32::LookupAccountName(SYSTEM, ACCOUNT, DOMAIN, SID, SIDTYPE)
  596.  
  597. [EXT] Looks up ACCOUNT on SYSTEM and returns the domain name the SID and
  598. the SID type.
  599.  
  600. =item Win32::LookupAccountSID(SYSTEM, SID, ACCOUNT, DOMAIN, SIDTYPE)
  601.  
  602. [EXT] Looks up SID on SYSTEM and returns the account name, domain name,
  603. and the SID type.
  604.  
  605. =item Win32::MsgBox(MESSAGE [, FLAGS [, TITLE]])
  606.  
  607. [EXT] Create a dialogbox containing MESSAGE.  FLAGS specifies the
  608. required icon and buttons according to the following table:
  609.  
  610.     0 = OK
  611.     1 = OK and Cancel
  612.     2 = Abort, Retry, and Ignore
  613.     3 = Yes, No and Cancel
  614.     4 = Yes and No
  615.     5 = Retry and Cancel
  616.  
  617.     MB_ICONSTOP          "X" in a red circle
  618.     MB_ICONQUESTION      question mark in a bubble
  619.     MB_ICONEXCLAMATION   exclamation mark in a yellow triangle
  620.     MB_ICONINFORMATION   "i" in a bubble
  621.  
  622. TITLE specifies an optional window title.  The default is "Perl".
  623.  
  624. The function returns the menu id of the selected push button:
  625.  
  626.     0  Error
  627.  
  628.     1  OK
  629.     2  Cancel
  630.     3  Abort
  631.     4  Retry
  632.     5  Ignore
  633.     6  Yes
  634.     7  No
  635.  
  636. =item Win32::NodeName()
  637.  
  638. [CORE] Returns the Microsoft Network node-name of the current machine.
  639.  
  640. =item Win32::RegisterServer(LIBRARYNAME)
  641.  
  642. [EXT] Loads the DLL LIBRARYNAME and calls the function DllRegisterServer.
  643.  
  644. =item Win32::SetChildShowWindow(SHOWWINDOW)
  645.  
  646. [CORE] Sets the I<ShowMode> of child processes started by system().
  647. By default system() will create a new console window for child
  648. processes if Perl itself is not running from a console.  Calling
  649. SetChildShowWindow(0) will make these new console windows invisible.
  650. Calling SetChildShowWindow() without arguments reverts system() to the
  651. default behavior.  The return value of SetChildShowWindow() is the
  652. previous setting or C<undef>.
  653.  
  654. [EXT] The following symbolic constants for SHOWWINDOW are available
  655. (but not exported) from the Win32 module: SW_HIDE, SW_SHOWNORMAL,
  656. SW_SHOWMINIMIZED, SW_SHOWMAXIMIZED and SW_SHOWNOACTIVATE.
  657.  
  658. =item Win32::SetCwd(NEWDIRECTORY)
  659.  
  660. [CORE] Sets the current active drive and directory.  This function does not
  661. work with UNC paths, since the functionality required to required for
  662. such a feature is not available under Windows 95.
  663.  
  664. =item Win32::SetLastError(ERROR)
  665.  
  666. [CORE] Sets the value of the last error encountered to ERROR.  This is
  667. that value that will be returned by the Win32::GetLastError()
  668. function.
  669.  
  670. =item Win32::Sleep(TIME)
  671.  
  672. [CORE] Pauses for TIME milliseconds.  The timeslices are made available
  673. to other processes and threads.
  674.  
  675. =item Win32::Spawn(COMMAND, ARGS, PID)
  676.  
  677. [CORE] Spawns a new process using the supplied COMMAND, passing in
  678. arguments in the string ARGS.  The pid of the new process is stored in
  679. PID.  This function is deprecated.  Please use the Win32::Process module
  680. instead.
  681.  
  682. =item Win32::UnregisterServer(LIBRARYNAME)
  683.  
  684. [EXT] Loads the DLL LIBRARYNAME and calls the function
  685. DllUnregisterServer.
  686.  
  687. =back
  688.  
  689. =cut
  690.