home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 November / Chip_2002-11_cd1.bin / zkuste / delphi / unity / d56 / DW / DW10242.ZIP / OSWorks.pas < prev    next >
Pascal/Delphi Source File  |  2002-04-21  |  13KB  |  401 lines

  1. (*-------------------------------OSWorks.pas----------------------------
  2.  V1.0.235 - 05.03.2002 current release
  3. ------------------------------------------------------------------------*)
  4.  
  5. unit OSWorks;
  6.  
  7. interface
  8.  
  9. uses Windows, SysUtils, Dialogs;
  10.  
  11. type
  12.   TOSVersionInfo = packed record
  13.     dwOSVersionInfoSize,
  14.     dwMajorVersion,
  15.     dwMinorVersion,
  16.     dwBuildNumber,
  17.     dwPlatformId: DWord;
  18.     szCSDVersion: array[0..127] of Char;
  19.   end;
  20.  
  21.   POSVersionInfoEx = ^TOSVersionInfoEx;
  22.   TOSVersionInfoEx = record
  23.     dwOSVersionInfoSize: DWORD;
  24.     dwMajorVersion: DWORD;
  25.     dwMinorVersion: DWORD;
  26.     dwBuildNumber: DWORD;
  27.     dwPlatformId: DWORD;
  28.     szCSDVersion: array[0..127] of Char;
  29.     wServicePackMajor: Word;
  30.     wServicePackMinor: Word;
  31.     wSuiteMask: Word;
  32.     wProductType: Byte;
  33.     wReserved: Byte;
  34.   end;
  35.  
  36.   TOSType =         (OS_WIN95,
  37.                      OS_WIN98,
  38.                      OS_WINME,
  39.                      OS_NT351,
  40.                      OS_NT4_DOMAINCONTROLLER,
  41.                      OS_NT4_SERVER,
  42.                      OS_NT4_WORKSTATION,
  43.                      OS_WIN2000,
  44.                      OS_WIN2000_ADVSERVER,
  45.                      OS_WIN2000_DATACENTER,
  46.                      OS_WINXP_HOME,
  47.                      OS_WINXP_PROFESSIONAL,
  48.                      OS_WINXP_NETSERVER,
  49.                      OS_UNKNOWN);
  50.  
  51.   { Suite Mask Flag: NT4, 2000, XP }
  52.   TOSSuiteType =    (OSST_BACKOFFICE,
  53.                      OSST_DATACENTER,
  54.                      OSST_ENTERPRISE,
  55.                      OSST_PERSONAL {XP only},
  56.                      OSST_SMALLBUSINESS,
  57.                      OSST_SMALLBUSINESS_RESTRICTED,
  58.                      OSST_TERMINAL,
  59.                      OSST_UNKNOWN);
  60.  
  61.    { Product Type Flag: NT4, 2000, XP }
  62.    TOSProductType = (OSPT_WORKSTATION,
  63.                      OSPT_DOMAIN_CONTROLLER,
  64.                      OSPT_SERVER,
  65.                      OSPT_UNKNOWN);
  66.  
  67.   function GetVersionEx(lpOs: pointer): BOOL; stdcall;
  68.      external 'kernel32.dll' name 'GetVersionExA';
  69.  
  70.   procedure GetWindowsVersionEx(var OSVIE: TOSVersionInfoEx);
  71.   function IsNTWorkstation: Boolean;
  72.   function IsNTServer: Boolean;
  73.   function IsDomainController: Boolean;
  74.   function IsNTMachine: Boolean;
  75.   function IsWin95: Boolean;
  76.   function IsWin98: Boolean;
  77.   function IsWinME: Boolean;
  78.   function IsNT351: Boolean;
  79.   function IsNT4: Boolean;
  80.   function IsWin2K: Boolean;
  81.   function IsWinXP: Boolean;
  82.   function WinMajorVersion: Integer;
  83.   function WinMinorVersion: Integer;
  84.   function WinBuildNumber: Integer;
  85.   function NTServicePackMajorVersion: Integer;
  86.   function NTServicePackMinorVersion: Integer;
  87.  
  88.   function GetOS: TOSType;
  89.   function GetOSName: String;
  90.   function GetSuiteType: TOSSuiteType;
  91.   function GetProductType: TOSProductType;
  92.   function GetNTServicePackName: String;
  93.  
  94.   function Wow64IsRunning(AppHandle: THandle): Boolean;
  95.  
  96. const
  97.   VER_SUITE_BACKOFFICE =               $00000004;
  98.   VER_SUITE_DATACENTER =               $00000080;
  99.   VER_SUITE_ENTERPRISE =               $00000002;
  100.   VER_SUITE_PERSONAL =                 $00000200;
  101.   VER_SUITE_SMALLBUSINESS =            $00000001;
  102.   VER_SUITE_SMALLBUSINESS_RESTRICTED = $00000020;
  103.   VER_SUITE_TERMINAL =                 $00000010;
  104.  
  105.   VER_NT_WORKSTATION =                 $0000001;
  106.   VER_NT_DOMAIN_CONTROLLER =           $0000002;
  107.   VER_NT_SERVER =                      $0000003;
  108.  
  109. implementation
  110.  
  111. procedure GetWindowsVersionEx(var OSVIE: TOSVersionInfoEx);
  112. var
  113.   lpOS, lpOS2: POsVersionInfoEx;
  114. begin
  115.   GetMem(lpOS, SizeOf(TOsVersionInfo));
  116.   lpOs^.dwOSVersionInfoSize := SizeOf(TOsVersionInfo);
  117.   while getVersionEx(lpOS) = false do
  118.   begin
  119.     GetMem(lpos2, lpos^.dwOSVersionInfoSize +1);
  120.     lpOs2^.dwOSVersionInfoSize := lpOs^.dwOSVersionInfoSize +1;
  121.     FreeMem(lpOs, lpOs^.dwOSVersionInfoSize);
  122.     lpOS := lpOs2;
  123.   end;
  124.   OSVIE.dwMajorVersion := lpOs^.dwMajorVersion;
  125.   OSVIE.dwMinorVersion := lpOs^.dwMinorVersion;
  126.   OSVIE.dwBuildNumber := lpOS^.dwBuildNumber;
  127.   OSVIE.dwPlatformId := lpOS^.dwPlatformId;
  128.   OSVIE.szCSDVersion := lpOS^.szCSDVersion;
  129.   OSVIE.wServicePackMajor := lpOS^.wServicePackMajor;
  130.   OSVIE.wServicePackMinor := lpOS^.wServicePackMinor;
  131.   OSVIE.wProductType := lpOS^.wProductType;
  132.   OSVIE.wReserved := lpOS^.wReserved;
  133.   FreeMem(lpOs, lpOs^.dwOSVersionInfoSize);
  134. end;
  135.  
  136. function IsNTWorkstation: Boolean;
  137. var
  138.    OSVersionInfoEx: TOSVersionInfoEx;
  139. begin
  140.    GetWindowsVersionEx(OSVersionInfoEx);
  141.    result:= (OSVersionInfoEx.wProductType = VER_NT_WORKSTATION);
  142. end;
  143.  
  144. function IsNTServer: Boolean;
  145. var
  146.    OSVersionInfoEx: TOSVersionInfoEx;
  147. begin
  148.    GetWindowsVersionEx(OSVersionInfoEx);
  149.    result:= (OSVersionInfoEx.wProductType = VER_NT_SERVER);
  150. end;
  151.  
  152. function IsDomainController: Boolean;
  153. var
  154.    OSVersionInfoEx: TOSVersionInfoEx;
  155. begin
  156.    GetWindowsVersionEx(OSVersionInfoEx);
  157.    result:= (OSVersionInfoEx.wProductType = VER_NT_DOMAIN_CONTROLLER);
  158. end;
  159.  
  160. function IsNTMachine: Boolean;
  161. var
  162.    OSVersionInfoEx: TOSVersionInfoEx;
  163. begin
  164.    GetWindowsVersionEx(OSVersionInfoEx);
  165.    result:= ( OSVersionInfoEx.dwPlatformId = VER_PLATFORM_WIN32_NT );
  166. end;
  167.  
  168. function IsWin95: Boolean;
  169. var
  170.    OSVersionInfoEx: TOSVersionInfoEx;
  171. begin
  172.    GetWindowsVersionEx(OSVersionInfoEx);
  173.    result:= ( OSVersionInfoEx.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS ) and
  174.             ( OSVersionInfoEx.dwMajorVersion = 4 ) and
  175.             ( OSVersionInfoEx.dwMinorVersion = 0 );
  176. end;
  177.  
  178. function IsWin98: Boolean;
  179. var
  180.    OSVersionInfoEx: TOSVersionInfoEx;
  181. begin
  182.    GetWindowsVersionEx(OSVersionInfoEx);
  183.    result:= ( OSVersionInfoEx.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS ) and
  184.             ( OSVersionInfoEx.dwMajorVersion = 4 ) and
  185.             ( OSVersionInfoEx.dwMinorVersion = 10 );
  186. end;
  187.  
  188. function IsWinME: Boolean;
  189. var
  190.    OSVersionInfoEx: TOSVersionInfoEx;
  191. begin
  192.    GetWindowsVersionEx(OSVersionInfoEx);
  193.    result:= ( OSVersionInfoEx.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS ) and
  194.             ( OSVersionInfoEx.dwMajorVersion = 4 ) and
  195.             ( OSVersionInfoEx.dwMinorVersion = 90 );
  196. end;
  197.  
  198. function IsNT351: Boolean;
  199. var
  200.    OSVersionInfoEx: TOSVersionInfoEx;
  201. begin
  202.    GetWindowsVersionEx(OSVersionInfoEx);
  203.    result:= ( OSVersionInfoEx.dwPlatformId = VER_PLATFORM_WIN32_NT ) and
  204.             ( OSVersionInfoEx.dwMajorVersion = 3 ) and
  205.             ( OSVersionInfoEx.dwMinorVersion = 51 );
  206. end;
  207.  
  208. function IsNT4: Boolean;
  209. var
  210.    OSVersionInfoEx: TOSVersionInfoEx;
  211. begin
  212.    GetWindowsVersionEx(OSVersionInfoEx);
  213.    result:= ( OSVersionInfoEx.dwPlatformId = VER_PLATFORM_WIN32_NT ) and
  214.             ( OSVersionInfoEx.dwMajorVersion = 4 ) and
  215.             ( OSVersionInfoEx.dwMinorVersion = 0 );
  216. end;
  217.  
  218. function IsWin2K: Boolean;
  219. var
  220.    OSVersionInfoEx: TOSVersionInfoEx;
  221. begin
  222.    GetWindowsVersionEx(OSVersionInfoEx);
  223.    result:= ( OSVersionInfoEx.dwPlatformId = VER_PLATFORM_WIN32_NT ) and
  224.             ( OSVersionInfoEx.dwMajorVersion = 5 ) and
  225.             ( OSVersionInfoEx.dwMinorVersion = 0 );
  226. end;
  227.  
  228. function IsWinXP: Boolean;
  229. var
  230.    OSVersionInfoEx: TOSVersionInfoEx;
  231. begin
  232.    GetWindowsVersionEx(OSVersionInfoEx);
  233.    result:= ( OSVersionInfoEx.dwPlatformId = VER_PLATFORM_WIN32_NT ) and
  234.             ( OSVersionInfoEx.dwMajorVersion = 5 ) and
  235.             ( OSVersionInfoEx.dwMinorVersion = 1 );
  236. end;
  237.  
  238. function WinMajorVersion: Integer;
  239. var
  240.    OSVersionInfoEx: TOSVersionInfoEx;
  241. begin
  242.    GetWindowsVersionEx(OSVersionInfoEx);
  243.    result:= OSVersionInfoEx.dwMajorVersion;
  244. end;
  245.  
  246. function WinMinorVersion: Integer;
  247. var
  248.    OSVersionInfoEx: TOSVersionInfoEx;
  249. begin
  250.    GetWindowsVersionEx(OSVersionInfoEx);
  251.    result:= OSVersionInfoEx.dwMinorVersion;
  252. end;
  253.  
  254. function WinBuildNumber: Integer;
  255. var
  256.    OSVersionInfoEx: TOSVersionInfoEx;
  257. begin
  258.    GetWindowsVersionEx(OSVersionInfoEx);
  259.    result:= OSVersionInfoEx.dwBuildNumber and $FFFF;
  260. end;
  261.  
  262. function NTServicePackMajorVersion: Integer;
  263. var
  264.    OSVersionInfoEx: TOSVersionInfoEx;
  265. begin
  266.    GetWindowsVersionEx(OSVersionInfoEx);
  267.    result:= OSVersionInfoEx.wServicePackMajor;
  268. end;
  269.  
  270. function NTServicePackMinorVersion: Integer;
  271. var
  272.    OSVersionInfoEx: TOSVersionInfoEx;
  273. begin
  274.    GetWindowsVersionEx(OSVersionInfoEx);
  275.    result:= OSVersionInfoEx.wServicePackMinor;
  276. end;
  277.  
  278. function GetOS: TOSType;
  279. var
  280.    OSV: TOSVersionInfoEx;
  281. begin
  282.    GetWindowsVersionEx(OSV);
  283.    result:= OS_UNKNOWN;
  284.    if OSV.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS then
  285.       case OSV.dwMinorVersion of
  286.       0:  result:= OS_WIN95;
  287.       10: result:= OS_WIN98;
  288.       90: result:= OS_WINME;
  289.       end
  290.    else if OSV.dwPlatformId = VER_PLATFORM_WIN32_NT then
  291.       case OSV.dwMajorVersion of
  292.       3: result:= OS_NT351;
  293.       4: case OSV.wProductType of
  294.          VER_NT_DOMAIN_CONTROLLER:result:= OS_NT4_DOMAINCONTROLLER;
  295.          VER_NT_SERVER:           result:= OS_NT4_SERVER;
  296.          VER_NT_WORKSTATION:      result:= OS_NT4_WORKSTATION;
  297.          end;        
  298.       5: case OSV.dwMinorVersion of
  299.          0: case OSV.wSuiteMask of
  300.             VER_SUITE_ENTERPRISE: result:= OS_WIN2000_ADVSERVER;
  301.             VER_SUITE_DATACENTER: result:= OS_WIN2000_DATACENTER;
  302.             else                  result:= OS_WIN2000;
  303.             end;
  304.          1: case OSV.wSuiteMask of
  305.             VER_SUITE_PERSONAL:   result:= OS_WINXP_HOME;
  306.             VER_SUITE_ENTERPRISE: result:= OS_WINXP_NETSERVER;
  307.             else                  result:= OS_WINXP_PROFESSIONAL;
  308.             end;
  309.          end;
  310.       end
  311.    else begin
  312.       result:= OS_UNKNOWN;
  313.    end;
  314. end;
  315.  
  316. function GetOSName: String;
  317. begin
  318.    case GetOS of
  319.    OS_WIN95:                result:= 'Microsoft Windows 95';
  320.    OS_WIN98:                result:= 'Microsoft Windows 98';
  321.    OS_WINME:                result:= 'Microsoft Windows Millenium Edition';
  322.    OS_NT351:                result:= 'Microsoft Windows NT 3.51';
  323.    OS_NT4_DOMAINCONTROLLER: result:= 'Microsoft Windows NT 4.0 Domain Controller';
  324.    OS_NT4_SERVER:           result:= 'Microsoft Windows NT 4.0 Server';
  325.    OS_NT4_WORKSTATION:      result:= 'Microsoft Windows NT 4.0 Workstation';
  326.    OS_WIN2000:              result:= 'Microsoft Windows 2000';
  327.    OS_WIN2000_ADVSERVER:    result:= 'Microsoft Windows 2000 Advanced Server';
  328.    OS_WIN2000_DATACENTER:   result:= 'Microsoft Windows 2000 DataCenter Server';
  329.    OS_WINXP_HOME:           result:= 'Microsoft Windows XP Home Edition';
  330.    OS_WINXP_PROFESSIONAL:   result:= 'Microsoft Windows XP Professional';
  331.    OS_WINXP_NETSERVER:      result:= 'Microsoft Windows XP .NET Server';
  332.    OS_UNKNOWN:              result:= 'MS OS unknown';
  333.    end;
  334. end;
  335.  
  336. function GetSuiteType: TOSSuiteType;
  337. var
  338.    OSV: TOSVersionInfoEx;
  339. begin
  340.    GetWindowsVersionEx(OSV);
  341.    case OSV.wSuiteMask of
  342.    VER_SUITE_BACKOFFICE:               result:= OSST_BACKOFFICE;
  343.    VER_SUITE_DATACENTER:               result:= OSST_DATACENTER;
  344.    VER_SUITE_ENTERPRISE:               result:= OSST_ENTERPRISE;
  345.    VER_SUITE_PERSONAL: {XP only}       result:= OSST_PERSONAL;
  346.    VER_SUITE_SMALLBUSINESS:            result:= OSST_SMALLBUSINESS;
  347.    VER_SUITE_SMALLBUSINESS_RESTRICTED: result:= OSST_SMALLBUSINESS_RESTRICTED;
  348.    VER_SUITE_TERMINAL:                 result:= OSST_TERMINAL;
  349.    else                                result:= OSST_UNKNOWN;
  350.    end;
  351. end;
  352.  
  353. function GetProductType: TOSProductType;
  354. var
  355.    OSV: TOSVersionInfoEx;
  356. begin
  357.    GetWindowsVersionEx(OSV);
  358.    case OSV.wProductType of
  359.    VER_NT_WORKSTATION:                 result:= OSPT_WORKSTATION;
  360.    VER_NT_DOMAIN_CONTROLLER:           result:= OSPT_DOMAIN_CONTROLLER;
  361.    VER_NT_SERVER:                      result:= OSPT_SERVER;
  362.    else                                result:= OSPT_UNKNOWN;
  363.    end;
  364. end;
  365.  
  366. function GetNTServicePackName: String;
  367. var
  368.    OSV: TOSVersionInfoEx;
  369. begin
  370.    GetWindowsVersionEx(OSV);
  371.    result:= OSV.szCSDVersion;
  372. end;
  373.  
  374. function Wow64IsRunning(AppHandle: THandle): Boolean;
  375. type
  376.    TIsWow64Process = function(hProcess: THandle;
  377.                               Wow64Process: Boolean):Boolean; StdCall;
  378. const
  379.    DLLName: PChar = 'Kernel32.dll';
  380.    FcnName: PChar = 'IsWow64Process';
  381. var
  382.    DLLHndl: THandle;
  383.    IsWow64,
  384.    bChkWow: Boolean;
  385.    IsWow64Process: TIsWow64Process;
  386. begin
  387.    result:= FALSE;
  388.    IsWow64:= FALSE;
  389.    bChkWow:= FALSE;
  390.    DLLHndl:= LoadLibrary(DLLName);
  391.    if (DLLHndl <> 0) then begin
  392.       IsWow64Process:= GetProcAddress(DLLHndl, FcnName);
  393.       if Assigned(IsWow64Process) then
  394.          bChkWow:= IsWow64Process(AppHandle, IsWow64);
  395.       result:= (bChkWow) and (IsWow64);
  396.    end;
  397.    FreeLibrary(DLLHndl);
  398. end;
  399.  
  400. end.
  401.