摘 要 在電腦、網(wǎng)絡(luò)普及的今天,PPT(PowerPoint)以其制作簡(jiǎn)單,功能強(qiáng)大,被廣泛運(yùn)用在專題講座、工作匯報(bào)、項(xiàng)目申報(bào)、單位年終述職、述廉等工作中。 比如在單位年終述職、述廉工作中,因?yàn)閰⒓拥娜藛T較多,為了公平起見(jiàn),給每人限定時(shí)間用PPT演示文稿對(duì)自己的工作做介紹,所以設(shè)計(jì)一款小程序?qū)PT演示文稿進(jìn)行記時(shí)有一定的實(shí)用價(jià)值,本文以限定6分鐘演示時(shí)間為例,介紹VB程序設(shè)計(jì)、實(shí)現(xiàn)的全過(guò)程。
【關(guān)鍵詞】VB程序設(shè)計(jì) PPT演示文稿 記時(shí)
1 引言
本程序?yàn)轳v留程序,設(shè)計(jì)監(jiān)測(cè)、顯示、處理三個(gè)模塊,監(jiān)測(cè)模塊一旦監(jiān)測(cè)到PPT演示文稿運(yùn)行,立即調(diào)用顯示模塊顯示PPT文稿演示時(shí)間,如果演示時(shí)間到,處理模塊將關(guān)閉PPT演示文稿,并提示:演示時(shí)間到。
程序流程圖如圖1所示。
2 實(shí)現(xiàn)過(guò)程
2.1 處理模塊的實(shí)現(xiàn)
該模塊的主要功能是關(guān)閉PPT文件,定義一個(gè)Killppt(Sppt As String)過(guò)程實(shí)現(xiàn)。
Private Sub KILLppt(sPPT As String)
Dim PPTSSot As Long
Dim PPTppss As Long
Dim PPTpe As PPTRY32
PPTSSot = CreateToolhelp32Snapshot(&H2;&, 0&)
If PPTSSot <> -1 Then
PPTpe.PPTSize = Len(PPTpe)
PPTppss = Process32First(PPTSSot, PPTpe)
Do While PPTppss
If LCase$(sPPT) = LCase$(Left(PPTpe.PPTexitfl, InStr(1, PPTpe.PPTexitfl, Chr(0)) - 1)) Then
Dim PPTss11 As Long
Dim PPTcode As Long
PPTss11 = OpenProcess(1, False, PPTpe.PPT32pss)
TerminateProcess PPTss11, PPTcode
CloseHandle PPTss11
End If
PPTppss = Process32Next(PPTSSot, PPTpe)
Loop
CloseHandle (PPTSSot)
End If
End Sub
2.2 監(jiān)測(cè)模塊的實(shí)現(xiàn)
該模塊主要檢測(cè)PPT演示文稿的運(yùn)行,一旦監(jiān)測(cè)到PPT演示文稿啟動(dòng)運(yùn)行,調(diào)用顯示模塊開(kāi)始對(duì)PPT演示文稿運(yùn)行時(shí)間進(jìn)行倒記時(shí),并在屏幕最上方顯示倒記時(shí)效果,一旦設(shè)定的PPT文稿演示時(shí)間到,該模塊調(diào)用處理模塊關(guān)閉PPT演示文稿,并提示“您的演示時(shí)間到”信息;該模塊還有一個(gè)功能就是保證顯示模塊一直處在最上面透明顯示,不因?yàn)檠菔菊卟僮麟娔X影響顯示效果,通過(guò)VB時(shí)鐘控件實(shí)現(xiàn),主要程序代碼如下:
Private Sub Timer1_Timer()
'如何窗體不在最前面,就把窗體放到最前面并透明
If pptrtValue <> SetWindowPos(Me.hwnd, HWND_TOPMOST, Me.CurrentX, Me.CurrentY, 300, 300, SWP_SHOWWINDOW) Then
Call SetWindowPos(Me.hwnd, -1, 0, 0, 0, 0, 3) '調(diào)用窗體處理的API函數(shù),“通用“處申明
Me.BackColor = vbRed '透明色為紅色
SetWindowLong Me.hwnd, -20, GetWindowLong(Me.hwnd, -20) Or &H80000;
SetLayeredWindowAttributes Me.hwnd, vbRed, 0, 1
Label1.BackColor = Me.BackColor
End If
BorderStyle = 0
If Exitppt("POWERPNT.EXE") Then '檢測(cè)進(jìn)程
a = Val(a) - 1
If a = 0 Then
a = 60
b = Val(b) - 1
End If
Label1.Caption = b & "分鐘" & a & "秒" '顯示模塊顯示PPT演示文稿倒計(jì)時(shí)
If b = 0 And a = 1 Then
a = a - 1
Call KILLppt("POWERPNT.EXE") '調(diào)用處理模塊關(guān)閉演示文稿
Label1.Caption = "您的時(shí)間倒,謝謝!"
a = 60
b = 5
End If
Else
a = 60
b = 5
End If
End Sub
2.3 顯示模塊的實(shí)現(xiàn)
顯示模塊也就是程序的界面,程序運(yùn)行后駐留內(nèi)存,當(dāng)監(jiān)控模塊監(jiān)控倒PPT演示文稿運(yùn)行時(shí),程序界面在屏幕左上方出現(xiàn),顯示PPT演示文稿倒記時(shí)效果,程序代碼如下:
Private Sub Form_Load()
Call SetWindowPos(Me.hwnd, -1, 0, 0, 0, 0, 3)
Me.BackColor = vbRed '透明色為紅色
SetWindowLong Me.hwnd, -20, GetWindowLong(Me.hwnd, -20) Or &H80000;
SetLayeredWindowAttributes Me.hwnd, vbRed, 0, 1
Label1.BackColor = Me.BackColor
a = 60
b = 5
End Sub
3 幾點(diǎn)說(shuō)明
(1)為了提高編程效率,本程序使用了以下幾個(gè)窗體處理和程序線程、句柄處理的API函數(shù),可以在窗體代碼的“通用部分”聲明,本文略。
SetWindowPos,SetWindowLon,SetLayerpptedWindowAttrpptibute,GetWindowLong
CreateToolhelp32Snapshot,Process32First,Process32Next,OpenProcess,TerminateProcess, CloseHandle
(2)程序需要的數(shù)據(jù)結(jié)構(gòu)如下,窗體代碼“通用部分”聲明。
Private Type PPTRY32
PPTSize As Long
PPTUge As Long
PPT32pss As Long
PPTfls As Long
PPTexitfl As String * MAX_PPT
End Type
Const PPT_PALL = (&H1; Or &H2;& Or &H4; Or &H8;)
Const MAX_PPT As Integer = 260
Dim a as integer
Dim b as integer
(3)程序在固原市氣象局多年運(yùn)行穩(wěn)定,程序運(yùn)行后駐留內(nèi)存,無(wú)任何操作界面,倒記時(shí)顯示醒目,受到喜愛(ài)。
(4)在窗體代碼“通用部分”申明Exitppt函數(shù),該函數(shù)為Boolean類型,用于遍歷內(nèi)存中是否有PPT文件運(yùn)行,供監(jiān)控模塊調(diào)用,函數(shù)如下:
Function Exitppt(ByVal PPTexe As String) As Boolean
Exitppt = False '先將該函數(shù)過(guò)程賦值為假
Dim PPT_Hshot As Long, PPT_pcess As PROCESSENTRY32
PPT_Hshot = CreateToolhelp32Snapshot(PPT_PALL, 0&) '給系統(tǒng)進(jìn)程創(chuàng)建快照,調(diào)用成功 則返回快照的句柄
PPT_pcess.dwSize = Len(PPT_pcess)
r = Process32First(PPT_Hshot, PPT_pcess) '初始遍歷進(jìn)程
Do While r
If Left$(PPT_pcess.szExeFile, IIf(InStr(1, PPT_pcess.szExeFile, Chr$(0)) > 0, InStr(1, PPT_pcess.szExeFile, Chr$(0)) - 1, 0)) = PPTexe Then 'left '通過(guò)進(jìn)程列表,判斷是否有PPT文件運(yùn)行
Exitppt = True '該函數(shù)返回真 進(jìn)程存在
Exit Do '循環(huán)退出
End If
r = Process32Next(PPT_Hshot, PPT_pcess) '遍歷下一個(gè)進(jìn)程
Loop
End Function
4 程序運(yùn)行效果
參考文獻(xiàn)
[1]王娟,黃耀群.基于C++ Builderppt 的串口通信程序?qū)崿F(xiàn)方法[J].煤礦電氣,2014(02).
作者簡(jiǎn)介
張玉虎,寧夏固原市氣象局工程師,從事氣象設(shè)備保障維護(hù)工作。
作者單位
寧夏固原市氣象局 寧夏回族自治區(qū)固原市 756000