{判断是哪类操作系统,以确定关机方式}
function GetOperatingSystem: string;
varosVerInfo: TOSVersionInfo;     //就这句运行就通不过了
begin
   result:='';
   osverInfo.dwOsVersionInfoSize:=SizeOf(TOSVerionInfo);
   if GetVersionEx(osVerInfo) then
      case osVerInfo.dwPlatformId of VER_PLATFORM_WIN#_NT:
      begin
         result:='Windows NT/2000/XP'
      end;
      VER_PLATFORM_WIN32_WINDOWS:
      begin
         Result:='Windows 95/98/98SE/Me';
      end;
      end;
end;

解决方案 »

  1.   

    其它上面的就可以了。type 
      TOSVersion = (osUnknown, os95, os95OSR2, os98, os98SE, osNT3, osNT4, os2K, osME,osXP);   Function  IsNT(var OS:string): boolean;//判断是否是NT系统 
      Function  GetOS :TOSVersion;           //获得操作系统 //获取操作系统 
    function GetOS; 
    var 
      OS :TOSVersionInfo; 
    begin 
      ZeroMemory(@OS,SizeOf(OS)); 
      OS.dwOSVersionInfoSize:=SizeOf(OS); 
      GetVersionEx(OS); 
      Result:=osUnknown; 
      if OS.dwPlatformId=VER_PLATFORM_WIN32_NT then 
        begin 
          case OS.dwMajorVersion of 
            3: Result:=osNT3; 
            4: Result:=osNT4; 
            5: begin 
                 if OS.dwMinorVersion>=1 then 
                   Result:=osXP 
                 else 
                   Result:=os2K; 
               end; 
          end; 
        end 
      else 
        begin 
          if (OS.dwMajorVersion=4) and (OS.dwMinorVersion=0) then 
            begin 
              Result:=os95; 
              if (Trim(OS.szCSDVersion)='B') then 
                Result:=os95OSR2; 
            end 
          else 
            if (OS.dwMajorVersion=4) and (OS.dwMinorVersion=10) then 
              begin 
                Result:=os98; 
                if (Trim(OS.szCSDVersion)='A') then 
                  Result:=os98SE; 
              end 
            else 
              if (OS.dwMajorVersion=4) and (OS.dwMinorVersion=90) then 
                Result:=osME; 
        end; 
    end; //判断是否时NT系统 
    function IsNT(var OS:string): boolean; 
    var 
      OSVI :TOSVersion; 
    begin 
      OS:='不知道'; 
      OSVI:=GetOs; 
      if OSVI=osNT3 
        then OS:='Window NT3'; 
      if OSVI=OSNT4 
        then OS:='Window NT4'; 
      if OSVI=os2K 
        then OS:='Winodw 2000'; 
      if OSVI=os95 
        then OS:='Window 95'; 
      if OSVI=os95OSR2 
        then OS:='Window 97'; 
      if OSVI=os98 
        then OS:='Winodw 98'; 
      if OSVI=os98SE 
        then OS:='Winodw 98SE'; 
      if OSVI=osME 
        then OS:='Winodw ME'; 
      Result:=GetOS in [osNT3,osNT4,os2K,osXP]; 
    end; 
      

  2.   

    简单的这样也可以function isWin98: Boolean;
    begin
      result := true;
      if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
        exit
      else
        if Win32Platform = VER_PLATFORM_WIN32_NT then
          result := false;
    end;
      

  3.   

    USES段加入下面的内容uses Windows;
      

  4.   

    uses Windows;加了的,
    谢谢,按zsy_good(只要坚定不移的走下去,那一定会成功)的可以了不过还想问一下,这句又是错在哪?
    怎么按书上的敲代码,运行都通不过:({定时关机函数,各参数的意义如下
    computer:计算机名;Msg:显示的提示信息;
    Time:时间延迟;force:是否强制关机;
    Reboot:是否重启动}
    function TimedShutDown(Computer:string;Msg:string;Time:word;force:boolean;
    Reboot:Boolean):Boolean;
    var
       rl:Cardinal;
       hToken:cardinal;
       tkp:TOKEN_PRVILEGES;            //这里就通不过了
    begin
       {获得用户关机特权,仅对Windows NT/2000/XP}
       OpenProcessToken(GetCurrentProcess,TOKEN_ASJUST_PRIVILEGES or TOKEN_QUERY,hToken);
       if LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.privieges[0].Luid) then
       begin
          tkp.privileges[0].attributes:=SE_PRIVILEGE_ENABLED;
          tkp.privilegeCount:=1;
          AdjustTokenPrivileges(hToken,False,tkp,0,nil,rl);
       end;
       result:=InitiateSystemShutdown(PChar(Computer),Pchar(Msg),Time,Fore,Reboot)
    end;
      

  5.   

    你的代码里有些地方写错了!编译不过去的!这样就没错了:
      function GetOperatingSystem: string;
      var
        osVerInfo: TOSVersionInfo;     //就这句运行就通不过了
      begin
         result:='';
         osverInfo.dwOsVersionInfoSize := SizeOf(TOSVersionInfo);
         if GetVersionEx(osVerInfo) then
            case osVerInfo.dwPlatformId of
              VER_PLATFORM_WIN32_NT:
              begin
                 result:='Windows NT/2000/XP'
              end;
              VER_PLATFORM_WIN32_WINDOWS:
              begin
                 Result:='Windows 95/98/98SE/Me';
              end;
            end;
      end;
      

  6.   

    哦,居然把var看成它一部分了,呵呵
      

  7.   

    还有,能否帮我看看上面那一段,怎么在
    tkp:TOKEN_PRVILEGES;  就通不过了
      

  8.   

    大力好久没搞delphi了!
    555555.5.55555.5.5555
    MM大力只能帮你up了!
      

  9.   

    TOKEN_PRIVILEGES not TOKEN_PRVILEGES