写了个小东西,中间想调用另一个exe程序,我知道可以用shell,问题是这个样子就必须打包的时候把那个exe打在外面,有没有办法把这个exe封装到我自己生成的exe文件里?
如果不行,用shell函数我有什么办法知道外部的这个exe运行结束了呢?
如果不行,用shell函数我有什么办法知道外部的这个exe运行结束了呢?
解决方案 »
- 关于VB 提取Word中相关信息
- 请指教Winsock问题
- 大侠请进 数据显示(好像有点难度)
- 关于MSHFlexGrid控件的问题,请大家帮忙 在先等待 谢谢谢谢!!
- MDI子窗口怎么实现居中?
- 请问我建立一个active控件,其中有个退出按钮,我使用unload me,然后在其他程序中调用,点击该按钮.系统提示"无法加载和卸载"请问我该如何处
- vs2008中怎么处理bmp文件,怎么定义bitmapfileheader变量
- 为什么这样写就报错啊!?
- 关于Active DLL 问题!!很急!在线等待,应该很简单的。
- 关于MSFlexGrid的问题
- 吐血级问题?怎样构造动态GIF图片的全局调色板?
- 新手上路(取经)
Private Declare Function GetExitCodeProcess Lib "kernel32.dll" (ByVal hProcess As Long, ByRef lpExitCode As Long) As Long
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Private Const PROCESS_QUERY_INFORMATION As Long = (&H400)
Private Const STILL_ACTIVE As Long = &H103Sub ShellWait(FileName As String)
Dim hShell As Long
Dim hProc As Long
Dim lExit As Long
hShell = Shell(FileName, vbNormalFocus)
hProc = OpenProcess(PROCESS_QUERY_INFORMATION, False, hShell)
Do
GetExitCodeProcess hProc, lExit
DoEvents
Loop While lExit = STILL_ACTIVE
End Sub
Private Sub Command1_Click()
ShellWait "C:\WINNT\system32\calc.exe"
MsgBox "运行完毕!"
End Sub
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Public Declare Function ShellExecuteEx Lib "shell32.dll" (SEI As SHELLEXECUTEINFO) As LongPublic Const SEE_MASK_NOCLOSEPROCESS = &H40
Public Type SHELLEXECUTEINFO
cbSize As Long
fMask As Long
hwnd As Long
lpVerb As String
lpFile As String
lpParameters As String
lpDirectory As String
nShow As Long
hInstApp As Long
lpIDList As Long
lpClass As String
hkeyClass As Long
dwHotKey As Long
hIcon As Long
hProcess As Long
End TypePublic Const INFINITE = &HFFFFFFFF
方法一:Dim pId As Long, pHnd As Long
pId = Shell("PathFileName.exe")
pHnd = OpenProcess(SYNCHRONIZE, 0, pId)
If pHnd <> 0 Then
WaitForSingleObject pHnd, INFINITE '等待结束
CloseHandle pHnd
End If
方法二:
Dim SEI As SHELLEXECUTEINFO
With SEI
.cbSize = Len(SEI)
.fMask = SEE_MASK_NOCLOSEPROCESS
.hwnd = 0
.lpVerb = vbNullChar
.lpFile = "PathFileName.*"
.lpParameters = vbNullChar
.lpDirectory = vbNullChar
.nShow = 0
.hInstApp = 0
.lpIDList = 0
End With
If ShellExecuteEx(SEI) <> 0 Then
WaitForSingleObject SEI.hProcess, INFINITE '等待结束
CloseHandle SEI.hProcess
End If
中释放。
XunBaian(蓝水晶) 的我不是很明白,你可以把后面的帮我写一些注释吗?WaitForSingleObjectAPI我没有用过,也没有找到相关的资料。谢谢
LPan008() 我没有在VB中使用过资源文件,你能说的详细点吗?谢谢你
我的问题不是把控件打包在EXE中,是把exe打到exe内部如果解决不了我就用XunBaian(蓝水晶) 的方法了
顺便在问一问,用shell或者shellExecute可以打开别的程序没有问题,但是比如我要用记事本打开个名为123.txt文档,用shell怎么写?也就是说我不仅要打开notepad还要传递参数给他告诉他打开123.txt
,解决后在开一贴放100分,呵呵好久没有散分了
SEI.lpFile = "123.txt"
Shell "notepad.exe " & "F:\ABC.TXT", vbNormalFocus
End Sub
tztz520(午夜逛街)说的也只是限于记事本上吧,其他程序行吗?比如播放器?
SEI.lpFile = "应用程序.exe 应用程序要打开的文件.* 所有其它参数" //路径名、程序名、要打开的文件名(即参数)都在这里写,同时适合于用Shell或:
SEI.lpFile = "应用程序.exe " //如果非可执行程序,则自动找关联的程序打开。
SEI.lpParameters = "应用程序要打开的文件.*"
SEI.lpDirectory = "路径"