控制程序

chinasqf 2003-06-20 02:08:28
Const SYNCHRONIZE = &H100000
Const INFINITE = &HFFFFFFFF
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 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 Long


Private Sub Command1_Click()

shellzx = App.Path & "\test.cer"

Dim pId As Long, pHnd As Long
pId = ShellExecute(1234, "", shellzx, "", "", 1)
pHnd = OpenProcess(SYNCHRONIZE, 0, pId)
If pHnd <> 0 Then
Call WaitForSingleObject(pHnd, INFINITE)
Call CloseHandle(pHnd)
End If


MsgBox "OK"

End Sub

为什么控制不了上面的进程,上面的进程还没有关闭 MSGBOX “ok” 就执行了。PHND每次返回来的值都是空的。
...全文
70 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdknet 2003-06-20
  • 打赏
  • 举报
回复
主要是这个 ShellExecute API 是以异步方式执行的
cdknet 2003-06-20
  • 打赏
  • 举报
回复
因为 pId = ShellExecute(1234, "", shellzx, "", "", 1)会异步执行的,所以还没有执行完下一句就开始执行了,这样当然pID为空咯,要在 这句后面进行延时操作
bydisplay 2003-06-20
  • 打赏
  • 举报
回复
加一段延时程序看看

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧