登录社区:用户名: 密码: 忘记密码 网页功能:加入收藏 设为首页 网站搜索  

文档

下载

图书

论坛

安全

源码

硬件

游戏
首页 | 信息 | 空间 | VB | VC | Delphi | Java | Flash | 补丁 | 控件 | 安全 | 黑客 | 电子书 | 笔记本 | 手机 | MP3 | 杀毒 | QQ群 | 产品库 | 分类信息 | 编程网站
  立华软件园 - Visual Basic 专区 - 技术文档 - API函数 技术文章 | VB源代码 | 电子图书 | VB网站 | 相关下载 | 在线论坛 | QQ群组 | 搜索   
 VB技术文档
  · 窗体界面
  · 系统控制
  · VB.Net
  · 多媒体
  · 网络编程
  · API函数
  · 游戏编程
  · 数据报表
  · 其他文档
 VB源代码
  · 窗体界面
  · 文件目录
  · 多媒体
  · 网络编程
  · 系统API
  · 数据报表
  · 游戏编程
  · VBA办公
  · 其他代码
 VB论坛
  · Visual Basic 讨论区
  · VB.Net 讨论区
  · VB数据库开发讨论区
  · VB系统API讨论区
 其他VB资源
  · VB下载资源
  · VB电子图书
  · VB QQ群组讨论区
  · VB 其他网站资源




shell函数能以同步方式打开一个exe文件
发表日期:2003-12-09作者:[] 出处:  

方法一:

Private Type STARTUPINFO

   cb As Long

   lpReserved As String

   lpDesktop As String

   lpTitle As String

   dwX As Long

   dwY As Long

   dwXSize As Long

   dwYSize As Long

   dwXCountChars As Long

   dwYCountChars As Long

   dwFillAttribute As Long

   dwFlags As Long

   wShowWindow As Integer

   cbReserved2 As Integer

   lpReserved2 As Long

   hStdInput As Long

   hStdOutput As Long

   hStdError As Long

 End Type

 Private Type PROCESS_INFORMATION

   hProcess As Long

   hThread As Long

   dwProcessID As Long

   dwThreadID As Long

 End Type

 Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal _

   hHandle As Long, ByVal dwMilliseconds As Long) As Long

 Private Declare Function CreateProcessA Lib "kernel32" (ByVal _

   lpApplicationName As String, ByVal lpCommandLine As String, ByVal _

   lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _

   ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _

   ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As String, _

   lpStartupInfo As STARTUPINFO, lpProcessInformation As _

   PROCESS_INFORMATION) As Long

 Private Declare Function CloseHandle Lib "kernel32" _

   (ByVal hObject As Long) As Long

 Private Declare Function GetExitCodeProcess Lib "kernel32" _

   (ByVal hProcess As Long, lpExitCode As Long) As Long

 Private Const NORMAL_PRIORITY_CLASS = &H20&

 Private Const INFINITE = -1&

 Public Function ExecCmd(cmdline$)

   Dim proc As PROCESS_INFORMATION

   Dim start As STARTUPINFO

   ' Initialize the STARTUPINFO structure:

   start.cb = Len(start)

   ' Start the shelled application:

   ret& = CreateProcessA(vbNullString, cmdline$, 0&, 0&, 1&, _

    NORMAL_PRIORITY_CLASS, 0&, vbNullString, start, proc)

   ' Wait for the shelled application to finish:

    ret& = WaitForSingleObject(proc.hProcess, INFINITE)

    Call GetExitCodeProcess(proc.hProcess, ret&)

    Call CloseHandle(proc.hThread)

    Call CloseHandle(proc.hProcess)

    ExecCmd = ret&

 End Function

 Sub Form_Click()

   Dim retval As Long

   retval = ExecCmd("notepad.exe")

   MsgBox "notepad Process Finished, Exit Code " & retval

   retval = ExecCmd("calc.exe")

   MsgBox "calc Process Finished, Exit Code " & retval

 End Sub

方法二:

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

Private Const SYNCHRONIZE = &H100000

Private Const INFINITE = &HFFFF   ' Infinite timeout

Private Const WAIT_TIMEOUT = &H102&

Public Function ShellForWait(sAppName As String, Optional ByVal lShowWindow As VbAppWinStyle = vbMinimizedFocus, Optional ByVal lWaitTime As Long = 0) As Boolean

  Dim lID As Long, lHnd As Long, lRet As Long

  On Error Resume Next

  lID = Shell(sAppName, lShowWindow)

  If lID > 0 Then

    lHnd = OpenProcess(SYNCHRONIZE, 0, lID)

    If lHnd <> 0 Then

      Do

        lRet = WaitForSingleObject(lHnd, lWaitTime)

        DoEvents

      Loop While lRet = WAIT_TIMEOUT

      CloseHandle lHnd

      ShellForWait = True

    Else

      ShellForWait = False

    End If

  Else

    ShellForWait = False

  End If

End Function

ShellForWait("notepad.exe",,&HFFFF)

方法三:

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long

Private Const SYNCHRONIZE = &H100000  '进程同步

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

Private Const INFINITE = &HFFFFFFFF

Private Sub cmdOpen_Click()

  OpenFileWait "C;\windows\HH.exe ", "Help.chm"

End Sub

Private Sub OpenFileWait(tkShellFile As String, tkFileName As String)

  wndID = Shell(tkFileName, vbNormalFocus)

  wnd = OpenProcess(SYNCHRONIZE, 0, wndID)

  WaitForSingleObject wnd, INFINITE

  CloseHandle wnd

End Sub

我来说两句】 【发送给朋友】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 shell函数能以同步方式打开一个exe文件

 ■ [欢迎对本文发表评论]
用  户:  匿名发出:
您要为您所发的言论的后果负责,故请各位遵纪守法并注意语言文明。

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放 / 友情链接  
Copyright ©2001-2006 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00181