计算机重起。是不是。调用ExitWindowsEx(EWX_REBOOT,0);函数。关闭。调用ExitWindowsEx(EWX_FORCE,0);ExitWindowEx(EWX_SHUTDOWN,0);但是现在点重起不起作用。点关闭成了,注销了。不知道怎么回事,请问谁知道是怎么回事?

解决方案 »

  1.   

    是这个函数,MSDN里有详细解释,请参阅:ExitWindowsEx
    The ExitWindowsEx function either logs off the current user, shuts down the system, or shuts down and restarts the system. It sends the WM_QUERYENDSESSION message to all applications to determine if they can be terminated. BOOL ExitWindowsEx(
      UINT uFlags,       // shutdown operation
      DWORD dwReserved   // reserved
    );
     
    Parameters
    uFlags 
    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: 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: 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: 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 NT 5.0 and later: 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 
    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, callGetLastError. 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. If the EWX_FORCEIFHUNG value is specified, the system forces hung applications to close and does not display the dialog box. 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 functions, which are added and removed by calls to the SetConsoleCtrlHandler 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: To shut down or restart the system, the calling process must use theAdjustTokenPrivileges function to enable the SE_SHUTDOWN_NAME privilege. For more information about security privileges, seePrivileges. Windows 95: ExitWindowEx does not work from a console application, as it does on Windows NT. QuickInfo
      Windows NT: Requires version 3.1 or later.
      Windows: Requires Windows 95 or later.
      Windows CE: Unsupported.
      Header: Declared in winuser.h.
      Import Library: Use user32.lib.如果是NT系统,需要有权限的判断。   //重新启动
       HANDLE            hToken;
       TOKEN_PRIVILEGES  tkp;   if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
       {
          TRACE("OpenProcessToken Failed\n");
          return;
       }   LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);   tkp.PrivilegeCount = 1;
       tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;   AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES)NULL, 0);   if (GetLastError() != ERROR_SUCCESS)
       {
          TRACE("AdjustTokenPrivileges enable Failed\n");
          return;
       }   ExitWindowsEx(EWX_REBOOT | EWX_FORCE, 0);
      

  2.   

    强制重启ExitWindowsEx(EWX_FORCE|EWX_REBOOT,0);
    强制关闭ExitWindowEx(EWX_FORCE|EWX_SHUTDOWN,0);
      

  3.   

    试试这个:
    HANDLE hToken;
    TOKEN_PRIVILEGES tkp;
    OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken);
    LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
    tkp.PrivilegeCount = 1;
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
    ExitWindowsEx(EWX_POWEROFF, 0);
    关闭类型(UINT uFlags)可以是以下几种:  
    EWX_FORCE:强制关闭,Windows不会发送任何消息给正运行的程序,这可能导致数据丢失;  EWX_LOGOFF:关闭所有正在运行的程序,注销当前用户并重新登录;  
    EWX_POWEROFF:关闭Windows并关机,系统必须支持电源管理;  
    EWX_REBOOT:关闭Windows并重新启动;  
    EWX_SHUTDOWN:关闭Windows,缓冲区内的数据将被写入磁盘。
      

  4.   

    关闭还是不行。其他的都行。关闭我的代码是ExitWindowsEx(EWX_FORCE|EWX_SHUTDOWN);ExitWindowsEx(EWX_POWEROFF,0):
    但是不行。还是和注销差不多。不能连机箱电源也关了。
      

  5.   

    试试另个方法:
    WinExec("rundll32.exe shell32.dll,SHExitWindowsEx 1",SW_NORMAL);
      

  6.   

    还是不行  调试后说shell32.dll出错  失去条目SHExitWindowsEx
      

  7.   

    BOOL MySystemShutdown()
    {
       HANDLE hToken; 
       TOKEN_PRIVILEGES tkp; 
     
       // Get a token for this process. 
     
       if (!OpenProcessToken(GetCurrentProcess(), 
            TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 
          return( FALSE ); 
     
       // Get the LUID for the shutdown privilege. 
     
       LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, 
            &tkp.Privileges[0].Luid); 
     
       tkp.PrivilegeCount = 1;  // one privilege to set    
       tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
     
       // Get the shutdown privilege for this process. 
     
       AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, 
            (PTOKEN_PRIVILEGES)NULL, 0); 
     
       if (GetLastError() != ERROR_SUCCESS) 
          return FALSE; 
     
       // Shut down the system and force all applications to close. 
     
       if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0)) 
          return FALSE;    return TRUE;
    }
      

  8.   

    我的是ghost系统。不能重启。有谁能帮帮忙。我用的是ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE,0)
    ExitWindowsEx(EWX_FORCE|POWEROFF,0);
    问题解决马上给分
      

  9.   

    应该是电源管理的问题吧,看看硬件信息中计算机类型是不是ACPI的。