一、设置 OnTimer 事件
要实现监视系统,首先要实现的是 OnTimer 事件,就是要程序每隔一段时间去“检查”一下当前系统中有哪些程序在运行。
你可装载 Timer 控件,设置 Interval 属性为“60000”
这样系统差不多会每隔1分钟就会“检查”一下当前系统有哪些程序正在运行。
如果你觉得间隔时间太短,可以改用如下代码:
Private Sub Timer1_Timer()
Dim n As Integer
n = n + 1
If n = 2 Then″检查″ ′这里设置为2分钟,你可自己改
End Sub
二、监视系统的运行
接下来的问题是怎样去“检查”当前系统中有哪些程序在运行。
方法一:我们知道,Windows 程序基本上都是以窗口的形式运行的,每个程序都对应一个主窗口和若干子窗口,我们只要用 API函数 GetWindow 获取每个程序的主窗口的句柄 HWND,接着用 API 函数 GetWindowText 得到这些窗口的标题,就可以判断到底是哪些程序在运行了。
方法二:使用 API 函数 FindWindow 直接查找
我们这里就用方法二(比较简单)。
三、关闭程序
发现不适当的程序,关闭它,可以用 API 函数 PostMessage。
四、程序示例
下面给出一个实例,它是用 VB 5.0 编制而成的。本程序每隔 2 分钟“检查”一下窗口。如果运行的是“扫雷”、“红心大战”等游戏,就强行关闭它,并发出警告。具体程序代码如下:
1、建立基于对话框的应用程序,标题为“系统监视器”,装载 2 个 CommandButton 控件,Caption 属性分别为:“开始监视”、“程序结束”。
2、首先声明API 函数 FindWindow 及程序所需要的各变量
Private Declare Function FindWindow Lib ″user32″ Alias ″FindWindowA″(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function PostMessage Lib ″user32″ Alias″PostMessageA″ (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Const WM-CLOSE = &H10
Const WM-QUIT = &H12
Dim Handle As Integer
Dim n As Integer
3、定义关闭程序窗口的子程序
Sub CloseWin() ′关闭指定窗口
Dim WinText(1 To 3) As String
Dim i As Integer
WinText(1) = ″扫雷″
′关闭下面的3个游戏,各位可以自己定义,不过程序窗口的标题一定要对,不然程序是不会被关闭的。
WinText(2) =″Microsoft 网上红心大战″
WinText(3) = ″纸牌″
For i = 1 To 3
Handle = FindWindow(vbNullString, WinText(i))
PostMessage Handle, WM-CLOSE, 0, 0
Next
If Handle <> 0 Then MsgBox ″呵呵,你又在偷玩游戏″
End Sub
最后的补充:如果想要做一个非常完整的系统监视程序,那么你可要花些时间了。
第1步:首先,修改注册表,在计算机启动时就运行本程序,并且不能关闭。
第2步:要调用 API 函数使本程序更隐蔽些。
第3步:还需要随时修改检测的“窗口标题”,当有人运行游戏程序时,把他玩游戏开始时间和玩得什么游戏,保存到文件中去等等功能。
本程序用 VB 5.0 编译通过,在中文 Windows 98 环境下运行良好 。
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/