ExitWindowsEx(EWX_SHUTDOWN,0)关机并关闭电源的问题。

dreamriver 2002-01-14 08:59:30
我的机器是支持POWEROFF的,在MSDN中讲到如果系统支持POWEROFF,那么用SHUTDOWN关机时会自动关闭电源,但我的WIN2000在用系统的关机时可以关闭电源,我在程序员用SHUTDOWN关机时则并不会关闭电源,而是出现“你可以安全地关闭计算机了”,请问是为什么?还有有没有什么办法让我在关机时可以关闭电源呢?
谢谢各位!
...全文
264 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dreamriver 2002-01-16
  • 打赏
  • 举报
回复
skywolfY(莫愁) 
我在WIN2000不支持POWEROFF的机器上用ExitWindowsEx(EWX_SHUTDOWN|EWX_POWEROFF,0)和用ExitWindowsEx(EWX_POWEROFF,0)都会出现关机重新启动。
skywolfY 2002-01-14
  • 打赏
  • 举报
回复
应用程序的特权和登录的权限不一样,如果上述几人的条件都符合,应该没问题。
::ExitWindowsEx(EWX_SHUTDOWN|EWX_POWEROFF,0);
还可以参考
::InitiatesystemShutdown(NULL,"关机",60,false,false);

如果还不行,本人关注
dreamriver 2002-01-14
  • 打赏
  • 举报
回复
谢谢hustwjz(一个好人)、skywolfY(莫愁) :
我是以Administrator登录的,已经进行过权限判断,肯定有SE_SHUTDOWN_NAME,关机操作是可以执行的,但就是不会关闭电源,要自己去关闭电源,不知道为什么?
dsc 2002-01-14
  • 打赏
  • 举报
回复



ExitWindowsEx(EWX_SHUTDOWN | EWX_POWEROFF, 0);

请注意第一个参数后要有 EWX_POWEROFF 才能关闭电源



hustwjz 2002-01-14
  • 打赏
  • 举报
回复
Windows NT/2000 or later: The calling process must have the SE_SHUTDOWN_NAME privilege. For more information, see the following Remarks section.
skywolfY 2002-01-14
  • 打赏
  • 举报
回复
static HANDLE hToken;
static TOKEN_PRIVILEGES tp;
static LUID luid;
if(::OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
{
::LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
tp.PrivilegeCount=1;
tp.Privileges[0].Luid=luid;
tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
::AdjustTokenPrivileges(hToken,FALSE,&tp,
sizeof(TOKEN_PRIVILEGES),NULL,NULL);
}
这段代码有吗?
hustwjz 2002-01-14
  • 打赏
  • 举报
回复
Windows NT/2000 or later: The calling process must have the SE_SHUTDOWN_NAME privilege. For more information, see the following Remarks section.
dreamriver 2002-01-14
  • 打赏
  • 举报
回复
没人知道吗?
VB关机程序--包括注销、重启、关机。 附:(源码) Option Explicit Private Declare Function GetCurrentProcess Lib "kernel32" () As Long Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long Private Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long Const TOKEN_ADJUST_PRIVILEGES = &H20 Const TOKEN_QUERY = &H8 Const SE_PRIVILEGE_ENABLED = &H2 Private Type LUID UsedPart As Long IgnoredForNowHigh32BitPart As Long End Type Private Type TOKEN_PRIVILEGES PrivilegeCount As Long TheLuid As LUID Attributes As Long End Type Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long Const HELP_CONTENTS = &H3& Const EWX_WAIT = 16 Const EWX_REBOOT = 2 '重起 Const EWX_LOGOFF = 0 '注销 Const EWX_FORCE = 4 '终止没有响应的进程 Const EWX_SHUTDOWN = 8 '关闭电源 Private Sub Command1_Click() ExitWindowsEx EWX_REBOOT, 0 End Sub Private Sub Command2_Click() ExitWindowsEx EWX_FORCE Or EWX_SHUTDOWN, 0 End Sub Private Sub Command3_Click() ExitWindowsEx EWX_LOGOFF, 0 End Sub Private Sub Command4_Click() End End Sub Private Sub Form_Load() Dim hProcessHandle As Long Dim hTokenHandle As Long Dim tmpLuid As LUID Dim tkpNew As TOKEN_PRIVILEGES Dim tkpPrevious As TOKEN_PRIVILEGES Dim lBufferNeeded As Long '获取当前进程的一个伪句柄 hProcessHandle = GetCurrentProcess() OpenProcessToken hProcessHandle, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hTokenHandle LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid tkpNew.PrivilegeCount = 1 tkpNew.TheLuid = tmpLuid tkpNew.Attributes = SE_PRIVILEGE_ENABLED lBufferNeeded = 0 '允许当前应用程序有关闭操作系统的权限 AdjustTokenPrivileges hTokenHandle, False, tkpNew, Len(tkpPrevious), tkpPrevious, lBufferNeeded End Sub

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧