如何写一个自动关机程序?如果不知道,就给我一个关机的函数也可。

解决方案 »

  1.   

    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;
      

  2.   

    VB声明】
      Private Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long【说明】
      退出windows,并用特定的选项重新启动 【返回值】
      Long,非零表示成功,零表示失败。会设置GetLastError 【备注】
      这个函数调用后会立刻返回,系统关闭过程是在后台进行的。注意先中止自己的应用程序,使关闭过程更显平顺。当然,您的进程必须有足够的优先权,否则也不能执行这种操作【参数表】
      uFlags ---------  Long,指定下述一个或多个标志(用OR运算符合并到一起)
      EWX_FORCE
      强迫中止没有响应的进程
      EWX_LOGOFF
      中止进程,然后注销
      EWX_SHUTDOWN
      关掉系统电源(如果可能的话,ATX电源就可以)
      EWX_REBOOT
      重新引导系统
      EWX_SHUTDOWN
      关闭系统  dwReserved -----  Long,保留,设为零
      

  3.   

    注意:exitwindowsex()在WINNT系列下要提昇權限.
      

  4.   

    ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF,0)
    -------------------------------------------------------
    试过了,应该没错!