是这样的我需要调用冰点还原也就是deep freeze里的dfc.exe来查询冰点状态
而shell运行dfc.exe get / isfrozen后dfc.exe会运行大约3秒左右然后返回来个退出码,注意不是文本信息.
然后我用vb来获取它,试了好几次总是获取不到正确的退出码.参考的网上程序是autoit的也就是au3,autoit里面有一句Runwait可以直接待等程序运行完并获取退出码,vb没有此命令,该怎么办呢?shell并获取退出码的vb代码我已经找到了但没法正确获取估计跟dfc.exe不会立即返回退出码有关.望大家帮忙.
而shell运行dfc.exe get / isfrozen后dfc.exe会运行大约3秒左右然后返回来个退出码,注意不是文本信息.
然后我用vb来获取它,试了好几次总是获取不到正确的退出码.参考的网上程序是autoit的也就是au3,autoit里面有一句Runwait可以直接待等程序运行完并获取退出码,vb没有此命令,该怎么办呢?shell并获取退出码的vb代码我已经找到了但没法正确获取估计跟dfc.exe不会立即返回退出码有关.望大家帮忙.
Public Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)
Public Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
窗体代码:
Private Sub Command1_Click()
' TerminateProcess -1, 1125 'also can
ExitProcess 1234
End Sub
测试程序:
模块声明:
Public Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, uExitCode As Long) As Long
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 hProcess As Long) As Long
窗体代码:
Const PROCESS_QUERY_INFORMATION = &H400
Const PROCESS_TERMINATE = &H1
Dim ret As Long
Dim h As Long
Dim pid As Long
Private Sub Command1_Click()
If h Then
GetExitCodeProcess h, ret
MsgBox ret
Else
MsgBox "fail"
End If
End Sub
Private Sub Form_Load()
pid = 1448
h = OpenProcess(PROCESS_QUERY_INFORMATION + PROCESS_TERMINATE, 0, pid)
End Sub
Private Sub Form_Unload(Cancel As Integer)
If h Then CloseHandle h
End Sub
我还试过sleep 1000-5000也没成功,sleep后是能获取但不正确.
试试用这个:Type POINTAPI
X As Long
Y As Long
End TypeType Msg
hWnd As Long
Message As Long
wParam As Long
lParam As Long
time As Long
pt As POINTAPI
End TypeDeclare Function timeGetTime Lib "WINMM.DLL" () As Long
Declare Function GetMessage Lib "user32" Alias "GetMessageA" (lpMsg As Msg, ByVal hWnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long) As Long
Declare Function TranslateMessage Lib "user32" (lpMsg As Msg) As Long
Declare Function DispatchMessage Lib "user32" Alias "DispatchMessageA" (lpMsg As Msg) As LongSub Delay(ByVal lngMillisecond As Long)
Dim lngStartTime As Long, lngProcTime As Long
Dim wMsg As Msg
lngStartTime = timeGetTime()
Do
GetMessage wMsg, 0&, 0, 0
TranslateMessage wMsg
DispatchMessage wMsg
lngProcTime = timeGetTime - lngStartTime
Loop While lngProcTime < lngMillisecond
End Sub