已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实训1程序源代码5实训程序源代码Manager.h代码:void PowerOff()/关机 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.Privileges0.Luid); tkp.PrivilegeCount = 1; tkp.Privileges0.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); void ExitUser()/注销 ExitWindows(0, 0); void ReStart()/重新启动 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.Privileges0.Luid); tkp.PrivilegeCount = 1; tkp.Privileges0.Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); ExitWindowsEx(EWX_REBOOT | EWX_FORCE, 0); else ExitWindowsEx(EWX_REBOOT | EWX_SHUTDOWN, 0); 界面设计及实现功能代码:BOOL CTimeOffDlg:OnInitDialog()CDialog:OnInitDialog(); m_path=ringout.wav;ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);SetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon CFont * f; f=new CFont; f-CreateFont(30, / nHeight 0, / nWidth 0, / nEscapement 0, / nOrientation FW_BOLD, / nWeight TRUE, / bItalic TRUE, / bUnderline 0, / cStrikeOut ANSI_CHARSET, / nCharSet OUT_DEFAULT_PRECIS, / nOutPrecision CLIP_DEFAULT_PRECIS, / nClipPrecision DEFAULT_QUALITY, / nQuality DEFAULT_PITCH | FF_SWISS, / nPitchAndFamily _T(Arial); / lpszFac GetDlgItem(IDC_STATIC1)-SetFont(f); GetDlgItem(IDC_STATIC1)-SetWindowText(欢迎使用Windows定时管理系统); CTime time;time=CTime:GetCurrentTime();CString s=time.Format(%H:%M:%S);GetDlgItem(IDC_STATIC4)-SetWindowText(s); /启动定时器SetTimer(1,1000,NULL);CheckRadioButton(IDC_RADIO1, IDC_RADIO3, IDC_RADIO1); m_tnid.cbSize=sizeof(NOTIFYICONDATA); /定义结构的成员变量 m_tnid.hWnd=this-m_hWnd; m_tnid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP; m_tnid.uCallbackMessage=MYWM_NOTIFYICON; /用户定义的回调消息 _tcscpy(m_tnid.szTip, _T(定时关机程序,制作人:一江春水);hIcon=m_hIcon;m_tnid.hIcon=hIcon;if(hIcon):DestroyIcon(hIcon);GetWindowRect(&m_rectFull);m_rectHalf=m_rectFull;/ calculate our half size based on bottom of More buttonCRect rect;m_ctrlMoreButton.GetWindowRect(&rect);m_rectHalf.bottom=rect.bottom+10; / + 10 for cosmeticsToggleSize();return TRUE; / return TRUE unless you set the focus to a controlvoid CTimeOffDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);void CTimeOffDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;dc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();HCURSOR CTimeOffDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CTimeOffDlg:OnCancel() if (MessageBox(真的要退出吗?,你确信?,MB_OKCANCEL|MB_ICONQUESTION)=IDOK)CDialog:OnCancel();void CTimeOffDlg:OnPowOff() PowerOff();void CTimeOffDlg:OnChaUser() ExitUser();void CTimeOffDlg:OnReStart() ReStart();void CTimeOffDlg:OnSetTime() SetTime dlg; dlg.DoModal();void CTimeOffDlg:OnButton1() UpdateData(true);CString s;if(m_time1=|m_time2=|m_time3=) MessageBox(请选择正确的时间,选择);else s=m_time1+:+m_time2+:+m_time3; m_str=s; if(CheckRadio()=1) s=你选择的关机时间是:+s; if(CheckRadio()=2)s=你选择的注销时间是:+s; if(CheckRadio()=3)s=你选择重启时间是:+s; GetDlgItem(IDC_STATIC2)-SetWindowText(s);void CTimeOffDlg:OnTimer(UINT nIDEvent) UpdateData(true);CString hour_minS=m_TimeS.Format(%H:%M);CString minS=m_TimeS.Format(%M);CTime time;time=CTime:GetCurrentTime();CString s=time.Format(%H:%M:%S);GetDlgItem(IDC_STATIC4)-SetWindowText(s);CString hour_min=time.Format(%H:%M); CString min=time.Format(%M); CString sec=time.Format(%S);if(s=m_str) if(CheckRadio()=1)PowerOff(); if(CheckRadio()=2) ReStart(); if(CheckRadio()=3) ExitUser();if(IsDlgButtonChecked(IDC_RADIO4)if(min=00&sec=00) PlaySound(m_path,NULL,SND_FILENAME|SND_ASYNC); if(IsDlgButtonChecked(IDC_RADIO5) if(min=00|min=30)&sec=00) PlaySound(m_path,NULL,SND_FILENAME|SND_ASYNC); if(hour_minS=hour_min) PlaySound(m_path,NULL,SND_FILENAME|SND_ASYNC);CDialog:OnTimer(nIDEvent);void CTimeOffDlg:OnDestroy() KillTimer(1);CDialog:OnClose();int CTimeOffDlg:CheckRadio() if(IsDlgButtonChecked(IDC_RADIO1) return 1; else if(IsDlgButtonChecked(IDC_RADIO2) return 2; else return 3;LRESULT CTimeOffDlg:WindowProc(UINT message, WPARAM wParam, LPARAM lParam) if(lParam=WM_LBUTTONUP) LPPOINT lpoint=new tagPOINT; GetCursorPos(lpoint); CMenu menu; menu.CreatePopupMenu(); menu.AppendMenu(MF_STRING,WM_DESTROY,退 出); /menu.AppendMenu(MF_SEPARATOR);/ menu.AppendMenu(MF_STRING,WM_THREADEXIT,关闭窗口); :SetForegroundWindow(m_tnid.hWnd); menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint-x,lpoint-y,this); HMENU hmenu=menu.Detach(); menu.DestroyMenu(); delete lpoint; else if(message=WM_SYSCOMMAND)&(wParam=SC_MINIMIZE) /如果是系统消息 this-ShowWindow(SW_HIDE);:Shell_NotifyIcon(NIM_ADD,&m_tnid);return true;else if(message=MYWM_NOTIFYICON)&(lParam=WM_LBUTTONDBLCLK) /如果是用户定义的消息this-ShowWindow(SW_SHOW);this-SetActiveWindow(); /双击并且出现在最上面/:Shell_NotifyIcon(NIM_DELETE,&m_tnid);return true;elsereturn CDialog:WindowProc(message, wParam, lParam);return CDialog:WindowProc(message, wParam, lParam);void CTimeOffDlg:OnCheckSound() / TODO: Add your control notification handler code here CFileDialog DlgOpenFile( TRUE, .wav, NULL, OFN_EXPLORER, 波表文件(*.Wav)|*.Wav, this ); int iResult = DlgOpenFile.DoModal(); if( iResult= IDOK ) CString cstrFilePath = DlgOpenFile.GetPathName();m_path=cstrFilePath; UpdateData(false);void CTimeOffDlg:OnLisen() / TODO: Add your control notification handler code herePlaySound(m_path,NULL,SND_FILENAME|SND_ASYNC);void CTimeOffDlg:OnMoreButton() / TODO: Add your control notification handler code hereToggleSize();void CTimeOffDlg:ToggleSize() CRect rect;CString str;if (m_bToggleSize)str=;rect=m_rectHalf;SetWindowPos(NULL,0,0,rect.Width(),rect.Height(),SWP_NOZORDER|SWP_NOMOVE);m_ctrlMoreButton.SetWindowText(str);m_bToggleSize=!m_bToggleSize;实训2程序源代码5实训程序源代码#include#include #include #define BufferSize 15char BufferBufferSize;int head,tail=0;/Buffer数组下标int count;/被使用的缓冲区数量 HANDLE hMutex;HANDLE hNotFullEvent, hNotEmptyEvent;/用来同步生产者和消费者线程 /缓冲区存储情况/-void display(char a15) int i; cout缓冲区存储情况如下:=0;i-) coutt|-ai-|endl;void Producer1() int i; char ch; char p1=a,b,c,d,e,f,g,h,i,j; if(tail15) for(i=0;i14) cout缓冲区已满,不能再放入数据!endl; ReleaseMutex(hMutex); /结束临界区 PulseEvent(hNotEmptyEvent); /唤醒消费者线程 /if else /得到互斥锁且缓冲区非满,开始产生新数据 cout生产者 p1:tp1iendl; Buffertail=p1i; tail=(tail+1)%BufferSize;/存放于缓冲区的位置 display(Buffer); / tail+; count+; cout请按ENTER继续.endl; ch=getchar(); ReleaseMutex(hMutex); /结束临界区 PulseEvent(hNotEmptyEvent); /唤醒消费者线程 /else /for /if/ p1_Producervoid Producer2() int i; char ch; char p2=0,1,2,3,4,5,6,7,8,9; if(tail15) for(i=0;i14) cout缓冲区已满,不能再存入数据!程序结束!endl; ReleaseMutex(hMutex); /结束临界区 PulseEvent(hNotEmptyEvent); /唤醒消费者线程 /if else / 得到互斥锁且缓冲区非满,开始产生新数据 cout生产者 p2:tp2iendl; Buffertail=p2i; tail=(tail+1)%BufferSize; display(Buffer); /tail+; count+; cout请按ENTER继续.endl; ch=getchar(); ReleaseMutex(hMutex); / 结束临界区 PulseEvent(hNotEmptyEvent); / 唤醒消费者线程 /else /for /if/ p2_Producervoid Producer3()int i;char ch;char p3=+,-,*,/,&,%,&,.,#; if(tail15) for(i=0;i14) cout缓冲区已满,不能再存入数据!程序结束!endl; ReleaseMutex(hMutex); /结束临界区 PulseEvent(hNotEmptyEvent); /唤醒消费者线程 else / 得到互斥锁且缓冲区非满,开始产生新数据 cout生产者 p3:tp3iendl; Buffertail=p3i; tail=(tail+1)%BufferSize; display(Buffer); /tail+; count+; cout请按ENTER继续.endl; ch=getchar(); ReleaseMutex(hMutex); / 结束临界区 PulseEvent(hNotEmptyEvent); / 唤醒消费者线程 void Consumer() int i=0,j=0,k=0; char result,ch; while(1) /ch=getchar(); WaitForSingleObject(hMutex,INFINITE); if(count=0) / 没有可以处理的数据 ReleaseMutex(hMutex); / 释放互斥锁且等待 / 等待直到缓冲区非空 WaitForSingleObject(hNotEmptyEvent,INFINITE); /if else if(Bufferhead=0) coutConsumer 0: 缓冲区的数据已全消费过一次,消费完毕!endl; ReleaseMutex(hMutex); / 结束临界区 ExitThread(0); /if else / 获得互斥锁且缓冲区有数据,开始处理 result=Bufferhead; cout消费了: resultendl; Bufferhead=; display(Buffer); head=(head+1)%BufferSize; count-; cout请按ENTER继续.endl; ch=getchar(); ReleaseMutex(hMutex); / 结束临界区 PulseEvent(hNotFullEvent); / 唤醒生产者线程 /else /else /while/consumer/主函数void main() HANDLE hThreadVector6; DWORD ThreadID; count = 0; head = 0; tail = 0; hMutex=CreateMutex(NULL,FALSE,NULL); hNotFullEvent=CreateEvent(NULL,TRUE,FALSE,NULL); hNotEmptyEvent=CreateEvent(NULL,TRUE,FALSE,NULL); hThreadVector0=CreateThread (NULL, 0,(LPTHREAD_START_ROUTINE) Producer1, NULL, 0, (LPDWORD)&ThreadID); hThreadVector1=CreateThread (NULL, 0,(LPTHREAD_START_ROUTINE) Consumer, NULL, 0, (LPDWORD)&ThreadID); hThreadVector2=CreateThread (NULL, 0,(LPTHREAD_START_ROUTINE) Producer2, NULL, 0, (LPDWORD)&ThreadID); hThreadVector3=CreateThread (NULL, 0,(LPTHREAD_START_ROUTINE) Consumer, NULL, 0, (LPDWORD)&ThreadID); hThreadVector4=CreateThread (NULL, 0,(LPTHREAD_START_ROUTINE) Producer3, NULL, 0, (LPDWORD)&ThreadID); hThreadVector5=CreateThread (NULL, 0,(LPTHREAD_START_ROUTINE) Consumer, NULL, 0, (LPDWORD)&ThreadID); WaitForMultipleObjects(2,hThreadVector,TRUE,INFINITE);/cout*Finish*endl;实训3程序源代码5实训程序源代码/page1.classclass page1 : public CDialogpublic:page1(CWnd* pParent = NULL); enum IDD = IDD_PAGE1_DIALOG ;CStringm_p1_name1;CStringm_p1_name2;CStringm_p1_name3;intm_p1_value1;intm_p1_value2;intm_p1_value3;overridesprotected:virtualvoidDoDataExchange(CDataExchange* pDX); protected:afx_msg void OnButton1();afx_msg void OnChangeEdit1();afx_msg void OnChangeEdit2();afx_msg void OnChangeEdit3();afx_msg void OnChangeEdit4();afx_msg void OnChangeEdit5();afx_msg void OnChangeEdit6();afx_msg void OnKillfocusEdit6();afx_msg void OnUpdateEdit6();#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifpage1:page1(CWnd* pParent /*=NULL*/): CDialog(page1:IDD, pParent)m_p1_name1 = _T();m_p1_name2 = _T();m_p1_name3 = _T();m_p1_value1 = 0;m_p1_value2 = 0;m_p1_value3 = 0;/AFX_DATA_INITvoid page1:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT1, m_p1_name1);DDX_Text(pDX, IDC_EDIT2, m_p1_name2);DDX_Text(pDX, IDC_EDIT3, m_p1_name3);DDX_Text(pDX, IDC_EDIT4, m_p1_value1);DDX_Text(pDX, IDC_EDIT5, m_p1_value2);DDX_Text(pDX, IDC_EDIT6, m_p1_value3);BEGIN_MESSAGE_MAP(page1, CDialog)ON_BN_CLICKED(IDC_BUTTON1, OnButton1)ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)ON_EN_CHANGE(IDC_EDIT2, OnChangeEdit2)ON_EN_CHANGE(IDC_EDIT3, OnChangeEdit3)ON_EN_CHANGE(IDC_EDIT4,OnChangeEdi4)ON_EN_CHANGE(IDC_EDIT5,OnChangeEdit5)ON_EN_CHANGE(IDC_EDIT6,OnChangeEdit6)ON_EN_KILLFOCUS(IDC_EDIT6,OnKlfocusEdit6)ON_EN_UPDATE(IDC_EDIT6,OnUpdateEdit6)END_MESSAGE_MAP(void page1:OnButton1() void page1:OnChangeEdit1() UpdateData(TRUE);void page1:OnChangeEdit2() UpdateData(TRUE);void page1:OnChangeEdit3() UpdateData(TRUE);void page1:OnChangeEdit4() UpdateData(TRUE);void page1:OnChangeEdit5() UpdateData(TRUE);void page1:OnChangeEdit6() UpdateData(TRUE); /page2.classclass page2 : public CDialogpublic:page2(CWnd* pParent = NULL); enum IDD = IDD_PAGE2_DIALOG ;intm_p2_edit1;intm_p2_edit10;intm_p2_edit11;intm_p2_edit12;intm_p2_edit2;intm_p2_edit3;intm_p2_edit4;intm_p2_edit5;intm_p2_edit6;intm_p2_edit7;intm_p2_edit8;intm_p2_edit9;protected:virtual void DoDataExc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 46483-2025信息技术客服型虚拟数字人通用技术要求
- GB/T 46246-2025风能发电系统基于安装在测风塔、机舱和整流罩上的测风设备的风能资源测量
- 农村房产证买卖协议书
- 合同工协议书补充协议
- 农村荒滩租赁合同范本
- 印刷合同范本模板模板
- 农村村庄规划合同范本
- 卖衣服合同补充协议书
- 电影节活动推广方案
- 公司跟合作社合同协议
- 工业高质量数据集研究报告 2025 中国工业互联网研究院
- 2025江苏苏州市姑苏区劳动人事争议仲裁院协理员招聘5人考试参考试题及答案解析
- 全面流程审计管理模板
- 2025学年第一学期高一年级10月六校联考英语试题卷
- 医院法律知识培训课件
- 国家电投广西核电社会招聘笔试题库
- 2025年士兵提干考试题及答案
- 湖南九校联盟2026届高三上学期9月第一次联考化学试题+答案
- 《人工智能导论》课件 第4章 人工智能的行业应用
- 2025年河南淯水新城投资集团有限公司及下属子公司招聘17人考试参考试题及答案解析
- 自主维护课件
评论
0/150
提交评论