📄 subject_59715.htm
字号:
<p>
序号:59715 发表者:赵灵儿 发表日期:2003-11-10 08:41:26
<br>主题:如何用VC编程实现关机?
<br>内容:在Windows9X/Me中,可以在VC中调用API中的 ::ExitWindowsEx(EWX_SHUTDOWN,0);<BR>来实际关机,但在以NT为核心的Windows2000/xp中就不行了,那么此时又如何关机呢?
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:CDMA2000 回复日期:2003-11-10 09:17:07
<br>内容:单击OK按钮重启动的代码<BR>void CRebootDlg::OnOK() <BR>{<BR> UpdateData();<BR> // TODO: Add extra validation here<BR> if(m_nReboot==0)<BR> {<BR> if(ExitWindowsEx(EWX_REBOOT, 0)) goto Exit;<BR> if(ExitWindowsEx(EWX_REBOOT | EWX_FORCE, 0)) goto Exit;<BR> //因为上面的重起不成功,所以需要调整本进程的特权<BR> HANDLE hToken;<BR> TOKEN_PRIVILEGES tkp;<BR> if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken)) goto Exit;<BR> //获取重起的特权SE_SHUTDOWN_NAME<BR> LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);<BR> tkp.PrivilegeCount = 1;<BR> tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;<BR> AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);<BR><BR> if (!ExitWindowsEx(EWX_REBOOT, 0))<BR> ExitWindowsEx(EWX_REBOOT | EWX_FORCE, 0);<BR> }<BR><BR>Exit:<BR> CDialog::OnOK();<BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:sank 回复日期:2003-11-11 11:35:55
<br>内容:void CZzDlg::OnOK() <BR>{<BR> // TODO: Add extra validation here<BR> OSVERSIONINFO osv;<BR> osv.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);<BR> GetVersionEx(&osv);<BR> if(osv.dwPlatformId == VER_PLATFORM_WIN32_NT)<BR> {<BR> HANDLE hProcess,hToken;<BR> TOKEN_PRIVILEGES Privileges;<BR> LUID luid;<BR> //获得当前的进程号<BR> hProcess=GetCurrentProcess();<BR> //获得进程的存取令牌. 第二个参数为TOKEN_ADJUST_PRIVILEGERS时,<BR> //获得可调整的存取令.<BR> OpenProcessToken(hProcess,TOKEN_ADJUST_PRIVILEGES,&hToken);<BR> Privileges.PrivilegeCount=1;<BR> //查找关机权限的ID号<BR> LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);<BR> Privileges.Privileges[0].Luid=luid;<BR> Privileges.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;<BR> //调整存取权限, 如果不成功, 本函数返回 -1<BR> if (!AdjustTokenPrivileges(hToken,FALSE,&Privileges,NULL,NULL,NULL))<BR> // return -1;<BR> MessageBox("fail to shut down the computer");<BR> }<BR><BR> ExitWindowsEx(EWX_SHUTDOWN,0); <BR><BR> CDialog::OnOK();<BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:jackyxio 回复日期:2003-11-12 09:16:50
<br>内容:精华中有完整的例子,比较老,你可以翻翻。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -