工控机需要在某一时刻自动重起,并且无人干预,没有显示器,怎样实现?希望高手指教。
解决方案 »
- MFC 对话框中添加控件listbox
- vc6 做ocx和 vb6通讯 遇到的一个问题,请高手解疑
- 问个关于日期时间控件的小问题
- #define FF_MODERN (3<<4), 请问后面这个 3<<4 是什么意思?
- 我把列表控件的风格选成Report。但是我想把它打上格子,不知道怎么弄?
- 在VC/MFC中如何实现对access数据库的压缩?
- 100分 ASSERT()的用法?
- 我今天凌晨有了个小外甥,大家来领分啊。
- 请问如何程序运行中进入MSDOS界面?又如何返回WIN界面?
- 新年新问题:有谁知道在线点播的实现技术??
- 请问切分窗口如何固定他的大小?帮帮我吧?我是成长中的菜鸟啊?
- 各位有没有好的中文书籍下载?
//显示不同的文本
CString GetPromptText(UINT uID)
{
switch(uID)
{
case EWX_LOGOFF:
return "是否注销?";
break;
case EWX_FORCE:
return "是否终止所有应用程序,这可能会造成数据丢失?";
break;
case EWX_FORCEIFHUNG:
return "是否终止所有应用程序?";
break;
case EWX_POWEROFF:
return "是否关闭电源?";
break;
case EWX_REBOOT:
return "是否重新启动计算机?";
break;
case EWX_SHUTDOWN:
return "是否关闭系统?";
break;
} return "";
}
//重新启动计算机
BOOL AfxExitSystem(UINT uFlags, UINT uAddition)
{
CString str;
switch(uFlags)
{
case EWX_LOGOFF:
case EWX_FORCE:
case EWX_FORCEIFHUNG:
switch(uAddition)
{
case EWX_NOPROMPT:
return ::ExitWindowsEx(uFlags, 0);
break;
case EWX_PROMPT:
str = GetPromptText(uFlags);
if(AfxMessageBox(str, MB_OKCANCEL) == IDOK)
{
return ::ExitWindowsEx(uFlags, 0);
}
break;
}
break;
case EWX_POWEROFF:
case EWX_REBOOT:
case EWX_SHUTDOWN:
HANDLE hTokenUsed;
TOKEN_PRIVILEGES tpPrevious;
TOKEN_PRIVILEGES tp;
DWORD cbPrevious = sizeof(TOKEN_PRIVILEGES);
LUID luid;
//获得进程访问句柄
if(::OpenProcessToken(::GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hTokenUsed))
{
//根据指定的进程权利获得本地唯一标识符
if(::LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &luid ))
{
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
//调整进程权利
if(::AdjustTokenPrivileges(hTokenUsed, FALSE, &tp,
sizeof(TOKEN_PRIVILEGES), &tpPrevious, &cbPrevious))
{
str = GetPromptText(uFlags);
if(AfxMessageBox(str, MB_OKCANCEL) == IDOK)
{
return ::ExitWindowsEx(EWX_REBOOT, 0);
}
else
{
::AdjustTokenPrivileges(hTokenUsed, FALSE, &tpPrevious,
sizeof(TOKEN_PRIVILEGES), &tpPrevious, &cbPrevious);
::CloseHandle(hTokenUsed);
}
}
}
}
break;
} return FALSE;
}