PPT倒计时系统的设计与实现(共13页).doc
精选优质文档-倾情为你奉上甘肃联合大学“挑战杯”论文 题 目: PPT倒计时系统的设计与实现 (科技制作B类) 作 者:姬宏亮、岳金海、张玮玮 指导教师:张成文 薛亚娣 理工学院 学院 电信 系 计算机应用专业 08 级2010年4 月 19 日PPT倒计时系统的设计与实现姬宏亮1 岳金海1 张玮玮1(1 甘肃联合大学电子信息工程学院08级计算机应用技术班)摘要:在演讲、报告会上,人们通常采用Powerpoint幻灯片演示的方式,提升演讲或报告的形象性。因此,我们经常会使用一些计时的软件来提醒演讲者时间的进度。为了解决这一问题,同时对于讲课或演讲者提供一个方便的基本计时工具,我们特此设计了PPT倒计时系统这一实用工具。关键字:PPT 倒计时、VB.net、面向对象编程引言随着社会的日益发展,计算机的应用已经普及到了各个领域的各个行业,人们对计算机的应用也越来越普遍。随着各种技术的发展,各个方面的软件的应用越来越多。在演讲、报告会上,人们通常采用Powerpoint幻灯片演示的方式,提升演讲或报告的形象性。因此,我们经常会使用一些计时的软件来提醒演讲者时间的进度。网上可以下载的一些倒PPT计时系统的使用非常的不方便,而且大部分的软件在使用过程中经常会发生一些问题。为了解决这一问题,同时对于讲课或演讲者提供一个方便的基本计时工具,我们特此设计了PPT倒计时系统这一实用工具。1.系统总体构想本系统基于VB.NET的开发环境设计而成,在提供Powerpoint倒计时的功能的基础上,我们进行了相应的扩展,提供了许多辅助性的功能(如:Word、excel、浏览器等软件的倒计时)方便了用户的使用。该款PPT计时系统扩展性、二次开发性、兼容性强。软件占用资源少,可在U盘中随身携带。软件达到无人值守的计时系统,没有任何多余的操作,并自行计时。软件的使用也非常的方便,用户可以自定义软件显示的位置;为了不让本软件的运行窗口遮挡住PowerPoint的显示界面,该软件特设置了一个隐藏窗口的按钮,同时用户可以将此软件最小化到任务托盘;另外本软件的一个特殊的辅助功能是可以实现倒计时完成后自动关机的功能,用户可以设定倒计时完成后自动关机的功能。2.系统的特点及创新2.1系统特点(1)完全自动化计时便捷方便(2)设置隐藏模式,减少不必要的误操作(3)可以在使用完成后自动结束计时(4)可为多种软件计时(5)可在计时完成后自动关机本系统主要适用于学校、企事业单位、娱乐行业等组织的各种演讲,也可以用于个人进行计时或自动关机。2.2系统的功能创新 (1)系统是基于Powerpoint的放映状态判断是否计时,当用户开始放映,本系统可以根据用户自定义的时间开始倒计时,当用户结束放映或者时间到则结束计时,这样可以精确地对其计时,不会出现错误计时。(2)系统采用免打扰模式。在放映的过程中为了不打扰用户,特设计了放映10秒钟后自动隐藏,每到整点时分,会弹出计时窗口,显示5秒钟后再次自动隐藏。当剩余一分钟的时间是会播放声音提示,到计时完成后播放结束提示音并弹出时间到提示,用声音和图形结合起来提示,使得软件更具人性化。(3)用户可以根据自己的需要,自定义系统的相关参数。如:时间设置、显示位置的设置、标题的自定义、计时完成是否自动关机的设置等,方便了用户的使用。(4)隐藏模式实现了动态显示计时界面,并且用户可以方便的开关该功能。2.3技术创新(1)通过调用API:GetWindowText获取窗口标题,利用instr在进程中搜索比对窗口标题,获知powerpoint的幻灯片放映状态以及其他程序的运行状态.(2)通过设置全局变量实现对辅助功能的开关。(3) 通过API:GetWindowText GetWindow GetWindowLong分别获窗口标题,所有者信息和窗口样式。通过IsWindowVisible不允许不可见进程加入列表中,通过GetParent让没有所有权的进程不能加入列表WS_EX_TOOLWINDOW不允许使用具有所有者的应用程序加入列表。这样大大提高了程序运行效率。(4) 自动关机是通过内核函数NtShutdownSystem和 RtlAdjustPrivilege实现的.实现了超快速关机,加入这个功能是考虑能让软件大众化。3、系统概要设计针对PPT计时的特点,本系统主要功能有自动计时,自动关机,设置(包括时间、标题、位置),隐藏模式,托盘显示等。系统工作流程图如下:开始计时参数设置(时间、计时器位置)Powerpoint幻灯片是否放映?一分钟提示最后10秒倒计时时间到提示结束是否系统功能划分如下:图(2)系统运行界面图(3)系统菜单(1)时间设置 用户可自行设置计时时间。(2)标题设置 用户可根据自己的喜好自行设置软件标题,主要是考虑到被PPT计时系统的不同而设置的。 (3)位置设置 软件默认了三种位置可供用户选择,这主要考虑到用户使用习惯的问题。 (4)自动计时 软件实现了无需点击自行判断程序自行计时。(5)自动关机 当用户在自动关机中点击自动关机按钮并确定之后软件会在计时结束后关闭计算机。(6)隐藏模式 在用户打开隐藏模式的情况下从开始计时30秒后窗口会自动隐藏,在整分时间会自动显示,并在5秒后又自行隐藏,在最后十秒会显示窗口,设置做左Shift可随时关闭隐藏模式。(7)声音提醒在一分钟和最后十秒会提示用户计时即将结束.4、系统代码设计(1)系统实现方案 在整个设计中我们采取团队合作的模式分块解决问题。主要涉及的问题有:获取程序窗口标题、判断有效活动窗口、核心时间和隐藏算法、托盘显示、自动关机。(2)获取程序窗口标题Function FillActiveWindowsList(ByVal hWnd As Integer, ByVal lParam As Integer) As Boolean '获取窗口标题文本长度 Dim windowText As New StringBuilder(StringBufferLength) ' 获取窗口标题。 Win32API.GetWindowText(hWnd, windowText, StringBufferLength) ' 仅将有效窗口添加到活动窗口列表框中。 If ProcessIsActiveWindow(hWnd) Then If InStr(1, windowText.ToString, "PowerPoint 幻灯片放映", 1) <> 0 Then PPTisPlay = True ElseIf InStr(1, windowText.ToString, "QQ影音", 1) <> 0 Then PPTisPlay = True ElseIf InStr(1, windowText.ToString, "暴风影音", 1) <> 0 Then PPTisPlay = True ElseIf InStr(1, windowText.ToString, "迅雷", 1) <> 0 Then PPTisPlay = True End If End IfReturn TrueEnd Function(3)判断有效活动窗口Function ProcessIsActiveWindow(ByVal hWnd As Integer) As Boolean Dim windowText As New StringBuilder(StringBufferLength) Dim windowIsOwned As Boolean Dim windowStyle As Integer ' 获取窗口标题、所有者信息和窗口样式。 Win32API.GetWindowText(hWnd, windowText, StringBufferLength) windowIsOwned = Win32API.GetWindow(hWnd, Win32API.GW_OWNER) <> 0 windowStyle = Win32API.GetWindowLong(hWnd, Win32API.GWL_EXSTYLE) ' 不允许不可见进程。 If Not Win32API.IsWindowVisible(hWnd) Then Return False End If ' 窗口必须具有标题 If windowText.ToString.Equals("") Then Return False End If ' 不应具有父项 If Win32API.GetParent(hWnd) <> 0 Then Return False End If ' 不允许使用没有所有权的工具提示 If (windowStyle And Win32API.WS_EX_TOOLWINDOW) <> 0 And Not windowIsOwned Then Return False End If ' 不允许使用具有所有者的应用程序 If (windowStyle And Win32API.WS_EX_APPWINDOW) = 0 And windowIsOwned Then Return False End If ' 满足所有条件的窗口即为有效活动窗口。 Return True End Function(4)核心时间和隐藏算法 这里回调了函数fillactivewindowslist.其中s为秒,timetag为时间标签以计时多少秒。Hideon为隐藏模式的开关。Pptisplay为窗口存在的标识.Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick '时间算法和隐藏算法 s = s - 1 timetag = timetag + 1 Dim a, b As Integer a = s Mod 60 b = s 60 If timetag > 30 And hideon = True And s > 0 And a > 5 Then Me.Visible = False End If If timetag > 30 And hideon = True And s <= 10 And s >= 0 Then Me.Visible = True End If If timetag > 30 And hideon = True And a <= 5 And a >= 0 Then Dim ms As Integer = 0 Me.Visible = True If ms = 5 Then Me.Visible = False Else : ms = ms + 1 End If End If Dim a1, a2, a3, a4 As Integer If s >= 10 Then If s = 59 Then My.Computer.Audio.Play(Application.StartupPath & "wave1.wav", AudioPlayMode.WaitToComplete) End If a2 = (s 60) Mod 10 '分2 a1 = (s 60) 10 '分1 a3 = (s Mod 60) 10 '秒1 a4 = (s Mod 60) Mod 10 '秒2 PictureBox1.Image = greenimg.Images(a1) PictureBox2.Image = greenimg.Images(a2) PictureBox3.Image = greenimg.Images(a3) PictureBox4.Image = greenimg.Images(a4) PictureBox5.Image = dotimg.Images(0) ElseIf s >= 0 Then a2 = (s 60) Mod 10 a1 = (s 60) 10 a3 = (s Mod 60) 10 a4 = (s Mod 60) Mod 10 PictureBox1.Image = redimg.Images(a1) PictureBox2.Image = redimg.Images(a2) PictureBox3.Image = redimg.Images(a3) PictureBox4.Image = redimg.Images(a4) PictureBox5.Image = dotimg.Images(1) My.Computer.Audio.Play(Application.StartupPath & "waveEmail.wav", AudioPlayMode.WaitToComplete) Else PictureBox1.Visible = False PictureBox2.Visible = False PictureBox3.Visible = False PictureBox4.Visible = False PictureBox5.Visible = False My.Computer.Audio.Play(Application.StartupPath & "waveend.wav", AudioPlayMode.WaitToComplete) PictureBox6.Visible = True Timer1.Enabled = False End IfEnd SubPrivate Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick PPTisPlay = False '回调fillactivewindowslist Win32API.EnumWindowsDllImport(New Win32API.EnumWindowsCallback(AddressOf _ FillActiveWindowsList), 0) If PPTisPlay Then If s > 0 Then PictureBox1.Visible = True PictureBox2.Visible = True PictureBox3.Visible = True PictureBox4.Visible = True PictureBox5.Visible = True PictureBox6.Visible = False Timer1.Start() Else PictureBox1.Visible = False PictureBox2.Visible = False PictureBox3.Visible = False PictureBox4.Visible = False PictureBox5.Visible = False PictureBox6.Visible = True End If Else Dim a1, a2, a3, a4 As Integer s = AllTime a2 = (s 60) Mod 10 a1 = (s 60) 10 a3 = (s Mod 60) 10 a4 = (s Mod 60) Mod 10 PictureBox1.Image = greenimg.Images(a1) PictureBox2.Image = greenimg.Images(a2) PictureBox3.Image = greenimg.Images(a3) PictureBox4.Image = greenimg.Images(a4) PictureBox5.Image = dotimg.Images(0) PictureBox1.Visible = True PictureBox2.Visible = True PictureBox3.Visible = True PictureBox4.Visible = True PictureBox5.Visible = True PictureBox6.Visible = False End If If Win32API.GetAsyncKeyState(160) Then MsgBox("hide mode off!") hideon = False Me.Show() End If End Sub(5)托盘显示 通过NotifyIcon控件实现托盘Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Hide() NotifyIcon1.Visible = True NotifyIcon1.Text = "PPT倒计时器" End Sub(6) 自动关机 自动关机是通过内核函数NtShutdownSystem和 RtlAdjustPrivilege实现的.Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick If Timer1.Enabled = False Then Win32API.RtlAdjustPrivilege(SE_SHUTDOWN_PRIVILEGE, 1, 0, 0) Win32API.NtShutdownSystem(POWEROFF) End If End SubEnd Class6、 结束语经过一段时间的努力,PPT计时系统基本开发完毕。其功能基本符合用户需求,能够完成基本需求,同时对普通用户的需求也进行一定的关注。 但是由于设计时间较短,所以该软件还有许多不尽如人意的地方,比如无法自定义计时窗口,用户界面不够美观,出错处理不够细致等多方面问题。这些都有待进一步改善。参考文献1 .NET 3.5与VB 2008高级编程(第3版).(美)特洛森 著 姜玲玲 唐明霞 译.清华大学出版社.2009年10月2 精通Windows API函数、接口、编程实例(附光盘).范文庆 周彬彬 安靖.人民邮电出版社.2009年2月第1版3 通用倒计时程序.姜卫东 华云.电脑知识与技术.1999.12期4 利用VB实现可重复使用的倒计时器.胡晓娟 王兰.新疆师范大学学报(自然科学版).2007年 03期专心-专注-专业