微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题Shell的异步执行处理
栏目软件世界
作者郭丽华
发布1999年第17期13版
  利用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
  Do Events
  Loop While lngexitcode = Still_Active
  ……
  以上实例的运行结果是,程序循环直到记事本程序退出,才会继续运行下面的VB程序,其中,strWinDir =Environ("windir")语句是通过环境变量获得当前系统的Window目录。这样就很好地解决了Shell语句的异步执行问题。