VB无所不能之六:对程序运行的监控-----转

前端之家收集整理的这篇文章主要介绍了VB无所不能之六:对程序运行的监控-----转前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
作者: 佚名, 出处:IT专家网, 责任编辑: 谢妍妍, 
2010-04-23 11:20
  本文介绍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可以是下列对象的句柄:

 


 Changenotification
  Consoleinput
  Event
  Job
  Memoryresourcenotification
  Mutex
  Process
  Semaphore
  Thread
  Waitabletimer

  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:在默认窗体中加入如下代码


 PrivateDeclareFunctionWaitForSingleObjectLib"kernel32"(ByValhHandleAsLong,ByValdwMillisecondsAsLong)AsLong
  PrivateDeclareFunctionCloseHandleLib"kernel32"(ByValhObjectAsLong)AsLong
  PrivateDeclareFunctionOpenProcessLib"kernel32"(ByValdwDesiredAccessAsLong,ByValbInheritHandleAsLong,ByValdwProcessIdAsLong)AsLong
  ConstINFINITE=-1&
  ConstSYNCHRONIZE=&H100000
  PrivateSubCommand1_Click()
  DimiAsLong
  DimrAsLong
  DimpAsLong
  i=Shell("NOTEPAD.EXE",vbNormalFocus)
  p=OpenProcess(SYNCHRONIZE,False,i)
  r=WaitForSingleObject(p,INFINITE)
  r=CloseHandle(p)
  MsgBox"记事本已经关闭"
  EndSub

  运行该程序得到如下画面:

  

  当点击“Command1”的时候,记事本被打开,当关闭记事本的时候,弹出提示框“记事本已经关闭”。

  本程序演示了,如何用API控制VB打开的程序,的简单应用。

作者钟声 博客地址:http://useway.blog.51cto.com

猜你在找的VB相关文章