没人知道?win2000下的也可以,就是参数怎么填的问题

解决方案 »

  1.   

    ExitWindows(1,1);
    在98/ME下都可以正常关机,在2000和xp下没有试过,应该也行的,别忘了给我加分
      

  2.   

    这样写应该是不行的,我查msdn了,里面说98和2000是不一样的,但是具体
    我看不太懂
      

  3.   

    在98下直接调用这个函数就可以了,但是在2000下先要取得关机的权限,如下代码在2000下,没什么问题。我直接在源码中copy,可能有些多余的
    if (!OpenProcessToken(GetCurrentProcess(),  TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 
        MessageBox (NULL, TEXT("OpenProcessToken") ,
      TEXT("Error"),MB_ICONERROR); 
     
    // 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); 
    // Cannot test the return value of AdjustTokenPrivileges. 
    if (GetLastError() != ERROR_SUCCESS) 
    MessageBox (NULL, TEXT("AdjustTokenPrivileges") ,
       TEXT("Error"),MB_ICONERROR); 
    // Shut down the system and force all applications to close. 
    if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_POWEROFF, 0)) 
    MessageBox (NULL, TEXT("ExitWindowsEx") ,
       TEXT("Error"),MB_ICONERROR);