大家好:
    我想求得在win98和win2000下实现重新启动的功能,但不知道怎样实现。望大家指点,因急于实现这个功能,最好附上详细代码。
    谢谢!
                                         王振亚
                                       2003.10.27

解决方案 »

  1.   

    98:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
         ExitWindowsEx(EWX_REBOOT or EWX_POWEROFF,0);
    end;2k:
    procedure TForm1.Button2Click(Sender: TObject);
    var
            st : SYSTEMTIME;
            hToken : THANDLE;
            tkp : TOKEN_PRIVILEGES;
            rr : Dword;
    begin
            OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken);
            LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid);
            tkp.PrivilegeCount := 1;
            tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
            AdjustTokenPrivileges(hToken, FALSE, tkp, 0,nil,rr);
            ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF, 0)
    end;
      

  2.   

    感谢楼主和上楼,但怎么来判断这个系统是98还是2K或XP呢??谢谢
      

  3.   

    获取windows版本
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
      _OSVERSIONINFOA = record
       dwOSVersionInfoSize: DWORD;
       dwMajorVersion: DWORD;
       dwMinorVersion: DWORD;
       dwBuildNumber: DWORD;
       dwPlatformId: DWORD;
       szCSDVersion: array[0..127] of AnsiChar;
      end;  _OSVERSIONINFOW = record
        dwOSVersionInfoSize: DWORD;
        dwMajorVersion: DWORD;
        dwMinorVersion: DWORD;
        dwBuildNumber: DWORD;
        dwPlatformId: DWORD;
        szCSDVersion: array[0..127] of WideChar;
      end;
      _OSVERSIONINFO = _OSVERSIONINFOA;var
      VersionInfo: TOSVersionInfo;
        Platform : String;
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      VersionInfo.dwOSVersionInfoSize := SizeOf(VersionInfo);
        GetVersionEx(VersionInfo);
        Platform := 'Windows ';
        With VersionInfo Do
        Begin
          Case dwPlatformid of
            0 : Platform := Platform + IntToStr(dwMajorVersion)
                + '.'+ IntToStr(VersionInfo.dwMinorVersion);  // 3.xx        1 : Platform := Platform + IntToStr(dwMajorVersion)
                + '.'+ IntToStr(VersionInfo.dwMinorVersion); //W95/98
            2 : Platform := Platform + 'NT ' + IntToStr(dwMajorVersion)
                + '.'+ IntToStr(VersionInfo.dwMinorVersion); //NT 3 Or Higher       End;
          Platform := Platform + ' BuildNumber: ' + IntToStr(dwBuildNumber);
        End;
    end;end.