⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myclosesystem.cpp

📁 一个学生考试成绩管理的半成品
💻 CPP
字号:
// MyCloseSystem.cpp : 实现文件
//

#include "stdafx.h"
#include "ScoreGather.h"
#include "MyCloseSystem.h"
#include ".\myclosesystem.h"


// CMyCloseSystem 对话框

IMPLEMENT_DYNAMIC(CMyCloseSystem, CDialog)
CMyCloseSystem::CMyCloseSystem(CWnd* pParent /*=NULL*/)
	: CDialog(CMyCloseSystem::IDD, pParent)
	, m_exit(FALSE)
{
}

CMyCloseSystem::~CMyCloseSystem()
{
}

void CMyCloseSystem::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_CHECK1, m_check1);
	DDX_Control(pDX, IDC_CHECK2, m_check2);
	DDX_Control(pDX, IDC_OK, m_ok);
	DDX_Control(pDX, IDCANCEL, m_cancel);
	DDX_Control(pDX, IDC_CHECK3, m_check3);
}


BEGIN_MESSAGE_MAP(CMyCloseSystem, CDialog)
	ON_BN_CLICKED(IDC_OK, OnBnClickedOk)
	ON_BN_CLICKED(IDC_CHECK1, OnBnClickedCheck1)
	ON_BN_CLICKED(IDC_CHECK2, OnBnClickedCheck2)
	ON_WM_ERASEBKGND()
	ON_WM_CTLCOLOR()
	ON_BN_CLICKED(IDC_CHECK3, OnBnClickedCheck3)
END_MESSAGE_MAP()


// CMyCloseSystem 消息处理程序

void CMyCloseSystem::OnOK()
{
}

void CMyCloseSystem::OnCancel()
{
	CDialog::OnCancel();
}

void CMyCloseSystem::OnBnClickedOk()
{
	if(m_check1.GetCheck() || m_check2.GetCheck())
	{
		HANDLE processHandle=NULL;
		DWORD thisProcessID=0;
		thisProcessID=GetCurrentProcessId();
		if(!thisProcessID)
			return;
		processHandle=OpenProcess(PROCESS_ALL_ACCESS | STANDARD_RIGHTS_REQUIRED,FALSE,thisProcessID);
		if(!processHandle)
			return;
		HANDLE tokenHandle=NULL;
		OpenProcessToken(processHandle,TOKEN_ADJUST_PRIVILEGES,&tokenHandle);
		if(!tokenHandle)
			return;
		CloseHandle(processHandle);
		TOKEN_PRIVILEGES tp;
		LUID luid;
		if(!LookupPrivilegeValue(NULL,"SeShutdownPrivilege",&luid))
			return;
		tp.PrivilegeCount=1;
		tp.Privileges[0].Luid=luid;
		tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
		AdjustTokenPrivileges(tokenHandle,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),(PTOKEN_PRIVILEGES)NULL,(PDWORD)NULL);
		if(GetLastError()!=ERROR_SUCCESS)
			return;
		if(m_check1.GetCheck())
		{
			if(!ExitWindowsEx(EWX_SHUTDOWN, 0L))
				return;
			else
				m_exit=TRUE;
		}
		else
		{
			if(!ExitWindowsEx(EWX_REBOOT, 0L))
				return;
			else
				m_exit=TRUE;
		}
	}
	if(m_check3.GetCheck())
	{
		if(GetOSVersion()=="Win2000")
		{
				HINSTANCE hinst=::LoadLibrary("user32.dll");
				typedef BOOL (*FUN)(VOID);
				FUN fun=(FUN)::GetProcAddress(hinst,"LockWorkStation");
				fun();				
		}
		else 
			AfxMessageBox("本功能只能在Windows2000及以上版本的系统中使用!");
	}
	CDialog::OnOK();
}

CString CMyCloseSystem::GetOSVersion(void)
{
	OSVERSIONINFOEX os;
	::ZeroMemory(&os,sizeof(os));
	os.dwOSVersionInfoSize=sizeof(os);
	::GetVersionEx(reinterpret_cast<LPOSVERSIONINFO>(&os));
	
	if(os.dwPlatformId==VER_PLATFORM_WIN32_NT && os.dwMajorVersion >=5)
		return "Win2000";   //win2000以上的版本	
	if(os.dwPlatformId ==VER_PLATFORM_WIN32_WINDOWS)
		return "Win9x";
	else
		return "Other";
}

BOOL CMyCloseSystem::PreTranslateMessage(MSG* pMsg)
{
	m_tooltip.RelayEvent(pMsg);
	return CDialog::PreTranslateMessage(pMsg);
}

BOOL CMyCloseSystem::OnInitDialog()
{
	CDialog::OnInitDialog();

	m_tooltip.Create(this,TTS_ALWAYSTIP);
	m_tooltip.Activate(TRUE);
	m_tooltip.AddTool(GetDlgItem(IDC_CHECK1),IDS_CHECK1_CLOSE);
	m_tooltip.AddTool(GetDlgItem(IDC_CHECK2),IDS_CHECK2_CLOSE);
	m_tooltip.AddTool(GetDlgItem(IDC_CHECK3),IDS_CHECK3_CLOSE);
	m_tooltip.AddTool(GetDlgItem(IDC_OK),IDS_OK_CLOSE);
	m_tooltip.AddTool(GetDlgItem(IDCANCEL),IDS_CANCEL_CLOSE);

	return TRUE;
}

void CMyCloseSystem::OnBnClickedCheck1()
{
	m_check2.SetCheck(0);
	m_check3.SetCheck(0);
}

void CMyCloseSystem::OnBnClickedCheck2()
{
	m_check1.SetCheck(0);
	m_check3.SetCheck(0);
}

void CMyCloseSystem::OnBnClickedCheck3()
{
	m_check1.SetCheck(0);
	m_check2.SetCheck(0);
}

BOOL CMyCloseSystem::OnEraseBkgnd(CDC* pDC)
{
	CBrush brush(::GetSysColor(COLOR_3DFACE));
	CBrush* pOldBrush=pDC->SelectObject(&brush);
	CRect rcClip;
	pDC->GetClipBox(&rcClip);
	pDC->PatBlt(rcClip.left,rcClip.top,rcClip.Width(),rcClip.Height(),PATCOPY);
	pDC->SelectObject(pOldBrush);
	return TRUE;
}

HBRUSH CMyCloseSystem::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
	if(nCtlColor!=CTLCOLOR_EDIT)
	{
		pDC->SetTextColor(RGB(0,0,0));
		pDC->SetBkMode(TRANSPARENT);
		HBRUSH B = CreateSolidBrush(::GetSysColor(COLOR_3DFACE));
		return (HBRUSH) B;
	}
	else
		return CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -