请问大师,怎样在delphi中退出系统,关闭计算机。(或拒绝执行另外一个执行程序。)

解决方案 »

  1.   

    BOOL ExitWindowsEx(
      UINT uFlags,       // shutdown operation
      DWORD dwReserved   // reserved
    );
    Parameters
    uFlags 
    [in] Specifies the type of shutdown. This parameter must include one of the following values. Value Meaning 
    EWX_LOGOFF Shuts down all processes running in the security context of the process that called the ExitWindowsEx function. Then it logs the user off. 
    EWX_POWEROFF Shuts down the system and turns off the power. The system must support the power-off feature. 
    Windows NT/2000: The calling process must have the SE_SHUTDOWN_NAME privilege. For more information, see the following Res section. 
     
    EWX_REBOOT Shuts down the system and then restarts the system. 
    Windows NT/2000: The calling process must have the SE_SHUTDOWN_NAME privilege. For more information, see the following Res section. 
     
    EWX_SHUTDOWN Shuts down the system to a point at which it is safe to turn off the power. All file buffers have been flushed to disk, and all running processes have stopped. 
    Windows NT/2000: The calling process must have the SE_SHUTDOWN_NAME privilege. For more information, see the following Res section. 
     
    This parameter can optionally include the following values. Value Meaning 
    EWX_FORCE Forces processes to terminate. When this flag is set, the system does not send the WM_QUERYENDSESSION and WM_ENDSESSION messages. This can cause the applications to lose data. Therefore, you should only use this flag in an emergency. 
    EWX_FORCEIFHUNG Windows 2000: Forces processes to terminate if they do not respond to the WM_QUERYENDSESSION or WM_ENDSESSION message. This flag is ignored if EWX_FORCE is used. dwReserved 
    [in] Reserved; this parameter is ignored. 
    Return Values
    If the function succeeds, the return value is nonzero.If the function fails, the return value is zero. To get extended error information, call GetLastError. Res
    The ExitWindowsEx function returns as soon as it has initiated the shutdown. The shutdown or logoff then proceeds asynchronously. During a shutdown or log-off operation, applications that are shut down are allowed a specific amount of time to respond to the shutdown request. If the time expires, the system displays a dialog box that allows the user to forcibly shut down the application, to retry the shutdown, or to cancel the shutdown request. If the EWX_FORCE value is specified, the system always forces applications to close and does not display the dialog box. Windows 2000: If the EWX_FORCEIFHUNG value is specified, the system forces hung applications to close and does not display the dialog box. Windows 95/98: Because of the design of the shell, calling ExitWindowsEx with EWX_FORCE fails to completely log off the user (the system terminates the applications and displays the Enter Windows Password dialog box, however, the user's desktop remains.) To log off the user forcibly, terminate the Explorer process before calling ExitWindowsEx with EWX_LOGOFF and EWX_FORCE. Console processes receive a separate notification message, CTRL_SHUTDOWN_EVENT or CTRL_LOGOFF_EVENT, as the situation warrants. A console process routes these messages to its HandlerRoutine function. ExitWindowsEx sends these notification messages asynchronously; thus, an application cannot assume that the console notification messages have been handled when a call to ExitWindowsEx returns. Windows NT/2000: To shut down or restart the system, the calling process must use the AdjustTokenPrivileges function to enable the SE_SHUTDOWN_NAME privilege. For more information about security privileges, see Privileges. Windows 95/98: ExitWindowEx does not work from a console application, as it does on Windows NT/Windows 2000. Requirements 
      Windows NT/2000: Requires Windows NT 3.1 or later.
      Windows 95/98: Requires Windows 95 or later.
      Header: Declared in Winuser.h; include Windows.h.
      Library: Use User32.lib.See Also
    System Shutdown Overview, System Shutdown Functions, AdjustTokenPrivileges, HandlerRoutine 
      

  2.   

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

  3.   

    在NT环境中,要先用
    AdjustTokenPrivileges
    设置进程级别
      

  4.   

    在98,Nt都行的函数
    procedure reboot_computer;
    var
      hToken:THandle;
      tkp : TOKEN_PRIVILEGES;
      ReturnLength : DWord;
    begin
      if (not OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_ALL_ACCESS or TOKEN_QUERY, hToken))then
      begin
        application.Terminate;
      end;
      LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid);
      tkp.PrivilegeCount := 1;
      tkp.Privileges[0].Attributes :=SE_PRIVILEGE_ENABLED;
      ReturnLength :=0;
      AdjustTokenPrivileges(hToken, FALSE, tkp, 0,nil,ReturnLength);
      if (GetLastError() <> ERROR_SUCCESS) then
      begin
        application.Terminate;
      end;
      if (not ExitWindowsEx(EWX_SHUTDOWN, 0)) then
      begin
        application.Terminate;
      end;
    end;
      

  5.   

    感谢!
    楼上的都是高人,在下汗颜。给个简单的答案好吗?期盼ing...
      

  6.   

    google.com
    搜索
    AdjustTokenPrivileges你就可以找到适用2000,98,nt的关机,重起的代码。
      

  7.   

    再加上一个delphi作为关键词,呵呵。google,爽。
      

  8.   

    例如:
    //强迫中止没有响应的进程 
    uses shellapi
    procedure TForm1.Button4Click(Sender: TObject);
    begin
    ExitWindowsEx (EWX_LOGOFF,0);
    end;