关机函数?

lkinzaghi 2005-03-29 10:29:29
请问让系统(windows)关机的函数是什么?多谢!
...全文
171 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xgwx 2005-05-13
  • 打赏
  • 举报
回复
学习
bobob 2005-03-30
  • 打赏
  • 举报
回复
#include <windows.h>
int main()
{
OSVERSIONINFO osv;
osv.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osv);
if(osv.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
HANDLE hProcess,hToken;
TOKEN_PRIVILEGES Privileges;
LUID luid;
//获得当前的进程号
hProcess=GetCurrentProcess();
//获得进程的存取令牌. 第二个参数为TOKEN_ADJUST_PRIVILEGERS时,
//获得可调整的存取令.
OpenProcessToken(hProcess,TOKEN_ADJUST_PRIVILEGES,&hToken);
Privileges.PrivilegeCount=1;
//查找关机权限的ID号
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
Privileges.Privileges[0].Luid=luid;
Privileges.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
//调整存取权限, 如果不成功, 本函数返回 -1
if (!AdjustTokenPrivileges(hToken,FALSE,&Privileges,NULL,NULL,NULL))
return -1;
}

ExitWindowsEx(EWX_SHUTDOWN|EWX_POWEROFF,0);

return 0;

}
idAnts 2005-03-30
  • 打赏
  • 举报
回复
ExitWindowsEx
98下直接用,XP下必须提升权限。
BOOL MySystemShutdown()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;

// Get a token for this process.

if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return( FALSE );

// Get the LUID for the 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 the shutdown privilege for this process.

AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);

if (GetLastError() != ERROR_SUCCESS)
return FALSE;

// Shut down the system and force all applications to close.

if (!ExitWindowsEx(EWX_POWEROFF | EWX_FORCE, 0)) //参数在这里设置。
return FALSE;

return TRUE;
}
oyljerry 2005-03-30
  • 打赏
  • 举报
回复
ExitWindowEx关机
AdjustTokenPrivileges提升权限

2,643

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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