會(huì)員登錄 - 用戶注冊(cè) - 網(wǎng)站地圖 Office中國(guó)(office-cn.net),專業(yè)Office論壇
當(dāng)前位置:主頁(yè) > 技巧 > Access技巧 > API > 正文

[技巧分享]多條Shell語(yǔ)句執(zhí)行導(dǎo)致判斷出錯(cuò)的解決辦法

時(shí)間:2013-07-04 23:21 來(lái)源:Office中國(guó) 作者:Access中國(guó)tmtony 閱讀:
問(wèn)題:
_________________________________________________________________

我在一個(gè)模塊中的一個(gè)過(guò)程中寫(xiě)了以下幾句代碼
Shell "net use z: \\qmxmaster\D$ "
  Shell "xcopy  w:\bakData     z:\pxsystem\bakData\ /e /c /y", 0
      Shell "net use z: /del"
w:是局域網(wǎng)中A計(jì)算機(jī)本來(lái)就設(shè)置的一個(gè)網(wǎng)絡(luò)驅(qū)動(dòng)器,映射B計(jì)算機(jī)的一個(gè)
共享文件夾。z:是通過(guò)代碼臨時(shí)在A機(jī)器建立的另一個(gè)網(wǎng)絡(luò)驅(qū)動(dòng)器,指向B
計(jì)算機(jī)的d盤。
          在A計(jì)算機(jī)運(yùn)行這個(gè)過(guò)程,把w:\bakData文件夾中全部文件拷貝到B計(jì)算機(jī)
(機(jī)器名pxmaster) 的D盤 bakData文件夾中。
        現(xiàn)在前兩步都做到了,可以建立文件夾并拷貝,但是第3句卻不起作用,驅(qū)動(dòng)
器z總是不能消失,可是 我把第3句放到命令行是能夠正常執(zhí)行的。何故?
        是不是考貝時(shí)間過(guò)長(zhǎng)(5-6秒),代碼不執(zhí)行?是否可以讓代碼執(zhí)行有一個(gè)等待
過(guò)程?


解決(tmtony Office中國(guó)/Access中國(guó)):
_____________________________________________________________
應(yīng)該是等待時(shí)間過(guò)長(zhǎng). 兩種方法

1.Shell("命令", vbHide, True)  最后參數(shù)為true 這個(gè)可選參數(shù)設(shè)為True就可以讓Shell執(zhí)行完才接著Shell下邊的代碼
2.使用API來(lái)判斷 建立以下的代碼

Option Explicit
'等待shell執(zhí)行完成后才執(zhí)行下一條代碼
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Const STATUS_PENDING = &H103
Private Const SYNCHRONIZE = &H100000

Private Const INFINITE = &HFFFFFFFF
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

'執(zhí)行Shell命令并等待程序執(zhí)行完畢 再返回控制權(quán)才繼續(xù)執(zhí)行下一句代碼
Private Sub Command1_Click()

    Dim pId As Long, pHnd As Long    ' 分別聲明 Process Id 及 Process Handle 變數(shù)
    pId = Shell("http://mzhfr.cn")   ' Shell 傳回 Process Id

    pHnd = OpenProcess(SYNCHRONIZE, 0, pId)    ' 取得 Process Handle
    DoEvents  ' doevents
    If pHnd <> 0 Then
        Call WaitForSingleObject(pHnd, INFINITE)    ' 無(wú)限等待,直到程序結(jié)束
        Call CloseHandle(pHnd)
    End If
    MsgBox "執(zhí)行完畢 "

End Sub

(責(zé)任編輯:admin)

頂一下
(3)
100%
踩一下
(0)
0%
發(fā)表評(píng)論
請(qǐng)自覺(jué)遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。
評(píng)價(jià):