< SCRIPT LANGUAGE="VBScript" >
Sub RunScript
If ComputerOption(0).Checked Then
strComputer = ComputerOption(0).Value
End If
If ComputerOption(1).Checked Then
strComputer = ComputerOption(1).Value
End If
If ComputerOption(2).Checked Then
strComputer = ComputerOption(2).Value
End If
If ComputerOption(3).Checked Then
strComputer = ComputerOption(3).Value
End If
If strComputer = "" Then
Exit Sub
End If
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * From Win32_OperatingSystem")
For Each objItem in ColItems
Msgbox objItem.Caption
Next
End Sub
Sub CancelScript
Self.Close()
End Sub
< /SCRIPT >
< BODY >
< input type="radio" name="ComputerOption" value="atl-ws-01">atl-ws-01< BR >
< input type="radio" name="ComputerOption" value="atl-ws-02">atl-ws-02< BR >
< input type="radio" name="ComputerOption" value="atl-ws-03">atl-ws-03< BR >
< input type="radio" name="ComputerOption" value="atl-ws-04">atl-ws-04< P >
< input id=runbutton class="button" type="button" value="Run Script" name="ok_button"
onClick="RunScript">
< input id=runbutton class="button" type="button" value="Cancel" name="cancel_button"
onClick="CancelScript">
< /BODY >
그러면 지금부터 작동 방법을 자세히 설명하겠습니다. 이 코드는 네 개의 섹션으로 나눌 수 있습니다. HTML 태그를 사용하여 라디오 단추, Run Script 및 Cancel 단추를 나타내는 두 섹션과 Run Script 또는 Cancel 단추의 클릭 여부에 따라 서브루틴을 실행하는 두 섹션으로 나뉩니다. 이러한 각 섹션을 좀 더 자세히 살펴봅시다.
예를 들어, 다음은 네 개의 라디오 단추를 나타내는 HTML 코드입니다. HTML을 알고 있다면 아래 코딩이 특별한 점이 없는 표준 HTML 코딩임을 확인할 수 있습니다. 모든 단추는 동일한 이름(ComputerOption)을 갖고 있어 한 번에 한 개의 단추만 선택할 수 있습니다. 또한 각 단추의 값은 해당 컴퓨터 이름으로 설정됩니다.
< BODY >
< input type="radio" name="ComputerOption" value="atl-ws-01" >atl-ws-01< BR >
< input type="radio" name="ComputerOption" value="atl-ws-02" >atl-ws-02< BR >
< input type="radio" name="ComputerOption" value="atl-ws-03" >atl-ws-03< BR >
< input type="radio" name="ComputerOption" value="atl-ws-04" >atl-ws-04< P >
다음은 Run Script 및 Cancel 단추를 나타내는 코드입니다. 이 코드의 핵심은 단추를 클릭했을 때 실행되는 서브루틴의 종류를 나타내는 onClick 매개 변수입니다. 첫 번째 단추를 클릭하면 서브루틴 RunScript가 실행되고 두 번째 단추를 클릭하면 서브루틴 CancelScript가 실행됩니다.
< input id=runbutton class="button" type="button" value="Run Script" name="ok_button"
onClick="RunScript">
< input id=runbutton class="button" type="button" value="Cancel" name="cancel_button"
onClick="CancelScript">
< /BODY >
CancelScript 서브루틴은 HTA를 닫습니다. 보여지는 것처럼 이러한 절차는 그다지 복잡하지 않습니다.
Sub CancelScript
Self.Close()
End Sub
이제 마지막으로, 한 가지 유용한 정보를 알려 드리겠습니다. 귀하가 라디오 단추를 선택한 후 Run Script를 클릭했을 때 HTA에서는 선택된 단추가 무엇이며 스크립트를 실행할 컴퓨터는 무엇인지 어떻게 알까요? 또한 실행하려는 스크립트는 어디에 있을까요? 모든 정보는 바로 이 RunScript 루틴에 있습니다.
Sub RunScript
If ComputerOption(0).Checked Then
strComputer = ComputerOption(0).Value
End If
If ComputerOption(1).Checked Then
strComputer = ComputerOption(1).Value
End If
If ComputerOption(2).Checked Then
strComputer = ComputerOption(2).Value
End If
If ComputerOption(3).Checked Then
strComputer = ComputerOption(3).Value
End If
If strComputer = "" Then
Exit Sub
End If
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * From Win32_OperatingSystem")
For Each objItem in ColItems
Msgbox objItem.Caption
Next
End Sub
이 서브루틴의 전반부에서는 선택한 단추가 무엇인지 확인합니다. 라디오 단추(동일한 이름을 가진 경우)는 배열로 저장됩니다. 배열에서 첫 번째 단추는 항목 0, 두 번째 단추는 항목 1이 되며 이러한 방식으로 저장됩니다. 따라서 어떤 단추가 선택되었는지 확인하려면 각 단추의 Checked 속성을 확인하면 됩니다. 예를 들어, 다음 코드 줄은 단추 0(배열의 첫 번째 단추)의 Checked 속성이 true인지 여부를 확인하며 true인 경우 선택된 단추임을 나타냅니다.
If ComputerOption(0).Checked Then
Checked 속성이 true이면 어떻게 될까요? 그러면 이 라디오 단추의 값(단추의 값은 컴퓨터 이름에 해당)을 변수 strComputer에 할당합니다.
strComputer = ComputerOption(0).Value
Checked 속성이 False이면 어떻게 될까요? 각 라디오 단추의 값을 확인하므로 상관 없습니다. 곧 어떤 단추가 선택되었는지 확인할 수 있습니다. 단추는 하나만 선택할 수 있습니다. 선택한 단추가 하나도 없으면 서브루틴이 종료됩니다. 이 코드는 다음과 같습니다.
If strComputer = "" Then
Exit Sub
End If
단추가 선택되면 strComputer는 연결하려는 컴퓨터의 이름과 같게 됩니다. 이 내용이 서브루틴의 나머지 후반부에 해당됩니다. 이는 특정 컴퓨터에 연결하여 이 컴퓨터에 설치된 운영 체제 이름을 반환하는 표준 WMI 스크립트입니다.
지금까지 작업을 잘 따라 오셨나요? 실제로 해 보면 내용을 충분히 이해하실 것입니다. 그러나 알아야 할 것이 하나 더 있습니다. 여기에 소개된 샘플 HTA는 컴퓨터에 설치된 운영 체제 이름을 검색한 후 메시지 상자에 이 이름을 표시합니다. 그렇다면 컴퓨터에 설치된 모든 서비스 목록을 표시할 경우 어떻게 될까요? 이 경우 수많은 메시지 상자에 일일이 응답해야 하는 불편을 겪을 수도 있습니다.
그렇다면 이 문제를 수정할 수 있을까요? 물론입니다. 여기에 소비되는 시간을 줄이려면 몇 가지 조치를 취해야 합니다. 첫째, 화면에서 정보를 기록할 수 있는 식별 가능한 영역인 SPAN 영역을 HTA에 추가합니다. 다음과 같은 코드를 사용해 모든 단추 아래에 ID가 DataArea인 SPAN을 추가합니다.
< P >
< span id=DataArea >< /span >
둘째, 메시지 상자에 모든 데이터를 표시하는 대신 이 데이터를 수집하여 변수에 모두 저장해야 합니다. 이 코드는 변수 strText의 값을 현재 strText에 있는 값과 캡션 속성의 값 및
태그(키보드에서 Enter 키를 누른 것과 동등한 HTML 기능)를 합한 값으로 설정합니다.
strText = strText & objItem.Caption & "<br>"
마지막으로 SPAN의 InnerHTML 속성을 변수 strText의 값으로 설정해야 합니다.
DataArea.InnerHTML = strText
이해가 충분히 되셨는지요? 다음은 컴퓨터에 설치된 모든 서비스 이름을 수집한 후 HTA에 이러한 이름을 기록하는 수정된 HTA입니다.
< SCRIPT LANGUAGE="VBScript" >
Sub RunScript
If ComputerOption(0).Checked Then
strComputer = ComputerOption(0).Value
End If
If ComputerOption(1).Checked Then
strComputer = ComputerOption(1).Value
End If
If ComputerOption(2).Checked Then
strComputer = ComputerOption(2).Value
End If
If ComputerOption(3).Checked Then
strComputer = ComputerOption(3).Value
End If
If strComputer = "" Then
Exit Sub
End If
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * From Win32_Service")
For Each objItem in ColItems
strText = strText & objItem.Name & "< BR >"
Next
DataArea.InnerHTML = strText
End Sub
Sub CancelScript
Self.Close()
End Sub
< /SCRIPT >
< BODY >
< input type="radio" name="ComputerOption" value="atl-ws-01">atl-ws-01< BR >
< input type="radio" name="ComputerOption" value="atl-ws-02">atl-ws-02< BR >
< input type="radio" name="ComputerOption" value="atl-ws-03">atl-ws-03< BR >
< input type="radio" name="ComputerOption" value="atl-ws-04">atl-ws-04< P >
< input id=runbutton class="button" type="button" value="Run Script" name="ok_button"
onClick="RunScript">
< input id=runbutton class="button" type="button" value="Cancel" name="cancel_button"
onClick="CancelScript">
< P >
< span id=DataArea>< /span >
< /BODY >
|