首页 >> 读书频道 >> 电脑 >> 使Shell指令具Wait功能下
 
· 使Shell指令具Wai
· 从任务列表中隐藏
· 闪烁的标题栏
· VB实现SQL功能上
· 使用XML上传文件下
· 使用XML上传文件上
· 关于算法的一些想法
· 得到光驱的盘符
· 用API函数遍历文件一
· 枚举出局域网上所有网络资
· 用API函数遍历文件二
· VB托盘程序源代码下
 
· 电视剧《刁蛮公主》下载和
· 美容养颜手册
· 加油金顺剧情分集介绍完整
· 红楼梦:120回全本[清
· 素质教育在美国
· 全唐诗卷四十六
· 韩剧《布拉格恋人》剧情介
· 夜航船[作者:明·张岱]
· 局外人[作者:韩·可爱淘
· 现场流行病学
· 源氏物语[日本:紫式部]
· 武林寓言故事
 
· (出租)中动商场部分及写
· (出租)中动动漫基地&#
· 喜剧学院
· 《善德女王》剧情介绍
· 魔女18号 剧情
· 丑女无敌剧情介绍
· 魔女幼熙剧情介绍
· 龙游天下剧情介绍
· 震撼世界的七日剧情介绍
· 静静的白桦林剧情介绍
· 心情日记—老公今天我想对
· 旗舰剧情介绍
欢迎来到月影社区!如果您觉得这里不错,请推荐给您的朋友们。月影社区:http://wf66.com/

使Shell指令具Wait功能下


查看有无更新版本

关键字:VB 2006-9-18

 

hProcess便是先前的例子中所取得的那个Process Handle, 3838所指的是传给GetExitCodeProcess()中的第二参数,这是我们任意给的,但最好不要是0,因为0一般是代表正常结束,当然这样设也不会有错。当然不可设&H103,以这个例子来看,如果程式正处於以下的LOOPDo

Call GetExitCodeProcess(hProcess, ExitCode) 
Debug.Print ExitCode 
DoEvents 
Loop While ExitCode = STILL_ALIVE 
Debug.print ExitCode  

而执行了 TerminateProcess(hProcess, 3838)那会看到ExitCode = 3838。然而,这个方式在win95没问题,在NT中,可能您要在OpenProcess()的第一个参数要更改成 PROCESS_QUERY_INFORMATION Or PROCESS_TERMINATE 这样才能Work。不过良心的建议,非到最後关头,不要使用TerminateProcess(),因不正常的结束,往往许多程式结束前所要做的事都没有做,可能造成Resource的浪费,甚者,下次再执行某些程式时会有问题,例如:本人常使用MS-dos Shell Link 的方式执行一程式,透过Com port与大电脑的联结,如果Ms-dos Shell Link 不正常结束,下次再想Link时,会发现too Many Opens,这便是一例。 

另外,有人使用Shell来执行.bat档,即:
pid = Shell("c:\aa.bat", vbNormalFocus) 

可是却遇上aa.bat结束了,但ms-dos的Window却仍活着,那可以用以下的方式来做

pid = Shell("c:\command.com /c c:\aa.bat", vbNormalFocus) 

那是执行Command.com,而Command.com指定执行c:\aa.bat 而且结束时自动Close 

所有程式如下:

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long,ByVal dwProcessId As Long) As Long 

Private Declare Function WaitForSingleObject Lib "kernel32"(ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long 

Private Declare Function CloseHandle Lib "kernel32"(ByVal hObject As Long) As Long 

Private Declare Function GetExitCodeProcess Lib "kernel32"(ByVal hProcess As Long, lpExitCode As Long) As Long 

Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long 

Private Declare Function GetForegroundWindow Lib "user32" () As Long 

Private Declare Function IsWindow Lib "user32" (ByVal hwnd As Long) As Long 

Const PROCESS_QUERY_INFORMATION = &H400 

Const STILL_ALIVE = &H103 

Const INFINITE = &HFFFF 

Private ExitCode As Long 
Private hProcess As Long 
Private isDone As Long 

Private Sub Command1_Click() 
Dim pid As Long 
pid = Shell("C:\tools\spe3\pe2.exe", vbNormalFocus) 
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 0, pid) 
isDone = False 
Do 
Call GetExitCodeProcess(hProcess, ExitCode) 
Debug.Print ExitCode 
DoEvents 
Loop While ExitCode = STILL_ALIVE 
Call CloseHandle(hProcess) 
isDone = True 
End Sub 

Private Sub Command2_Click() 

Dim pid As Long 

Dim ExitEvent As Long 

pid = Shell("C:\tools\spe3\pe2.exe", vbNormalFocus) 

hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 0, pid) 

ExitEvent = WaitForSingleObject(hProcess, INFINITE) 

Call CloseHandle(hProcess) 

End Sub 

Private Sub Command3_Click() 
If hProcess <> 0 Then 
 TerminateProcessh Process, 3838 
End If 
End Sub 

Private Sub Command4_Click() 

Dim pid As Long 

Dim hwnd5 As Long 

pid = Shell("c:\tools\spe3\pe2.exe", vbNormalFocus) 

hwnd5 = GetForegroundWindow() 
isDone = False 
Do While IsWindow(hwnd5) 
DoEvents 
Loop 
isDone = True 
End Sub 

Private Sub Command5_Click() 
Shell "c:\command.com /c c:\aa.bat", vbNormalFocus ' vbHide)
End Sub

使Shell指令具Wait功能下

[ 1 ]
使Shell指令具Wait功能下 num

打印本页 关闭

关于我们版权声明本站导航友情连结作品演示 TOP↑