關於vb中shell非同步執行,(VB中)預設情況下,Shell函式是以非同步方式來執行其它程式的,那如果要同步執行程式,要怎麼做?

時間 2022-02-14 06:15:23

1樓:匿名使用者

一、先複製下面函式:

function shell_ex(exename as string) as boolean

dim id as long, name as string

name = mid(exename, instrrev(exename, "\") + 1)

id = shell(exename, vbnormalfocus)

on error resume next

dim objwmiservice, colprocesslist, objprocess

set objwmiservice = getobject("winmgmts:!\\.\root\cimv2")

doshell_ex = true

set colprocesslist = objwmiservice.execquery _

("select * from win32_process where name='" & name & "' and handle='" & id & "'")

for each objprocess in colprocesslist

shell_ex = false

exit for

next

doevents

loop until shell_ex = true

set objprocess = nothing

set colprocesslist = nothing

set objwmiservice = nothing

end function

二、函式呼叫舉例:

shell_ex "c:\1.exe"

shell_ex "c:\2.exe"

shell_ex "c:\3.exe"

2樓:匿名使用者

用shellexecute 吧,單獨的shell好像是不能完成你的要求的~~

(vb中)預設情況下,shell函式是以非同步方式來執行其它程式的,那如果要同步執行程式,要怎麼做?

3樓:匿名使用者

真神人也private sub sh()

dim x as long

x = shell("c:\aa.exe", vbnormalfocus)

do while x = 0doeventsloop'其他**。。。

end sub這個**中,shell返回之後,x的值還會改變嗎???????????? 要想同步,可以用api函式,createprocess 建立程序,再用 waitforsingleobject 等特程序控制代碼返回訊號。**比較複雜,我就不多說了。

4樓:匿名使用者

因為呼叫完成後才返回非零值,所以用迴圈來檢測,如果為0後再進入下一步程式private sub sh()

dim x as long

x = shell("c:\aa.exe", vbnormalfocus)

do while x = 0

loop'其他**。。。

end sub

5樓:匿名使用者

shell函式的執行機制是與其它程式同步執行,也就是說,當呼叫shell函式的子程式還沒有執行完畢之前,shell函式後面的語句已經執行。

vb中的shell函式是幹什麼的?怎麼用啊?

6樓:四舍**入

shell函式是vb中的內部函式,它負責執行一個可執行檔案,返回一個variant(double),如果成功的話,代表這個程式的程序id,若不成功,則會返回0,shell一個非常重要的特性是它可作為一種程式語言來使用。

shell的語法:shell(pathname[,windowstyle])。

pathname 為必需引數,型別為string,它指出了要執行的程式名,以及任何需要的引數或命令列變數。

你還,對於vb 程式設計中的非同步操作中的函式怎麼寫啊

vb中shell使批處理完成後再執行後續指令

7樓:我是雨之痕

我也不太明白,不過我有些思路,就是說呢,用一個timer來監視一些,你批處理裡最後的一個改動,比如說,修改一個檔案的名字,在你按按鈕的同時,開動時鐘控制元件,然後,msgbox "清理完成!"

放在timer1裡,這樣就ok了,不知這樣的思路行不行,如果是我,就這樣辦,也許有更好的辦法 思路有了,你可以自己找一下相關的**,主要是查檔名的**

對了,忘了,在時鐘控制元件生效前一定要讓要改的那個檔名復位,這樣不至於出錯,我想你也能想到,但我還是想補充一下

8樓:匿名使用者

'這樣就可以滿足你的要求:

private sub command1_click()open "c:\test.bat" for output as #1

print #1, "@echo off"

print #1, "echo 測試完畢"

print #1, "echo. & pause "

close #1

dim wshshell

set wshshell = createobject("wscript.shell")'建立指令碼物件

wshshell.run "c:\test.bat"

set wshshell = nothing'釋放記憶體msgbox "清理完成!"

end sub

9樓:匿名使用者

shell函式有一定執行時間,這樣修改:

option explicit

private declare sub sleep lib "kernel32" (byval dwmilliseconds as long)

private sub command1_click()open "c:\test.bat" for output as #1

print #1, "@echo off"

print #1, "echo 測試完畢"

print #1, "echo. & pause "

close #1

shell "c:\test.bat", vbnormalfocussleep 500 '按實際情況設定時間,單位是毫秒form1.setfocus

msgbox "清理完成!"

end sub

怎麼讓vb中shell命令執行完第一個命令,再執行第二次命令?

10樓:匿名使用者

這樣呼叫應用程式或批處理檔案確實不好。但可以這樣操作:shell "cmd.

exe /c具體命令列(如ipconfig查詢ip地址)", vbhide。如下:shell "cmd.

exe /cipconfig", vbhide 就是利用vb查詢ip地址的,如命令列不多用此方法重複幾次也是可以的。

關於vb的shell命令的問題

11樓:

shell 函式

執行一個可執行檔案,返回一個 variant (double),如果成功的話,代表這個程式的任務 id,若不成功,則會返回 0。

語法shell(pathname[,windowstyle])

shell 函式的語法含有下面這些命名引數:

部分 描述

pathname 必要引數。variant (string),要執行的程式名,以及任何必需的引數或命令列變數,可能還包括目錄或資料夾,以及驅動器。

windowstyle 可選引數。variant (integer),表示在程式執行時視窗的樣式。如果 windowstyle 省略,則程式是以具有焦點的最小化視窗來執行的。

windowstyle 命名引數有以下這些值:

常量 值 描述

vbhide 0 視窗被隱藏,且焦點會移到隱式視窗。

vbnormalfocus 1 視窗具有焦點,且會還原到它原來的大小和位置。

vbminimizedfocus 2 視窗會以一個具有焦點的圖示來顯示。

vbmaximizedfocus 3 視窗是一個具有焦點的最大化視窗。

vbnormalnofocus 4 視窗會被還原到最近使用的大小和位置,而當前活動的視窗仍然保持活動。

vbminimizednofocus 6 視窗會以一個圖示來顯示。而當前活動的的視窗仍然保持活動。

說明如果 shell 函式成功地執行了所要執行的檔案,則它會返回程式的任務 id。任務 id 是一個唯一的數值,用來指明正在執行的程式。如果 shell 函式不能開啟命名的程式,則會產生錯誤。

注意 預設情況下,shell 函式是以非同步方式來執行其它程式的。也就是說,用 shell 啟動的程式可能還沒有完成執行過程,就已經執行到 shell 函式之後的語句。

shell 函式示例

本示例使用 shell 函式來完成一個使用者指定的應用程式。

' 將第二個引數值設成 1,可讓該程式以正常大小的視窗完成,並且擁有焦點。

dim retval

retval = shell("c:\windows\calc.exe", 1) ' 完成calculator。

參考資料:msdn

如何在shell指令碼中執行cd命令

在工作中,網際網路公司,經常不是直接登入到服務上,而是通過跳板機進行中轉。這樣就會用到cd命令切換目錄。編輯shell檔案 vim switchdir.sh plain view plain copycd opt service mobile kafka 2.10 0.8.1 lizt bin so...

vb中ubound怎麼用,Ubound 在VB中怎麼用啊?!

ubound函式返回陣列的最大下標 dim s 4 as string dim i as integer i 4 i ubound s 就是取陣列的最大下標。格式 ubound 陣列,第幾維 給一段 執行一下 新建一窗體,然後到 區,刪除所有 後,貼上以下 可見執行效果 option explici...

VB裡關於mid函式的使用,vb中的mid函式

首次提問,結果是 software 追問,結果是 e mid 字串,m,n 返回字串的第m位起共n位的子字串。vb中的mid函式 mid是visual basic和microsoft excel中的一個字串函式,作用是從一個字串中擷取出指定數量的字元。這個函式的3個引數各在vb和excel中互相等價...