问题如下:网上关机、注销、重启代码有两种思路,第一种是:调用cmd命令中的,shutdown -l / -r /-s -t 0;(这个方法有严重缺陷,必须是管理员才能运行,如果是普通用户,则无法执行,所以我不采用这个方法了。)第二种方法:调用ExitWindowsEx 函数 Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long 声明了一下就可以了。
 但是对于第二种调用api的方法中,网上好多例子里都OpenProcessToken、LookupPrivilegeValue、
 AdjustTokenPrivileges 提权,为什么要提权啊?? 我尝试过了,无论在普通用户权限还是管理员权限下,无需提权就可以成功关机。。直接调用 ExitWindowsEx 函数就可以了啊。难道他们的代码多此一举???

解决方案 »

  1.   

    ExitWindowsEx就可以了。
    对于桌面用户来说。
      

  2.   

    InitiateSystemShutdown
    有时候ExitWindowsEx都不管用(曾经想在一个asp的页面上调用一个dll来关机,用ExitWindowsEx不行)
      

  3.   


    敢问楼主是什么操作系统?如果我没记错的话,单独使用 ExitWindowsEx 函数进行关机,只针对于如 Win98/Me/NT4 及以下的操作系统是可以的;
    而 Win2K(NT5) 及以上的都需要用“OpenProcessToken、LookupPrivilegeValue、AdjustTokenPrivileges 提权”,否则就关不成!
      

  4.   

    我的番茄花园的xp sp2 可能不是原装版本导致的吧  ,这个问题昨晚百度一个人已经回答了,谢谢你了啊。