VB无所不能之六:对程序运行的监控
——作者:钟声
转眼间,本系列文章已经写到了第六个,今天写点什么呢?
还是得写,看似VB做不到的事情,那么今天起就写写VB对操作系统的控制吧。
首先,说一说,VB对于被调用后的程序的监控方法。
原型函数简介:
WaitForSingleObject
位置: Kernel32.dll
VB声明:Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
说明:
参数hHandle是一个事件的句柄,第二个参数dwMilliseconds是时间间隔。如果事件是有信号状态返回WAIT_OBJECT_0,如果时间超过dwMilliseconds值但时间事件还是无信号状态则返回WAIT_TIMEOUT。
hHandle可以是下列对象的句柄:
Change notification
Console input
Event
Job
Memory resource notification
Mutex
Process
Semaphore
Thread
Waitable timer
WaitForSingleObject函数用来检测hHandle事件的信号状态,当函数的执行时间超过dwMilliseconds就返回,但如果参数dwMilliseconds为INFINITE时函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去,直到WaitForSingleObject有返回值才执行后面的代码。此外,当dwMilliseconds设置为特殊值0时,测试hHandle核心对象是否被激发,函数立即返回。
返回值:
WAIT_ABANDONED 0x00000080:当hHandle为mutex时,如果拥有mutex的线程在结束时没有释放核心对象会引发此返回值。
WAIT_OBJECT_0 0x00000000 :核心对象已被激活
WAIT_TIMEOUT 0x00000102:等待超时
WAIT_FAILED 0xFFFFFFFF :出现错误,可通过GetLastError得到错误代码。
CloseHandle
位置: Kernel32.dll
VB声明:Declare Function CloseHandle Lib "kernel32" Alias "CloseHandle" (ByVal hObject As Long) As Long
说明 :
关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。涉及文件处理时,这个函数通常与vb的close命令相似。应尽可能的使用close,因为它支持vb的差错控制。注意这个函数使用的文件句柄与vb的文件编号是完全不同的
返回值:
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
hObject Long,欲关闭的一个对象的句柄
注解
除非对内核对象的所有引用都已关闭,否则该对象不会实际删除
OpenProcess
位置: Kernel32.dll
VB声明:Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
说明:
OpenProcess 函数用来打开一个已存在的进程对象,并返回进程的句柄。
返回值:
如成功,返回值为指定进程的句柄。
如失败,返回值为空,可调用GetLastError获得错误代码。
好,我们来做一下实验:
步骤1:建立一个项目;
步骤2:在窗口上建立一个按钮;
步骤3:在默认窗体中加入如下代码:
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Const INFINITE = -1&
Const SYNCHRONIZE = &H100000
Private Sub Command1_Click()
Dim i As Long
Dim r As Long
Dim p As Long
i = Shell("NOTEPAD.EXE", vbNormalFocus)
p = OpenProcess(SYNCHRONIZE, False, i)
r = WaitForSingleObject(p, INFINITE)
r = CloseHandle(p)
MsgBox "记事本已经关闭"
End Sub
运行该程序得到如下画面:
当点击“Command1”的时候,记事本被打开,当关闭记事本的时候,弹出提示框“记事本已经关闭”。
本程序演示了,如何用API控制VB打开的程序,的简单应用。
'
'
'
钟声写的关于Java方面的书:
分享到:
相关推荐
VB代码VB小程序:实现USB摄像头视频图像的监控、截图、录像.pdf
vb的远程监控程序vb的远程监控程序vb的远程监控程序vb的远程监控程序
VB 程序运行列表 VB 程序运行列表 VB 程序运行列表
VB初学练习程序:字体设置. 提供VB初学者的练习小程序。
VB无所不能系列收集于网络,全文共7部分,包含原码。 主要内容: 1、指针 2、图像格式转换 3、获取消息钩子 4、透明和半透明窗体 5、创建标准DLL 6、监控运行程序 7、多线程
检测程序是否正在运行或文件是否正在使用 免资源分,欢迎下载
vb6.0制作。可以设定某程序到某一时间运行。但暂时只能添加单一程序。就是指运行时不能设定多个任务。但可以运行多个本程序。ps:后来又添加了一个回车触发添加的函数。但没有必要再上传了。把那个函数代码写在下面,...
VB打印任务监控程序的源代码,适时获得当前打印机的任务状态,列出正在打印的任务,同时对所有任务进行管理 ,可结束和暂停任务
VB编程源代码 15在关闭程序对话框中隐藏运行程序名称VB编程源代码 15在关闭程序对话框中隐藏运行程序名称VB编程源代码 15在关闭程序对话框中隐藏运行程序名称VB编程源代码 15在关闭程序对话框中隐藏运行程序名称VB...
常用程序集合,程序说明:http://blog.csdn.net/linjimu/archive/2008/02/19/2105387.aspx 用到的知识点: XML文件的读写操作。 文件的拖放操作。 ListView的应用、操作。 IconExtractor读取任何文件的图标。
一位朋友说。...启动windows时自动运行本程序的设置(修改注册表..CurrentVersion\Run),Process打开新程序、强制结束进程。 程序和界面说明:http://blog.csdn.net/linjimu/archive/2008/10/06/3023532.aspx
VB实现的屏幕监控程序包括监控端和被监控端。VB实现的屏幕监控程序包括监控端和被监控端。一个服务端,一个客户端,监控屏幕,有点像灰鸽子。
VB程序VB代码:摄像头视频图像的监控、截图、录像(改进)
VB文件夹监控、自动同步备份程序,可将指定文件夹自动同步备份到另一文件夹,可指定按时间备份,或者是按文件夹有改动时备份,程序本身具有文件夹自动监控功能,适时监视文件夹的变化。
vb网址关键字过滤程序代码,网址监控狗,含有指定关键词的网址将被阻止,保护网站安全。
用VB6 编写的程序 实现了程序不二次加载,并可以防止误关闭等功能。
此文件为源代码,VB2010编写,可是实现程序自动更新,把这个程序的文件打包到安装文件里,用AppStart启动程序,自动下载配置文件比较服务器与本地的是否相同,如果不相同则下载服务器文件替换本地文件然后启动真正的...
摘要:VB源码,API专区,API VB使用API函数实现网络程序的监控,本例所监控的程序是附件中的:纸牌游戏、空当接龙游戏、扫雷游戏。当点击“网络监控开始”按钮后,随时打开这三款游戏后,本程序会弹出一个对话框,...
VB课程设计 包括报告及程序,据对能运行 而且报告格式正规
VB学习辅助程序:[错题本]源代码,基于数据库的程序,程序功能没有细致研究,好像是存储一些错题,方便日后浏览用的,对此感冒到不妨自己下载玩玩,程序在VB6下顺利编译。