' '运行一个程序或文档. '函数:RunFile '参数:FilePath 要打开的文件路径 '返回值:无 '注:实际上是 [开始]==>[运行] Public Function RunFile(FilePath As String) Call Shell("rundll32.exe url.dll,FileProtocolHandler " & FilePath, 1) End Function
Private Const INFINITE = &HFFFF Private Const NORMAL_PRIORITY_CLASS = &H20 Private Const SYNCHRONIZE = &H100000 Private Const REALTIME_PRIORITY_CLASS = &H100'/建立一个新的进程或线程 Private 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' '打开一个文件. '函数: ShellFile '参数: ' FileName 要打开的文件名 _ ' Wait 布尔值,是否同步启动: =TRUE 同步, =FALSE 异步 _ ' DoPath 文件的所在目录 '返回值: =1 成功,=0 失败 '*注:如果是打开一个关联文件,必须用异步方式,即Wait=False, ' 例如要直接打开某个 ".DOC" 文档,则 WAIT=FALSE.Public Function ShellFile(ByVal Filename As String, _ Optional WinHwnd As Long = 0, _ Optional Wait As Boolean = False) 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 = FileNameExp(Filename): OpenPath = FilePath(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(WinHwnd, "Open", OpenName, "", OpenPath, SW_MAXIMIZE) End If ShellFile = Rc End Function' '启动EXE文件 '函数:OpenExe '参数:FileName EXE文件名,WorkPath 工作目录. '返回值:该EXE的进程句柄 Public Function OpenExe(ByVal Filename As String, _ Optional WorkPath 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 Dim ExeName As String
On Error Resume Next
ExeName = FileNameExp(Filename) WorkPath = FilePath(Filename) ChDrive Left$(WorkPath, 2) ChDir WorkPath Rc = CreateProcess(ExeName, WorkPath, _ ByVal 0, ByVal 0, 1, _ NORMAL_PRIORITY_CLASS, _ ByVal 0, vbNullString, _ Start, Proc) OpenExe = Proc.hProcess End Function' '取文件名,有扩展名 '函数:FileNameExp '参数: Fname 文件绝对路径. '返回值:文件名. '如:"C:\PROMAS\AA.EXE",则返回 "AA.EXE" Public Function FileNameExp(Fname As String) As String Dim A As Integer Dim B As Integer Dim JlStr As String FileNameExp = "" B = 0 For A = Len(Fname) To 1 Step -1 If Mid$(Fname, A, 1) = "\" Then B = A: GoTo 100 End If Next A 100: JlStr = Right$(Fname, Len(Fname) - B) FileNameExp = JlStr End Function' '取路径名 '函数:FilePath '参数: Fname 文件绝对路径. '返回值:路径名. '如:"C:\PROMAS\AA.EXE",则返回 "C:\PROMAS\" Public Function FilePath(Fname As String) As String Dim A As Integer Dim B As Integer Dim JlStr As String FilePath = "" B = 0 For A = Len(Fname) To 1 Step -1 If Mid$(Fname, A, 1) = "\" Then B = A: GoTo 100 End If Next A
100: JlStr = Left$(Fname, B) FilePath = JlStr End Function
'运行一个程序或文档.
'函数:RunFile
'参数:FilePath 要打开的文件路径
'返回值:无
'注:实际上是 [开始]==>[运行]
Public Function RunFile(FilePath As String)
Call Shell("rundll32.exe url.dll,FileProtocolHandler " & FilePath, 1)
End Function
Private Const NORMAL_PRIORITY_CLASS = &H20
Private Const SYNCHRONIZE = &H100000
Private Const REALTIME_PRIORITY_CLASS = &H100'/建立一个新的进程或线程
Private 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'
'打开一个文件.
'函数: ShellFile
'参数:
' FileName 要打开的文件名 _
' Wait 布尔值,是否同步启动: =TRUE 同步, =FALSE 异步 _
' DoPath 文件的所在目录
'返回值: =1 成功,=0 失败
'*注:如果是打开一个关联文件,必须用异步方式,即Wait=False,
' 例如要直接打开某个 ".DOC" 文档,则 WAIT=FALSE.Public Function ShellFile(ByVal Filename As String, _
Optional WinHwnd As Long = 0, _
Optional Wait As Boolean = False) 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 = FileNameExp(Filename): OpenPath = FilePath(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(WinHwnd, "Open", OpenName, "", OpenPath, SW_MAXIMIZE)
End If
ShellFile = Rc
End Function'
'启动EXE文件
'函数:OpenExe
'参数:FileName EXE文件名,WorkPath 工作目录.
'返回值:该EXE的进程句柄
Public Function OpenExe(ByVal Filename As String, _
Optional WorkPath 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
Dim ExeName As String
On Error Resume Next
ExeName = FileNameExp(Filename)
WorkPath = FilePath(Filename)
ChDrive Left$(WorkPath, 2)
ChDir WorkPath
Rc = CreateProcess(ExeName, WorkPath, _
ByVal 0, ByVal 0, 1, _
NORMAL_PRIORITY_CLASS, _
ByVal 0, vbNullString, _
Start, Proc)
OpenExe = Proc.hProcess
End Function'
'取文件名,有扩展名
'函数:FileNameExp
'参数: Fname 文件绝对路径.
'返回值:文件名.
'如:"C:\PROMAS\AA.EXE",则返回 "AA.EXE"
Public Function FileNameExp(Fname As String) As String
Dim A As Integer
Dim B As Integer
Dim JlStr As String
FileNameExp = ""
B = 0
For A = Len(Fname) To 1 Step -1
If Mid$(Fname, A, 1) = "\" Then
B = A: GoTo 100
End If
Next A
100:
JlStr = Right$(Fname, Len(Fname) - B)
FileNameExp = JlStr
End Function'
'取路径名
'函数:FilePath
'参数: Fname 文件绝对路径.
'返回值:路径名.
'如:"C:\PROMAS\AA.EXE",则返回 "C:\PROMAS\"
Public Function FilePath(Fname As String) As String
Dim A As Integer
Dim B As Integer
Dim JlStr As String
FilePath = ""
B = 0
For A = Len(Fname) To 1 Step -1
If Mid$(Fname, A, 1) = "\" Then
B = A: GoTo 100
End If
Next A
100:
JlStr = Left$(Fname, B)
FilePath = JlStr
End Function