0

我得到了一个我认为是由 HTA_Helpomatic 创建的 HTA。他们希望将它转换成经典的 ASP 页面。所以我做了一些基本的改变,我想我几乎让它工作了。但我遇到了一个问题 - ole 'VBScript Object Required' 位。它在行上这样做 Set objlst_groupnames = document.getElementById( "list_servicenames" ) 这是原始 HTA 脚本 - 谁能帮我弄清楚如何正确地将其转换为 ASP?我创建了一个类似的页面,但它没有按照他们想要的方式工作(您必须单击每个服务来切换它,而不是单击一个复选框)。谢谢。

<head>
<title>Start/Stop/Restart Windows Services</title>
 <HTA:APPLICATION 
 APPLICATIONNAME="Start/Stop/Restart Windows Services"
 BORDER="thin"
 SCROLL="yes"
 SINGLEINSTANCE="yes"
 ID="oHTA"
>
<APPLICATION:HTA>
</head>

<script language="VBScript">

Sub Window_OnLoad

Set objlst_groupnames = document.getElementById( "list_servicenames" )
If objlst_groupnames Is Nothing Then
MsgBox "A problem was encountered while creating the listview." & vbCRLF & "Please see your administrator."
Else
    With objlst_groupnames
        .View              = 3
        .Width             = 800
        .Height            = 600
        .SortKey           = 0
        .Arrange           = 0
        .LabelEdit         = 1
        .SortOrder         = 0
        .Sorted            = 1
        .MultiSelect       = 0
        .LabelWrap         = -1
        .HideSelection     = -1
        .HideColumnHeaders = 0
        .OLEDragMode       = 0
        .OLEDropMode       = 0
        .Checkboxes        = 1
        .FlatScrollBar     = 0
        .FullRowSelect     = 1
        .GridLines         = 0
        .HotTracking       = 0
        .HoverSelection    = 0
        .PictureAlignment  = 0
        .TextBackground    = 0
        .ForeColor         = -2147483640
        .BackColor         = -2147483643
        .BorderStyle       = 1
        .Appearance        = 1
        .MousePointer      = 0
        .Enabled           = 1
        .ColumnHeaders.Clear
        .ColumnHeaders.Add , , "Caption", 150
        .ColumnHeaders.Add , , "State", 150
        .ColumnHeaders.Add , , "Name", 150
        .ColumnHeaders.Add , , "Description", 150
        .ColumnHeaders.Add , , "Start Mode", 150
        .ListItems.Clear
    End With
End If
sComputer = MachineName.Value

ListServices(sComputer)
End Sub

Sub ListServices(sComputer)
ON ERROR RESUME NEXT
sServiceName = ServiceName.Value
Set objList = document.getElementById( "list_servicenames" )
objList.ListItems.Clear

set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & sComputer & "\root\cimv2")

if sServiceName = "" then
    Set colItems = objWMIService.ExecQuery("Select * from Win32_Service")
else
    Set colItems = objWMIService.ExecQuery("Select * From Win32_Service where DisplayName like '%" & sServiceName & "%'")
end if

For Each objItem in colItems
    Set objListItem  = objList.ListItems.Add
    objListItem.Text = objItem.Caption
    objListItem.ListSubItems.Add.Text = objItem.State
    objListItem.ListSubItems.Add.Text = objItem.Name
    objListItem.ListSubItems.Add.Text = objItem.Description
    objListItem.ListSubItems.Add.Text = objItem.StartMode
Next
End Sub

Sub btn_start_onClick()
sComputer = MachineName.Value
for n = 1 to list_servicenames.ListItems.Count
    if list_servicenames.ListItems(n).checked = True then
        strService = list_servicenames.ListItems(n).ListSubItems(2).Text
        Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & sComputer & "\root\cimv2")
        Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where Name='" & strService & "'")
        For each objService in colServiceList
            errReturn = objService.StartService()
        Next
    end if
next
ListServices(sComputer)
 End Sub

Sub btn_stop_onClick()
sComputer = MachineName.Value
for n = 1 to list_servicenames.ListItems.Count
    if list_servicenames.ListItems(n).checked = True then
        strService = list_servicenames.ListItems(n).ListSubItems(2).Text
        Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & sComputer & "\root\cimv2")
        Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where Name='" & strService & "'")
        For each objService in colServiceList
            errReturn = objService.StopService()
        Next
    end if
next
ListServices(sComputer)
End Sub

Sub btn_restart_onClick()
sComputer = MachineName.Value
'Stop services
for n = 1 to list_servicenames.ListItems.Count
    if list_servicenames.ListItems(n).checked = True then
        strService = list_servicenames.ListItems(n).ListSubItems(2).Text
        Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & sComputer & "\root\cimv2")
        Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where Name='" & strService & "'")
        For each objService in colServiceList
            errReturn = objService.StopService()
        Next
    end if
next
'Start services
for n = 1 to list_servicenames.ListItems.Count
    if list_servicenames.ListItems(n).checked = True then
        strService = list_servicenames.ListItems(n).ListSubItems(2).Text
        Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & sComputer & "\root\cimv2")
        Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where Name='" & strService & "'")
        For each objService in colServiceList
            errReturn = objService.StartService()
        Next
    end if
next
ListServices(sComputer)
 End Sub

Sub btn_Refresh_onClick()
sComputer = MachineName.Value
ListServices(sComputer)
 End Sub

 Sub btn_exit_onClick()
Window.Close
 End Sub

 function list_servicenames_ColumnClick(colheader)
list_servicenames.SortKey = colheader.index-1
 end Function

 </script>

 <body>

Enter Machine Name: <Input Type = "Text" Name = "MachineName">
<Input Type = "Button" Value = "Get Services" Name = "Run_Button" onClick = "Window_OnLoad">    Filter Services by Name: <Input Type = "Text" Name = "ServiceName"><P>
<input type="button" value="Refresh" name="btn_Refresh" id="btn_Refresh" title="Click to refresh the services list"> &nbsp;
 <input type="button" value="Start"   name="btn_start"   id="btn_start"   title="Click to Start the Services"> &nbsp;
 <input type="button" value="Stop"    name="btn_stop"    id="btn_stop"    title="Click to Stop the Service"> &nbsp;
 <input type="button" value="Restart" name="btn_restart" id="btn_restart" title="Click to Restart the Services"> &nbsp;
 <input type="button" value="Exit"    name="btn_exit"    id="btn_exit"    title="Click to Exit Form ">
<br/>
<OBJECT id="list_servicenames" name="list_servicenames" classid="clsid:BDD1F04B-858B-11D1-B16A-00C0F0283628"></OBJECT>
</body>
4

1 回答 1

0

要获得客户端单击事件以激活服务器上的某些内容,您必须使用 AJAX 之类的东西。

于 2011-02-02T02:57:30.847 回答