ExitWindowsEx只是退出windows,怎么才能退出的时候顺便关掉电源呢?

general_cigarette 2002-09-05 12:33:39
ExitWindowsEx(EWX_SHUTDOWN, 0);
执行后,仅仅退出操作系统,而不能断电。
...全文
81 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
caigzhi 2002-09-05
  • 打赏
  • 举报
回复
不好意思,上面是重起,把最后一句改成:ExitWindowsEx(EWX_SHUTDOWN, 0);
caigzhi 2002-09-05
  • 打赏
  • 举报
回复
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
if (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_REBOOT, 0);
}
general_cigarette 2002-09-05
  • 打赏
  • 举报
回复
呵呵,谢谢,应该用ewx_poweroff参数。
sjzxyg 2002-09-05
  • 打赏
  • 举报
回复
ExitWindowsEx(EWX_SHUTDOWN|EWX_POWEROFF, 0);
general_cigarette 2002-09-05
  • 打赏
  • 举报
回复
OSVERSIONINFO osvi;

osvi.dwOSVersionInfoSize = sizeof(osvi);
GetVersionEx(&osvi);

if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
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);

CloseHandle(hToken);
}

//ExitWindowsEx(EWX_REBOOT, 0); // reboot the computer
ExitWindowsEx(EWX_SHUTDOWN, 0); // shut down the computer
//ExitWindowsEx(EWX_POWEROFF, 0); // turn off the power
return 0;

这是我从csdn上拷贝的,就是不能关电源,但是我用操作系统关机的话,就能关电源。
HuWenjin 2002-09-05
  • 打赏
  • 举报
回复
上面两位说的是在NT下用的
在Win98 WinMe下就用ExitWindowsEx(EWX_SHUTDOWN, 0);就可以了

如果要在98能用,在NT下能用则只用看一下
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
//一定是在98下!
ExitWindowEx(EWX_SHUTDOWN,0);
return;
}
...
..
做NT下的操作
..


使用上述代码后,您的机器电源没有关这可是个大问题
1。你机器的电源坏了
2。您用的的AT电源不是ATX电源,不能软件关机
saucer 2002-09-05
  • 打赏
  • 举报
回复
from
http://groups.google.com/groups?selm=366E6340.9171611A%40NOisisSPAM.co.za&oe=UTF-8&output=gplain


void rctSystemShutdown( void )
{
HANDLE hToken; // handle to process token
TOKEN_PRIVILEGES tkp; // token structure
char* DialogMsg = "Rebooting - Critical Failure";

// Get the current process token handle so we can get shutdown
privilege.
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
return;
}

// Get the Locally Unique ID for 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 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)
{
return;
}


//-- Initiate the shutdown
InitiateSystemShutdown(
NULL, // machine name (own machine only)
DialogMsg, // shutdown message
10, // timeout delay of 10 sec
TRUE, // force applications closed
FALSE ); // reboot immediately shutdown is done

//-- Disable shutdown privilege again
tkp.Privileges[0].Attributes = 0;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL,
0);

} // end rctSystemShutdown

16,471

社区成员

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

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

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