用InitateSystemShutdown(...)不能自动切断电源,请问有什么方法可以实现自动切断电源的关机。
解决方案 »
- 还是视频添加字幕的问题,上次的可能没说清楚,了解的进来帮忙看看
- 程序退出时CStatic::OnDestroy()这句过不去是怎么回事.
- 如何判断相对路径下的文件是否存在
- 请问一下是怎么知道dll导出函数的原型呢?
- 在Win32 Application中怎么随时改变窗口中显示的文字,不要控件,要直接写,像Hello world一样
- 高手请进!!!
- 麻烦给看一下这段代码是怎么用的?删除自己的程序.
- 我在windows2000下装了softice,可按下ctrl+D时,鼠标不动,桌面也不显示其它的东西
- 读取数据库数据出错!
- 怎样知道某个程序的运行时间?
- 这样发送一个键盘被按下的消息啊?(在线等,急...)
- ' ~ ~ ~ . 风
HANDLE hProcess,hToken;
TOKEN_PRIVILEGES Privileges;
LUID luid;
hProcess=GetCurrentProcess();//Open Process Token
OpenProcessToken(hProcess,TOKEN_ADJUST_PRIVILEGES,&hToken);
Privileges.PrivilegeCount=1;
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
Privileges.Privileges[0].Luid=luid;
Privileges.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
//Adjust the Privileges
AdjustTokenPrivileges(hToken,FALSE,&Privileges,NULL,NULL,NULL);
//shutdown
//注意此处我设为强制关机,所以注意要保存当前数据
ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE|EWX_POWEROFF,NULL);注意ExitWindowsEx的参数,EWX_POWEROFF,呵呵
// 能否编程实现NT系统的关机并切断电源
// http://www.china-askpro.com/msg32/qa13.shtml
{
MessageBox("OpenProcessToken failed!");
} 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); //调整获得的权限
if (GetLastError() != ERROR_SUCCESS)
{
MessageBox("切换系统级权限失败!");
} fResult =InitiateSystemShutdown(
NULL, // 要关的计算机用户名
"关机时间已到,WINDOWS将在上面的时间内关机,请做好保存工作!", // 显示的消息
10, // 关机所需的时间
TRUE, // ask user to close apps
FALSE); //设为TRUE为重起,设为FALSE为关机
if(!fResult)
{
MessageBox("初始化系统关机失败!");
} tkp.Privileges[0].Attributes = 0;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES) NULL, 0); if (GetLastError() != ERROR_SUCCESS)
{
MessageBox("AdjustTokenPrivileges disable failed.");
} ExitWindowsEx(EWX_SHUTDOWN,0);