Win2000下怎样实现关机

confideman2000 2003-11-14 02:23:09
我想在软件中设置一个关机命令,关闭Win2000,怎样实现???
...全文
32 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Alaex 2003-11-14
  • 打赏
  • 举报
回复
说句实话,CSDN提供的工具不怎么好用.
zhucde 2003-11-14
  • 打赏
  • 举报
回复
二楼和四楼的答案是一样的,有必要吗?
况且在我给出的那个地址里已经有了解释,
下面的就没有必要再回复同样答案了.

建议大家还是多利用CSDN提供的工具
sujiayi 2003-11-14
  • 打赏
  • 举报
回复
TOKEN_PRIVILEGES tkp;
HANDLE hToken;

if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
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("AdjustTokenPrivileges enable failed!");
}

fResult =InitiateSystemShutdown(
NULL, // 要关的计算机用户名,可在局域网网中关掉对方的机器,NULL表示关本机
"由于系统不稳定,WINDOWS将在上面的时间内关机,请做好保存工作!", // 显示的消息
10, // 关机所需的时间
TRUE,
TRUE); //设为TRUE为重起,设为FALSE为关机

if(!fResult)
{
MessageBox("InitiateSystemShutdown failed.");
}

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); //开始关机
hq1978 2003-11-14
  • 打赏
  • 举报
回复
ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE|EWX_POWEROFF,NULL);
wuxfBrave 2003-11-14
  • 打赏
  • 举报
回复
//提升进程的权限,lpszPrivilegeName表示进程的权限名 取值请参看winnt.h定义
BOOL CSystem:: EnablePrivilege(LPCTSTR lpszPrivilegeName, BOOL bEnable)
{
HANDLE hToken;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES |
TOKEN_QUERY | TOKEN_READ, &hToken))
return FALSE;

LUID luid;
if (!LookupPrivilegeValue(NULL, lpszPrivilegeName, &luid))
return TRUE;

TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = (bEnable) ? SE_PRIVILEGE_ENABLED : 0;

AdjustTokenPrivileges(hToken, FALSE, &tp, NULL, NULL, NULL);

CloseHandle(hToken);

return (GetLastError() == ERROR_SUCCESS);
}

BOOL CSystem::ExitWindowsEx(UINT uFlags, DWORD dwReasons)
{
//在Win2000下我们需要调整进程的权限
if (!IsWindows98())
{
if (!EnablePrivilege(SE_SHUTDOWN_NAME, TRUE))
ASSERT(FALSE);
}

InitiateSystemShutdown(NULL, "系统将会在上面的时间内关机,请做好保存工作!",
10, TRUE, FALSE);

return ExitWindowsEx(uFlags, dwReasons); //关机*/
}

zhucde 2003-11-14
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2365/2365863.xml?temp=.5838129

其中有关于关机的详细代码.

大家提问之前建议先去精华区,FAQ看看,
然后再搜索一下,
没有再提问

16,472

社区成员

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

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

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