关于自动关机的程序设计(MFC/VC)

来源:互联网 发布:linux gdb调试视频 编辑:程序博客网 时间:2024/05/18 23:54

自动关机,对于某些时候有一定的实用性。运用API实现这一功能其实很简单,再结合托盘显示、托盘鼠标响应、动态菜单等,编制出一个简单的自动关机的程序!
1、自动关机的APi函数
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
DWORD dwVersion;

dwVersion = GetVersion(); // 得到WINDOWS NT或Win32的版本号

if(dwVersion < 0x80000000) // 用于判断WIN系列,从而设置相应的权限
{
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_SHUTDOWN | EWX_FORCE, 0);
}
else
{
ExitWindowsEx(EWX_FORCE | EWX_SHUTDOWN, 0);
}
=============================
通过ExitWindowsEx()函数还可实现重启、注销,参见MSDN。

2、关闭计算机线程控制
通过代码
CTime time = CTime::GetCurrentTime();
int nSystemHour = time.GetHour();
int nSystemMinute = time.GetMinute();
获取系统当前时间,并判断是否等于设置关机时间。

3、最小化后隐藏主窗口
::ShowWindow(SW_HIDE); // 隐藏主窗口

4、添加系统托盘
NOTIFYICONDATA pnid;
pnid.cbSize = (DWORD)sizeof(NOTIFYICONDATA); // 该结构体大小
pnid.hWnd = m_hWnd; // 窗口句柄
pnid.uID = (UINT)m_hIcon; // 图标句柄
// 图标有效|自定义消息有效|鼠标指向显示文字有效
pnid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP ; 

pnid.uCallbackMessage = WM_MY_NOTIFYICON;//自定义的消息名称
HICON hIcon;
hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
pnid.hIcon = hIcon; // 图标句柄
strcpy(pnid.szTip, "自动关机"); // 鼠标指到那所显示的文字
::Shell_NotifyIcon(NIM_ADD, &pnid); // 在托盘区添加图标
::Shell_NotifyIcon(NIM_DELETE, &pnid); // 删除托盘图标 )

5、增加托盘菜单,并响应鼠标时事件
CPoint point;
GetCursorPos(&point);
CMenu menu;
menu.LoadMenu(IDR_MOUSE_MENU);
CMenu* pPopup = menu.GetSubMenu(0);
SetForegroundWindow(); //It's me added
//PostMessage(WM_SYSCOMMAND, WM_NULL, 0);
pPopup->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y,
AfxGetMainWnd(), NULL);

6、获取系统运行总时间
CString strTime;
strTime.Format("Windows已运行了%d小时%d分钟",
::GetTickCount()/1000/60/60,
::GetTickCount()/1000/60%60);
AfxMessageBox(strTime);

运用以上的代码片断,即可实现简单的自动关机程序!试试吧!
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 新货车上户超重怎么办 车险出保单车号填错怎么办 货车拦板变形了怎么办 行车监控看不清楚车号怎么办? 1.5米的鱼缸要怎么办 被锤子砸到手了怎么办 家里地下污水管道堵塞怎么办 家里pvc灯罩变黄怎么办 欧普吸顶灯灯罩坏了怎么办 硬盘用久了变慢怎么办 地税申报工资人员弄错怎么办 买保险保单丢了怎么办 买保险的银行卡丢了怎么办 没学过JAVA入职怎么办 磨砂皮擦了鞋油怎么办 磨破皮伤口有沙子怎么办 工行信用卡被风险锁定了怎么办 超重被超限站查住以后怎么办 银行卡输入密码次数超限怎么办 信用卡密码错误次数超限怎么办 农行密码错误次数超限怎么办 剪力墙偏心受拉怎么办 韵达快递寄丢了怎么办 重要快递送丢了怎么办 快递员送货丢了怎么办 买的快递丢失了怎么办 申通把件弄丢了怎么办 淘宝快递送丢了怎么办 我的快递丢了怎么办 顺丰快递丢件怎么办 韵达快递不发货怎么办 发物流丢了怎么办啊 圆通快递寄丢了怎么办 中通快递弄丢了怎么办 中通快递寄丢了怎么办 中通快递丢了怎么办 物流没保价坏了怎么办 顺丰保值快递丢了怎么办 顺丰保价件丢失怎么办 公司购买货物对方没有发票怎么办 加工货物对方不取怎么办