C实现关机
说明:下面文章都是居于杨中科的C语言可以干大事系列视频的。用C写一些小的桌面应用程序。主要是锻炼编程的思维。
.在Windows2000一下的操作系统版本,直接就可以调用Windows自带的API,即系统关机函数。BOOL ExitWindowsEx(UINT uFlags,DWORD dwReason);uFlags的值:
EWX_LOGOFF,0,注销
EWX_SHUTDOWN,1,关机
EWX_REBOOT,2,重启
EWX_POWEROFF,8,断开电源
EWX_FORCE,4,强制终止所有程序
EWX_FORCEIFHUNG,16,强制终止位响应的程序
后面的dwReason一般不指定,可能是历史遗留的问题吧。我们在使用的时候直接将其置为 0就ok了。
2.但是在Windows2000以上包括Windows2000的系统,如果只是点用此函数,只能实现注销的功能,其余的功能还需要在程序中写代码来获取相应的权限:在Main_OnInitDialog函数中,即窗口初始化的时候取得相应的关机权限,代码如下:
我将其抽象为一个函数吧GetPrivilege()
{
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.
//
// Add initializing code here
//
}
由于本人水平有限,错误很多,请各位大侠热心赐教,谢谢!可以给我留言。