首页 > 编程语言 >MFC练习4:自动关机程序(恶搞版)

MFC练习4:自动关机程序(恶搞版)

时间:2023-08-13 13:00:59浏览次数:35  
标签:定时器 strInput CString 自动关机 MFC str 添加 恶搞

用MFC实现了一个自动关机程序(恶搞版),需要输入“作者真帅”,不然会在30s后自动关机。程序涉及编辑框的输入输出、定时器的使用,按钮事件的添加、弹窗提示等,本身很简单。自动关机部分参考了网上的代码,在Win10系统上验证正常。

一、界面展示

这是一个MFC对话框类型的程序,整体界面如下。

界面1.jpg

二、关键代码

1、添加“确定”按钮事件
void CjokeDlg::OnBnClickedOk()
{
	// TODO: 在此添加控件通知处理程序代码
	CString strInput;

	m_edit1.GetWindowTextW(strInput);

	CString str = _T("作者真帅");

	if (str == strInput)
	{
		KillTimer(1);
		AfxMessageBox(_T("好吧,眼光不错,嘿嘿"), MB_OK | MB_ICONEXCLAMATION);
	}
}

界面2.jpg

2、添加“关闭”按钮事件
void CjokeDlg::OnBnClickedClose()
{
	// TODO: 在此添加控件通知处理程序代码
	CString strInput;

	m_edit1.GetWindowTextW(strInput);

	CString str = _T("作者真帅");

	if (str == strInput)
	{
		KillTimer(1);
		AfxMessageBox(_T("您受惊了,现在开始关闭窗口"), MB_OK | MB_ICONEXCLAMATION);
		DestroyWindow();
	}
}

界面3.jpg

3、定时器的使用

(1)定时器SetTimer这个API函数原型;

UINT_PTR SetTimer( 
HWND hWnd, // 窗口句柄 
UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器 
UINT uElapse, // 时间间隔,单位为毫秒 
TIMERPROC lpTimerFunc // 回调函数 
);  

在MFC程序中SetTimer被封装在CWnd类中,调用就不用指定窗口句柄了

(2)在OnInitDialog()中将时间显示到主界面“倒计时”编辑框中,并初始化定时器;

	timeCnt = 30;
	CString str;
	str.Format(_T("%d"), timeCnt);
	m_edit2.SetWindowTextW(str);

	SetTimer(1, 1000, NULL);

(3)添加定时器事件处理函数。在30s内不断更新“倒计时”编辑框的数值,到达30s时,弹窗提示“开始自动关机”,并在点击“确定”后调用自动关机代码实现功能。

void CjokeDlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	switch (nIDEvent)
	{
		case 1:
			timeCnt--;
			
			if (timeCnt <= -1)
			{
				KillTimer(1);
				AfxMessageBox(TEXT("开始自动关机!!!"), MB_OK);

				//下面是关机代码
				#if 1
				TOKEN_PRIVILEGES tp;
				HANDLE hToken;
				LUID luid;
				LPTSTR MachineName = NULL;

				if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
				{
					// PERR("OpenProcessToken",GetLastError());
					return;
				}

				if (!LookupPrivilegeValue(MachineName, SE_SHUTDOWN_NAME, &luid))
				{
					//  PERR("LookupPrivilegeValue", GetLastError());
					return;
				}

				tp.PrivilegeCount = 1;
				tp.Privileges[0].Luid = luid;
				tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
				AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL); //到这里,是取得权限///

				ExitWindowsEx(EWX_POWEROFF, EWX_FORCE);
				#endif
			}
			else
			{
				CString str;
				str.Format(_T("%d"), timeCnt);
				m_edit2.SetWindowTextW(str);
			}

			break;
	}

	CDialogEx::OnTimer(nIDEvent);
}

界面4.jpg

三、总结

1、练习使用编辑框,涉及到数据的获取和设置,以及Int类型和CString的转换;

2、练习定时器及其事件响应的相关操作;

3、学习Win系统关机代码。

标签:定时器,strInput,CString,自动关机,MFC,str,添加,恶搞
From: https://blog.51cto.com/sannywoods/7066601

相关文章

  • Debug Assertion Failed! Program: C:\Windows\SYSTEM32\mfc140ud.dll
    新建C++ MFC项目多文本对话框的模板,运行出错。解决办法:这是由于DockControlBar(&m_wndToolBar);引起的异常。在头文件MainFrm.h中重新定义  CMFCToolBar m_wndToolBar; 类型DockControlBar(&m_wndToolBar)改为DockPane(&m_wndToolBar);再次运行就不会出错了。......
  • 【MFC】CListCtrl 如何设置单元格颜色?
    CListCtrl默认可设置的内容很少,如单元格颜色默认无法设置。若想设置单元格颜色,需要对CListCtrl进行拓展,已有老外为我们写好demo,这里对其中原理、设置方法进行一个解析。其原理是:设置CListCtrl控件的OwerDraw属性为true,然后使用GDI画图函数进行各种自定义绘制。拓展的类为CColor......
  • MFC-数学函数
     sin正弦函数FLOATpi=3.1415926;FLOATf=sin(pi/2);//正弦函数/*参数:FLOAT以弧度为单位返回值:FLOAT*/       ......
  • 《MFC篇》悬浮button
    要在MFC中设置悬浮按钮,你可以按照以下步骤进行操作:首先,在你的对话框资源中创建一个普通的按钮控件,将其属性中的"Flat"设置为True,这将使按钮显示为一个扁平化的样式。在你的对话框类中添加按钮控件的成员变量。你可以使用类向导或手动添加。在对话框的OnInitDialog函数中,......
  • 官网解决-找不到mfc140u.dll,无法继续执行代码
    问题:找不到mfc140u.dll,无法继续执行代码原因:一般都是电脑缺少或丢失了dll,或者没安装对应版本的vc运行库解决:直接去官网下载vc运行库,安装即可直接上Microsoft官网链接:https://answers.microsoft.com/zh-hans/windows/forum/all/%E5%BE%AE%E8%BD%AF%E5%B8%B8%E7%94%A8%E8%BF%90......
  • 【MFC】CSingleLock的使用
    转载文章:CSingleLock的使用//先看看其代码://声明classCSingleLock{//Constructorspublic:CSingleLock(CSyncObject*pObject,BOOLbInitialLock=FALSE);//Operationspublic:BOOLLock(DWORDdwTimeOut=INFINITE);BOOLUnlock(......
  • MFC-文件操作CFile
             ......
  • 《Win32篇》空项目、Win32项目、MFC项目、Win32控制台的区别
    空项目、Win32项目、MFC项目、Win32控制台的区别参考链接:https://www.cnblogs.com/MCSFX/p/13267287.html参考链接:https://www.zhihu.com/question/20524989/answer/17575697空项目控制台控制台没有窗口,控制台与有窗口的(例如:win32、mfc)交互方式不同,前者是CML(命令模式),后者是G......
  • MFC-realloc修改数组容量
     TCHAR*p,*q;//分配初始内存空间p=(TCHAR*)malloc(10*sizeof(TCHAR));//初始化p中的数据for(inti=0;i<9;i++){*(p+i)=_T('a');}*(p+9)=_T('\0');//扩容pq=(TCHAR*)realloc......
  • 《MFC篇》MFC文件结构
    MFC文件结构(VS2015为例)原文链接:https://blog.csdn.net/fuhanghang/article/details/109826297在VS2015中创建完项目之后,会自动生成下面的文件结构:包括引用、外部依赖、头文件、源文件、资源文件、ReadMe。下面对这些文件进行分类描述:1、和项目名称相同的有两个文件比如说我......