@@@@@@@@@@@@@@@@在DELPHI中用什么可以关闭计算机###############

解决方案 »

  1.   

    去查一下MS的SDK中API的资料,会有更为详细的介绍!
    ExitWindows或者ExitWindowsEx
      

  2.   

    我操作系统是2000
    我怎么用ExitWindowsEx(EWX_SHUTDOWN, 0);关不掉机子?
      

  3.   

    win2000需要先取得系统的控制权才能关机的
      

  4.   

    使用Windows API函数ExitWindowsEx可以关闭Windows。函数如下:
    BOOL ExitWindowsEx(
    UINT uFlags, // 关闭操作
    DWORD dwReserved // 保留
    ) ;
    其中参数uFlags的取值及其含义:
    • EWX_FORCE 在紧急情况下强制关机。
    • EWX_LOGOFF 以其他用户身份登录。
    • EWX_POWEROFF 关闭系统并关闭电源。
    • EWX_REBOOT 重新启动。
    • EWX_HUTDOWN 安全地关机。
      

  5.   

    何为控制权 超级用户  ADMINISTRATOR?
      

  6.   

    我用ExitWindowsEx(EWX_POWEROFF,0) 光不掉WIN2000我写的有错吗?
      

  7.   

    procedure ExitWin2000(ewx: integer);
      // Win2000关机 (1为重起,2是关机)
    procedure ExitWin9895(EWX: integer);
      // Win9598关机 (EWX_FORCE, EWX_LOGOFF, EWX_POWEROFF, EWX_REBOOT, EWX_SHUTDOWN)
    procedure ExitWinSys(EWX: integer);
      // 退出操作系统(Win2000 or Win9895)包括重起(EWX_REBOOT)、关机(EWX_SHUTDOWN)
    procedure ExitWin2000(ewx: integer);
    var
      hToken: THANDLE;
      hProc: THANDLE;
      mLUID: TLargeInteger;
      mPriv, mNewPriv: TOKEN_PRIVILEGES;
      mBufferLength: DWord;
    begin
      if not (ewx in [1, 2]) then
        exit;
      hProc := GetCurrentProcess();
      OpenProcessToken(hProc, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hToken);
      LookupPrivilegeValue('', 'SeShutdownPrivilege', mLUID);
      mPriv.PrivilegeCount := 1;
      mPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
      mPriv.Privileges[0].Luid := mLUID;
      AdjustTokenPrivileges(hToken, False, mPriv, (4 + (12 * mPriv.PrivilegeCount)), mNewPriv, mBufferLength);
      case ewx of
        1: ExitWindowsEx(EWX_FORCE + EWX_REBOOT, 0);
        2: ExitWindowsEx(EWX_FORCE + EWX_POWEROFF, 0);
      end;
    end;procedure ExitWin9895(EWX: integer);
    begin
      ExitWindowsEx(EWX, 0);
    end;procedure ExitWinSys(EWX: integer);
    begin
      case GetOSVersion of
        SYS2K:
        case EWX of
          EWX_REBOOT: ExitWin2000(1);
          EWX_SHUTDOWN: ExitWin2000(2);
        end;
        SYS98, SYS95: ExitWin9895(EWX);
      end;
    end;
      

  8.   

    interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);  private
        { Private declarations }
        procedure AdjustToken;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.AdjustToken();
    var
      hdlProcessHandle : Cardinal;
      hdlTokenHandle : Cardinal;
      tmpLuid : Int64;
      tkpPrivilegeCount : Int64;
      tkp : TOKEN_PRIVILEGES;
      tkpNewButIgnored : TOKEN_PRIVILEGES;
      lBufferNeeded : Cardinal;
      Privilege : array[0..0] of _LUID_AND_ATTRIBUTES;
    begin
             hdlProcessHandle := GetCurrentProcess;
             OpenProcessToken(hdlProcessHandle,
                             (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY),
                              hdlTokenHandle);         // Get the LUID for shutdown privilege.
             LookupPrivilegeValue('', 'SeShutdownPrivilege', tmpLuid);
             Privilege[0].Luid := tmpLuid;
             Privilege[0].Attributes := SE_PRIVILEGE_ENABLED;
             tkp.PrivilegeCount := 1;   // One privilege to set
             tkp.Privileges[0] := Privilege[0];
             // Enable the shutdown privilege in the access token of this
             // process.
             AdjustTokenPrivileges(hdlTokenHandle,
                                   False,
                                   tkp,
                                   Sizeof(tkpNewButIgnored),
                                   tkpNewButIgnored,
                                   lBufferNeeded); end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
         AdjustToken;
         ExitWindowsEx((EWX_SHUTDOWN), $FFFF);
    end;end.
    以上程序可以关机,已经运行过,请给分吧
      

  9.   

    谢谢各位大哥 to:lzf1010(深宇) ExitWinSys(EWX: integer);不好用,找不到 
                     GetOSVersion;to:millsyys()  关是能关  但是出现 ‘现在你可以安全关闭计算机了’分你两平分 不会打我吧  总之谢谢了!!!!
      

  10.   

    TO:LZF1010
      我试过你的,你的也可以。
      

  11.   

    如果是我们俩每人50分,我没意见,因为我试过他的,是可以关机,你如果不想出现那行字,可以将ExitWindowsEx((EWX_SHUTDOWN), $FFFF);中的EWX_SHUTDOWN改为EWX_FORCE + EWX_POWEROFF就可以了。