我要实现远程关机。
我用ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE,0L );进行强行关机。
现在遇到:
如果别人用我的共享资料就提示----“已经有一位用户连接到你的计算机,关闭计算机将切断用户用联系,确实要关闭计算机吗?”
到这一步就不行了,必须要用户自己按一下“确定”才能行的。怎么来个更强大的强制关机。
我用ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE,0L );进行强行关机。
现在遇到:
如果别人用我的共享资料就提示----“已经有一位用户连接到你的计算机,关闭计算机将切断用户用联系,确实要关闭计算机吗?”
到这一步就不行了,必须要用户自己按一下“确定”才能行的。怎么来个更强大的强制关机。
INT MyExitSystemFunc(int IsHow)
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
DWORD dwVersion; dwVersion = GetVersion(); //获得Windows NT或Win32的版本号
switch(IsHow)
{
case 0://注销
ExitWindowsEx(EWX_LOGOFF,0);
break; case 1://重新启动
if (dwVersion < 0x80000000)
{// Windows NT系列
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 | EWX_FORCE, 0);
}
else
{//Windows 95系列
ExitWindowsEx(EWX_FORCE | EWX_REBOOT,0);
}
break; case 2://关闭计算机
if (dwVersion < 0x80000000)
{// Windows NT
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_POWEROFF |EWX_FORCE, 0);
}
else
{
ExitWindowsEx(EWX_FORCE | EWX_SHUTDOWN,0);
}
break;
}
return 0;
}
高手指点。
高手指点
TOKEN_PRIVILEGES tkp;
HANDLE hToken;
dwVersion = GetVersion();
if(dwVersion < 0x80000000)
{//NT
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!");
}
BOOL fResult =InitiateSystemShutdown(
"Lf",
"WINDOWS将在上面的时间内关机,请做好保存工作!", // 显示的消息
10, // 关机所需的时间
TRUE,
TRUE); //设为TRUE为重起,设为FALSE为关机
if(!fResult)
{
MessageBox("InitiateSystemShutdown failed.");
}
} else
{//95
ExitWindowsEx(EWX_FORCE | EWX_SHUTDOWN,0);
}