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打开的程序,的简单应用。






 本文转自 useway 51CTO博客,原文链接:http://blog.51cto.com/useway/296290,如需转载请自行联系原作者

相关文章
|
4月前
|
存储 SQL 数据库
工作实战:SAP ABAP 动态创建类型在实际工作中的一个应用场合分享试读版
工作实战:SAP ABAP 动态创建类型在实际工作中的一个应用场合分享试读版
26 0
工作实战:SAP ABAP 动态创建类型在实际工作中的一个应用场合分享试读版
|
7月前
|
人工智能 缓存 Shell
[笔记]Windows核心编程《二十》DLL的高级操作技术(二)
[笔记]Windows核心编程《二十》DLL的高级操作技术(二)
155 0
|
7月前
|
编译器 分布式数据库 C++
[笔记]Windows核心编程《二十》DLL的高级操作技术(一)
[笔记]Windows核心编程《二十》DLL的高级操作技术
|
8月前
一静一动,一张一弛 - 通过具体的两个例子,学习 ABAP 动态断点的使用诀窍试读版
一静一动,一张一弛 - 通过具体的两个例子,学习 ABAP 动态断点的使用诀窍试读版
41 0
|
12月前
|
数据可视化 C++ Windows
非可视化编程的windows窗口 C++ 代码设计:附例程并多多知识点
非可视化编程的windows窗口 C++ 代码设计:附例程并多多知识点
171 0
|
人工智能 缓存 编译器
[笔记]Windows核心编程《二十》DLL的高级操作技术
Windows核心编程《二十》DLL的高级操作技术
235 0
[笔记]Windows核心编程《二十》DLL的高级操作技术
|
移动开发 JSON 小程序
【小程序开篇】小程序架构和配置
【小程序开篇】小程序架构和配置
246 0
【小程序开篇】小程序架构和配置