Option Explicit'常量定义 '程序的显示方式 Private Const SW_SHOWNORMAL = 1 Private Const SW_SHOW = 5 Private Const SW_HIDE = 0 Private Const SW_MINIMIZE = 6 Private Const SW_MAXIMIZE = 3 Private Const SW_RESTORE = 9Public Const WM_CLOSE = &H10'Synchronize Public Const INFINITE = &HFFFF Private Const NORMAL_PRIORITY_CLASS = &H20 Public Const Synchronize = &H100000 Public Const REALTIME_PRIORITY_CLASS = &H100'结构体 Private Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End TypePrivate Type PROCESS_INFORMATION hProcess As Long hThread As Long dwProcessId As Long dwThreadId As Long End TypePrivate 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'启动一个应用程序(资源管理器方式) Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ (ByVal hWnd As Long, ByVal lpOperation As String, _ ByVal lpFile As String, ByVal lpParameters As String, _ ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPublic Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _ ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long'Dim Rc As Long 'Rc = ShellExecute(Me.hwnd, "Open", "CPUID.TXT", "", "E:\", SW_SHOWNORMAL) ' 调用窗口句柄,执行的操作,文件名,"",文件所在目录,显示方式 '返回值: 如果大于32则调用成功,小于32则调用失败 '--------------------------------------------------------- '建立一个新的进程或线程 Public Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" _ (ByVal lpApplicationName As String, _ ByVal lpCommandLine As String, _ ByVal lpProcessAttributes As Long, _ ByVal lpThreadAttributes As Long, _ ByVal bInheritHandles As Long, _ ByVal dwCreationFlags As Long, _ lpEnvironment As Any, _ ByVal lpCurrentDirectory As String, _ lpStartupInfo As STARTUPINFO, _ lpProcessInformation As PROCESS_INFORMATION) As Long'参数说明: 'lpApplicationName 可执行文件或模块的名字.如果lpCommandLine是NULL,则CreateProcess _ 执行这个参数中指定的程序. 'lpCommandLine 如果lpApplicationName是NULL,那么这个参数中程序要启动的程序名字 _ 如果lpApplicationName和lpCommandLine都是NULL , 那么程序的名字在 _ lpApplicationName中指定 , 参数在lpCommandLine中指定. 'lpProcessAttributes SECURITY_ATTRIBUTES结构,它定义进程是否能够被继承,一般设为0, _ 但一般将其定义为ByVal as Long, (**这与API浏览器中不同) 'lpThreadAttributes SECURITY_ATTRIBUTES结构,它定义线程是否能够被断承.一般设为0, _ 但一般将其定义为ByVal as Long, (**这与API浏览器中不同) 'bInheritHandles 布尔值,它表示新创建的进程能否继承调用进程的句柄. 'dwCreationFlags 为进程指定附加配置参数的标志. 'lpEnvironment 包含一个以NULL结束的环境参数列表的字符串.如果参数被设为NULL, _ 则当前的环境被用在新的进程中. 'lpCurrentDriectory 指向新进程的默认目录的字符串. 'lpStartupInfo STARTUPINFO结构,,它配置新进程的外观. 'lpProcessInformation PROCESS_INFORMATION结构,返回新建进程的有关信息. '返回值 如果调用成功,则返回一个非零值.如果返回值为0,则调用失败,调用函 _ GetLastError可以获取更多的错误信息.'--------------------------------------------------------------------------- '等待进程返回或者发生超时.负责调用CreateProcess这个同步操作. Public Declare Function WaitForSingleObject Lib "kernel32" _ (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long'参数说明: 'hHandle 等待进程的句柄 'dwMilliseconds 等待的时间段,以毫秒为单位.;如果它被设为INFINITE,则这个API将无限期的 _ 等待的进程返回. '返回值 如果调用成功,则返回引起这个函数返回的值,它可以是以下几个值: _ WAIT_ABANDONED,WAIT_OBJECT_O,或者WAIT_TIMEOUT.如果发生了错误,则返回 _ WAIT_FAILED. '--------------------------------------------------------------------------- '关闭以前打开的进程. 'Public Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long 'Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPublic Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)'参数说明: 'hObject 被关闭的句柄. '返回值 如果调用成功,返回一个非零值.若失败则返回值0. '---------------------------------------------------------------------------'参数说明: 'FileName 要打开的文件名 'Wait 布尔值,是否同步启动 'DoPath 文件的所在目录 '返回值 =1 成功,=0 失败 '注:如果是关联打开一个文件,必须用异步方式Public Function Spawn(ByVal FileName As String, _ Wait As Boolean, _ DoPath As String) As Long Dim Proc As PROCESS_INFORMATION Dim Start As STARTUPINFO Dim Rc As Long Dim Mdriv As String Dim OpenName As String Dim OpenPath As String OpenName = EditFile(FileName): OpenPath = MyPath(FileName)
If Wait Then '如果T,同步启动 Start.cb = Len(Start) '建立一个新的进程 Rc = CreateProcess(FileName, OpenPath, _ ByVal 0, ByVal 0, 1, _ NORMAL_PRIORITY_CLASS, _ ByVal 0, OpenPath, _ Start, Proc) '等待,直到进程结束 Rc = WaitForSingleObject(Proc.hProcess, INFINITE) '关闭进程 Rc = CloseHandle(Proc.hProcess) Else '否则,异步启动,(资源管理器启动) Rc = ShellExecute(0, "Open", OpenName, "", OpenPath, SW_MAXIMIZE) End If Spawn = Rc End Function'启动EXE文件,不等待,返回进程句柄 Public Function OpenExe(ByVal FileName As String, _ DoPath As String) As Long Dim Proc As PROCESS_INFORMATION Dim Start As STARTUPINFO Dim Rc As Long Dim Mdriv As String Dim A As String Dim b As String A = EditFile(FileName)
ChDrive DoPath: ChDir DoPath Rc = CreateProcess(A, DoPath, _ ByVal 0, ByVal 0, 1, _ NORMAL_PRIORITY_CLASS, _ ByVal 0, vbNullString, _ Start, Proc) OpenExe = Proc.hProcess ChDrive "C:\": ChDir "C:\" End Function '关闭EXE文件 PROID=进程句柄 Public Function CloseExe(ProID As Long) Dim Rc As Long 'Call TerminateProcess(ProID, 0) '关闭进程 Call ExitPro(ProID) End Function
'程序的显示方式
Private Const SW_SHOWNORMAL = 1
Private Const SW_SHOW = 5
Private Const SW_HIDE = 0
Private Const SW_MINIMIZE = 6
Private Const SW_MAXIMIZE = 3
Private Const SW_RESTORE = 9Public Const WM_CLOSE = &H10'Synchronize
Public Const INFINITE = &HFFFF
Private Const NORMAL_PRIORITY_CLASS = &H20
Public Const Synchronize = &H100000
Public Const REALTIME_PRIORITY_CLASS = &H100'结构体
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End TypePrivate Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long
End TypePrivate 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'启动一个应用程序(资源管理器方式)
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hWnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPublic Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long'Dim Rc As Long
'Rc = ShellExecute(Me.hwnd, "Open", "CPUID.TXT", "", "E:\", SW_SHOWNORMAL)
' 调用窗口句柄,执行的操作,文件名,"",文件所在目录,显示方式
'返回值: 如果大于32则调用成功,小于32则调用失败
'---------------------------------------------------------
'建立一个新的进程或线程
Public Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" _
(ByVal lpApplicationName As String, _
ByVal lpCommandLine As String, _
ByVal lpProcessAttributes As Long, _
ByVal lpThreadAttributes As Long, _
ByVal bInheritHandles As Long, _
ByVal dwCreationFlags As Long, _
lpEnvironment As Any, _
ByVal lpCurrentDirectory As String, _
lpStartupInfo As STARTUPINFO, _
lpProcessInformation As PROCESS_INFORMATION) As Long'参数说明:
'lpApplicationName 可执行文件或模块的名字.如果lpCommandLine是NULL,则CreateProcess _
执行这个参数中指定的程序.
'lpCommandLine 如果lpApplicationName是NULL,那么这个参数中程序要启动的程序名字 _
如果lpApplicationName和lpCommandLine都是NULL , 那么程序的名字在 _
lpApplicationName中指定 , 参数在lpCommandLine中指定.
'lpProcessAttributes SECURITY_ATTRIBUTES结构,它定义进程是否能够被继承,一般设为0, _
但一般将其定义为ByVal as Long, (**这与API浏览器中不同)
'lpThreadAttributes SECURITY_ATTRIBUTES结构,它定义线程是否能够被断承.一般设为0, _
但一般将其定义为ByVal as Long, (**这与API浏览器中不同)
'bInheritHandles 布尔值,它表示新创建的进程能否继承调用进程的句柄.
'dwCreationFlags 为进程指定附加配置参数的标志.
'lpEnvironment 包含一个以NULL结束的环境参数列表的字符串.如果参数被设为NULL, _
则当前的环境被用在新的进程中.
'lpCurrentDriectory 指向新进程的默认目录的字符串.
'lpStartupInfo STARTUPINFO结构,,它配置新进程的外观.
'lpProcessInformation PROCESS_INFORMATION结构,返回新建进程的有关信息.
'返回值 如果调用成功,则返回一个非零值.如果返回值为0,则调用失败,调用函 _
GetLastError可以获取更多的错误信息.'---------------------------------------------------------------------------
'等待进程返回或者发生超时.负责调用CreateProcess这个同步操作.
Public Declare Function WaitForSingleObject Lib "kernel32" _
(ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long'参数说明:
'hHandle 等待进程的句柄
'dwMilliseconds 等待的时间段,以毫秒为单位.;如果它被设为INFINITE,则这个API将无限期的 _
等待的进程返回.
'返回值 如果调用成功,则返回引起这个函数返回的值,它可以是以下几个值: _
WAIT_ABANDONED,WAIT_OBJECT_O,或者WAIT_TIMEOUT.如果发生了错误,则返回 _
WAIT_FAILED.
'---------------------------------------------------------------------------
'关闭以前打开的进程.
'Public Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
'Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPublic Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)'参数说明:
'hObject 被关闭的句柄.
'返回值 如果调用成功,返回一个非零值.若失败则返回值0.
'---------------------------------------------------------------------------'参数说明:
'FileName 要打开的文件名
'Wait 布尔值,是否同步启动
'DoPath 文件的所在目录
'返回值 =1 成功,=0 失败
'注:如果是关联打开一个文件,必须用异步方式Public Function Spawn(ByVal FileName As String, _
Wait As Boolean, _
DoPath As String) As Long
Dim Proc As PROCESS_INFORMATION
Dim Start As STARTUPINFO
Dim Rc As Long
Dim Mdriv As String
Dim OpenName As String
Dim OpenPath As String
OpenName = EditFile(FileName): OpenPath = MyPath(FileName)
If Wait Then '如果T,同步启动
Start.cb = Len(Start)
'建立一个新的进程
Rc = CreateProcess(FileName, OpenPath, _
ByVal 0, ByVal 0, 1, _
NORMAL_PRIORITY_CLASS, _
ByVal 0, OpenPath, _
Start, Proc)
'等待,直到进程结束
Rc = WaitForSingleObject(Proc.hProcess, INFINITE)
'关闭进程
Rc = CloseHandle(Proc.hProcess)
Else
'否则,异步启动,(资源管理器启动)
Rc = ShellExecute(0, "Open", OpenName, "", OpenPath, SW_MAXIMIZE)
End If
Spawn = Rc
End Function'启动EXE文件,不等待,返回进程句柄
Public Function OpenExe(ByVal FileName As String, _
DoPath As String) As Long
Dim Proc As PROCESS_INFORMATION
Dim Start As STARTUPINFO
Dim Rc As Long
Dim Mdriv As String
Dim A As String
Dim b As String
A = EditFile(FileName)
ChDrive DoPath: ChDir DoPath
Rc = CreateProcess(A, DoPath, _
ByVal 0, ByVal 0, 1, _
NORMAL_PRIORITY_CLASS, _
ByVal 0, vbNullString, _
Start, Proc)
OpenExe = Proc.hProcess
ChDrive "C:\": ChDir "C:\"
End Function
'关闭EXE文件 PROID=进程句柄
Public Function CloseExe(ProID As Long)
Dim Rc As Long
'Call TerminateProcess(ProID, 0)
'关闭进程
Call ExitPro(ProID)
End Function
算了有些问题说不清。