Windows 版本

返回 Windows 版本字符串,如“Microsoft Windows 2000 Service Pack 4 (Build 2195)”。

function tform1.getver():string ;
var
   osvi : TOSVersionInfo;
   bOsVersionInfoEx : boolean;
   szBuf : array[0..255] of char;
   tmp : string;
begin
   lstrcpy(szBuf,'Error!');

   ZeroMemory(@osvi,sizeof(TOSVersionInfo));
   osvi.dwOSVersionInfoSize := sizeof(TOSVersionInfo);
   bOsVersionInfoEx := GetVersionEx(osvi);
   if not bOsVersionInfoEx then
   begin
      osvi.dwOSVersionInfoSize := sizeof(OSVERSIONINFO);
      if(not GetVersionEx(osvi)) then
      begin
         result:='Error!';
         exit;
      end;
   end;

   case osvi.dwPlatformId of

   VER_PLATFORM_WIN32_NT:
   begin
      if(osvi.dwMajorVersion <= 4) then
         lstrcpy(szBuf,('Microsoft Windows NT'));
      if(osvi.dwMajorVersion = 5) and (osvi.dwMinorVersion = 0) then
      lstrcpy(szBuf,('Microsoft Windows 2000'));
      if(osvi.dwMajorVersion = 5) and (osvi.dwMinorVersion = 1) then
      lstrcpy(szBuf,('Microsoft Windows XP'));

      if(osvi.dwMajorVersion <= 4) then
      begin
         tmp:=format(' Version %d.%d %s (Build %d)',[osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.szCSDVersion, osvi.dwBuildNumber and $0FFFF]);
         lstrcat(szBuf,pchar(tmp));
      end
      else
      begin
         tmp:=format(' %s (Build %d)',[osvi.szCSDVersion,osvi.dwBuildNumber and $0FFFF]);
         lstrcat(szBuf,pchar(tmp));
      end;
   end;

   VER_PLATFORM_WIN32_WINDOWS:
   begin
      if(osvi.dwMajorVersion = 4) and (osvi.dwMinorVersion = 0) then
      begin
         lstrcpy(szBuf,('Microsoft Windows 95'));
         if(osvi.szCSDVersion[ 1 ] = 'C') or (osvi.szCSDVersion[ 1 ] = 'B') then
         begin
            lstrcat(szBuf,(' OSR2'));
         end;
      end;
      if(osvi.dwMajorVersion = 4) and (osvi.dwMinorVersion = 10) then
      begin
         lstrcpy(szBuf,('Microsoft Windows 98'));
         if(osvi.szCSDVersion[ 1 ] = 'A') then
         begin
            lstrcat(szBuf,(' SE'));
         end;
      end;
      if(osvi.dwMajorVersion = 4) and (osvi.dwMinorVersion = 90) then
      begin
         lstrcpy(szBuf,('Microsoft Windows Me'));
      end;
   end;

   VER_PLATFORM_WIN32s:
      lstrcpy(szBuf,('Microsoft Win32s'));

   else
      lstrcpy(szBuf,'Error!');
   end;
   result:=szbuf;
end;