home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 June / PCWorld_2005-06_cd.bin / software / vyzkuste / firewally / firewally.exe / framework-2.3.exe / Win32.pm < prev    next >
Text File  |  2004-01-12  |  5KB  |  178 lines

  1. package Win32;
  2.  
  3. #
  4. #  Documentation for all Win32:: functions are in Win32.pod, which is a
  5. #  standard part of Perl 5.6, and later.
  6. #
  7.  
  8. BEGIN {
  9.     use strict;
  10.     use vars qw|$VERSION @ISA @EXPORT @EXPORT_OK|;
  11.  
  12.     require Exporter;
  13.     require DynaLoader;
  14.     eval { require Win32CORE; };
  15.  
  16.     @ISA = qw|Exporter DynaLoader|;
  17.     $VERSION = '0.191';
  18.  
  19.     @EXPORT = qw(
  20.     NULL
  21.     WIN31_CLASS
  22.     OWNER_SECURITY_INFORMATION
  23.     GROUP_SECURITY_INFORMATION
  24.     DACL_SECURITY_INFORMATION
  25.     SACL_SECURITY_INFORMATION
  26.     MB_ICONHAND
  27.     MB_ICONQUESTION
  28.     MB_ICONEXCLAMATION
  29.     MB_ICONASTERISK
  30.     MB_ICONWARNING
  31.     MB_ICONERROR
  32.     MB_ICONINFORMATION
  33.     MB_ICONSTOP
  34.     );
  35.     @EXPORT_OK = qw(
  36.         GetOSName
  37.         SW_HIDE
  38.         SW_SHOWNORMAL
  39.         SW_SHOWMINIMIZED
  40.         SW_SHOWMAXIMIZED
  41.         SW_SHOWNOACTIVATE
  42.     );
  43. }
  44.  
  45. # Routines available in core:
  46. # Win32::GetLastError
  47. # Win32::LoginName
  48. # Win32::NodeName
  49. # Win32::DomainName
  50. # Win32::FsType
  51. # Win32::GetCwd
  52. # Win32::GetOSVersion
  53. # Win32::FormatMessage ERRORCODE
  54. # Win32::Spawn COMMAND, ARGS, PID
  55. # Win32::GetTickCount
  56. # Win32::IsWinNT
  57. # Win32::IsWin95
  58.  
  59. # We won't bother with the constant stuff, too much of a hassle. Just hard
  60. # code it here.
  61.  
  62. sub NULL ()                { 0 }
  63. sub WIN31_CLASS ()            { &NULL }
  64.  
  65. sub OWNER_SECURITY_INFORMATION ()    { 0x00000001 }
  66. sub GROUP_SECURITY_INFORMATION ()    { 0x00000002 }
  67. sub DACL_SECURITY_INFORMATION  ()    { 0x00000004 }
  68. sub SACL_SECURITY_INFORMATION  ()    { 0x00000008 }
  69.  
  70. sub MB_ICONHAND        ()        { 0x00000010 }
  71. sub MB_ICONQUESTION    ()        { 0x00000020 }
  72. sub MB_ICONEXCLAMATION    ()        { 0x00000030 }
  73. sub MB_ICONASTERISK    ()        { 0x00000040 }
  74. sub MB_ICONWARNING    ()        { 0x00000030 }
  75. sub MB_ICONERROR    ()        { 0x00000010 }
  76. sub MB_ICONINFORMATION    ()        { 0x00000040 }
  77. sub MB_ICONSTOP        ()        { 0x00000010 }
  78.  
  79. sub SW_HIDE           ()        { 0 }
  80. sub SW_SHOWNORMAL     ()        { 1 }
  81. sub SW_SHOWMINIMIZED  ()        { 2 }
  82. sub SW_SHOWMAXIMIZED  ()        { 3 }
  83. sub SW_SHOWNOACTIVATE ()        { 4 }
  84.  
  85.  
  86. ### This method is just a simple interface into GetOSVersion().  More
  87. ### specific or demanding situations should use that instead.
  88.  
  89. my ($found_os, $found_desc);
  90.  
  91. sub GetOSName {
  92.     my ($os,$desc,$major, $minor, $build, $id)=("","");
  93.     unless (defined $found_os) {
  94.         # If we have a run this already, we have the results cached
  95.         # If so, return them
  96.  
  97.         # Use the standard API call to determine the version
  98.         ($desc, $major, $minor, $build, $id) = Win32::GetOSVersion();
  99.  
  100.         # If id==0 then its a win32s box -- Meaning Win3.11
  101.         #  http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/sysinfo_49iw.asp
  102.         unless($id) {
  103.             $os = 'Win32s';
  104.         }
  105.     else {
  106.         # Magic numbers from MSDN documentation of OSVERSIONINFO
  107.         # Here is some mickeysoft code that tells the story as well:
  108.         # http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/sysinfo_92jy.asp
  109.         # Caution with the above code as it uses functions unavailable
  110.         # to us in Perl.
  111.         # Most version names can be parsed from just the id and minor
  112.         # version
  113.         $os = {
  114.         1 => {
  115.             0  => "95",
  116.             10 => "98",
  117.             90 => "Me"
  118.         },
  119.         2 => {
  120.             0  => "2000",
  121.             1  => "XP/.Net",
  122.             51 => "NT3.51"
  123.         }
  124.         }->{$id}->{$minor};
  125.     }
  126.  
  127.         # This _really_ shouldnt happen. At least not for quite a while
  128.         # Politely warn and return undef
  129.         unless (defined $os) {
  130.             warn qq[Windows version [$id:$major:$minor] unknown!];
  131.             return undef;
  132.         }
  133.  
  134.         my $tag = "";
  135.  
  136.         # But distinguising W2k from NT4 requires looking at the major version
  137.         if ($os eq "2000" && $major != 5) {
  138.             $os = "NT4";
  139.         }
  140.  
  141.         # For the rest we take a look at the build numbers and try to deduce
  142.     # the exact release name, but we put that in the $desc
  143.         elsif ($os eq "95") {
  144.             if ($build eq '67109814') {
  145.                     $tag = '(a)';
  146.             }
  147.         elsif ($build eq '67306684') {
  148.                     $tag = '(b1)';
  149.             }
  150.         elsif ($build eq '67109975') {
  151.                     $tag = '(b2)';
  152.             }
  153.         }
  154.     elsif ($os eq "98" && $build eq '67766446') {
  155.             $tag = '(2nd ed)';
  156.         }
  157.  
  158.     if (length $tag) {
  159.         if (length $desc) {
  160.             $desc = "$tag $desc";
  161.         }
  162.         else {
  163.             $desc = $tag;
  164.         }
  165.     }
  166.  
  167.         # cache the results, so we dont have to do this again
  168.         $found_os      = "Win$os";
  169.         $found_desc    = $desc;
  170.     }
  171.  
  172.     return wantarray ? ($found_os, $found_desc) : $found_os;
  173. }
  174.  
  175. bootstrap Win32;
  176.  
  177. 1;
  178.