电脑报 广告Logo
目录 综合报道 软件世界 硬件周刊 大众网络 OA专刊 游戏广场 评测与市场
当前位置:电脑报电子版 > 1999 年 > 17 期 > 软件世界 > Shell的异步执行处理

《 Shell的异步执行处理 》

  利用VB的Shell语句可以调用外部程序,但因为Shell是异步执行的,如果当外部程序还没有完成任务,VB就会执行下一语句,这样往往会得到错误的结果。如果通过调用API函数GetExitCodeProcess和OpenProcess便能解决这一问题。
  Declare Function GetExitCodeProcess Lib ″kernel32″ Alias ″GetExitCodeProcess″ (ByVal hProcess As Long, lpExitCode As Long) As Long
  Declare Function OpenProcess Lib ″kernel32″ Alias ″OpenProcess″ (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
  Public Const Process_Query_Information = &H400
  Public Const Still_Active = &H103
  Dim strWinDir As String
  Dim pidNotepad As Long
  Dim hProcess As Long
  ……
  strWinDir = Environ(″windir″)
  pidNotepad = Shell(strWinDir & ″\notepad.exe″, vbNormalFocus)
  hProcess = OpenProcess(Process_Query_Information, False, pidNotepad)
  Do
  GetExitCodeProcess hProcess, lngexitcode
  DoEvents
  Loop While lngexitcode = Still_Active
  ……
  以上实例的运行结果是,程序循环直到记事本程序退出,才会继续运行下面的VB程序,其中, strWinDir = Environ(″windir″) 语句是通过环境变量获得当前系统的Window目录。这样就很好地解决了Shell语句的异步执行问题。
(广西 郭丽华)
下载本期推荐软件页 首

312345678 《电脑报》版权所有,电脑报网站编辑部设计制作发布