2014-05-20 38 views
-3

這是在HTA中進行的,並檢查了VB腳本的HTA兼容性。儘管我很清楚自己對大部分VB腳本語言沒有足夠的瞭解,但我盡我所能。HTA中的VB腳本獲取腳本來檢查服務和循環,直到它啓動

strComputer = "." 

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\Cimv2") 

Set colItems = objWMIService.ExecQuery(_ 
    "Select * From Win32_Service where Name= 'spooler'") 

For Each objItem In colItems 
    If objItem.State = "Running" Then 
     Set objShell = CreateObject("Shell.Application") 
     objShell.ShellExecute """C:\Program Files\Program\program.exe""" 
    ElseIf objItem.State = "Stopped" Then 

     Empty code area 

    End If 
Next 

在空的代碼區域,我正在努力工作。我嘗試過:

Do 

Loop Until objItem.State = "Running" 

這導致HTA掛起爲「警告腳本沒有響應錯誤」。

目前試圖找到沿着這些線路的東西,但只是想知道是否有人有更好的建議。

乾杯

d

+0

在標題中,你說VB,標籤說VBA。這是兩種不同的語言。 VB代表VB.NET,用於Visual Basic的VBA,用於Word,Excel,Access等應用程序。另外還有VB腳本語言。你不解釋你在找什麼。一個好問題可以被解釋爲:「我如何測試假脫機程序是否正在運行?」。並添加適當的標籤,如'vb'或'vba'和'windows'。提及像winforms,asp.net,asp,mvc或wpf等技術也是一個好主意。什麼是HTA? –

+0

VBA是一個錯字:)不把VB腳本只是我對編程語言的理解不夠,HTA是一個HTML應用程序,可用於VB腳本或Java加上其他。你說得對,這個問題本來可以說得更好。 –

+0

更改標題更具說明性。 –

回答

1

我也做了一些調查。 colItems似乎是SWbemObjectSet類型。這是一個COM對象,其行爲不像大多數VB,VBA,VBScript集合。這應該工作:

Dim i 

For i = 0 To colItems.Count - 1 
    If colItems.ItemIndex(i).State = "Running" Then 
     Set objShell = CreateObject("Shell.Application") 
     objShell.ShellExecute """C:\Program Files\Program\program.exe""" 
     Exit For 
    End If 
Next i 

我還加了一個Exit For,因爲你只需要啓動一次program.exe。

+0

嗨,感謝您的回覆,需要進一步測試,因爲它在「for I = 0」行中出現Expected'='錯誤。將進一步測試,看看它是如何。可能只是我對你給腳本的代碼的實現。 –

+0

對不起,這看起來似乎不適合我的任何想法。在爲我們的腳本替換'for'語句之後仍然無效。 –