2015-04-07 2 views
3

В настоящее время у меня есть сценарий, который берет имя ПК, а затем выводит IP-адрес, а затем еще одно текстовое поле с Полностью квалифицированным доменным именем. Я использовал InputBox вместо Msgbox, поскольку мне нужно иметь возможность копировать результаты в буфер обмена.Пользовательский текстовый ящик VBScript

Мой вопрос: есть ли способ вывода как IP, так и FQDN в том же текстовом поле, а также кнопка «Копировать в буфер обмена» рядом с каждой из них?

Вот что я использую до сих пор:

Sub Ping 

Set objShell = CreateObject("WScript.Shell") 
    Dim tmp 

    Const ForReading = 1 
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    Message = "Enter the Computer Name you would like to convert to an IP address." 
    Host_Names=InputBox(message) 

    wmiQuery = "Select * From Win32_PingStatus Where " & _ 
    "Address = '" & Host_Names & "'" 

    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") 
    Set objPing = objWMIService.ExecQuery(wmiQuery) 

     For Each objStatus in objPing 
      If IsNull(objStatus.StatusCode) Or objStatus.Statuscode<>0 Then 
        Msgbox Host_Names & " is Unreachable!" 
      Exit Sub 
      Else 
      tmp = InputBox("The IP Address is:",,objStatus.ProtocolAddress) 
      tmp = objStatus.ProtocolAddress 
      End If 
    Next 

    strIP = tmp 

    if strIP = "" then 
     Exit Sub 
    end if 

    Set objScriptExec = objShell.Exec("ping.exe -n 1 -a " & strIP) 
    strPingResult = objScriptExec.StdOut.ReadAll 
    Set objStdOut = objScriptExec.StdOut 

    strNoPing = "Request timed out." 

    arrayPingResult = split(strPingResult, vbcrlf) 

    strCheck = strComp(arrayPingResult(3), strNoPing, 1) 

    if strCheck = 1 then 
     Msgbox "PC not on the network. Quitting Program" 
     Exit Sub 
    else 
     arrayPCLine = split(arrayPingResult(1), " ") 
     tmp = InputBox("The fully qualified name is:",,arrayPCLine(1)) 

    end if 
End Sub 

Спасибо за любую помощь вы можете дать мне.

+0

Связанный: http://stackoverflow.com/questions/7172431/displaying-an-image-in-a-vbscript-msgbox –

ответ

3

«Естественный» GUI для VBScript - .HTA. Как и в:

<html> 
<head> 
    <title>ClipBoard Demo</title> 
    <hta:application 
    id="demo" 
    ></hta> 
    <script type="text/vbscript"> 

Option Explicit 

Sub Window_OnLoad() 
    document.GetElementById("teIP").value = "1.2.3.4" 
    document.GetElementById("teNA").value = "HAL" 
End Sub 

Sub clpME(sTXT) 
' MsgBox document.GetElementById(sTXT).value 
    window.clipboardData.setData "text", document.GetElementById(sTXT).value 
End Sub 

    </script> 
</head> 
<body> 
    <form> 
    <input type="text" id="teIP"> 
    <input type="button" onclick='clpME "teIP"' value="clp"> 
    <br /> 
    <input type="text" id="teNA"> 
    <input type="button" onclick='clpME "teNA"' value="clp"> 
    </form> 
</body> 
</html> 

(Более сложный example, start here)

+0

Этот взгляд будет тем, что я ищу. Моя единственная проблема в том, что у меня мало опыта работы с VBScript и ни с чем с .HTA. Мне нужно посмотреть, как с этим работать, вы бы не смогли указать мне еще несколько примеров? – Walthavian

+0

@Walthavian - см. Обновление (начало здесь); извините за испорченный формат. –

+0

Хорошо, я думаю, что могу двигаться вперед с этой информацией, это то, что мне нужно. Спасибо за проницательные ответы и полезные ссылки! – Walthavian

1

Я не собираюсь притворяться, что это довольно, но если вы ищете быстрое и грязное решение, вы можете захватить встроенные кнопки. Я видел это сделано раньше:

Dim msgboxResponse 
msgboxResponse = MsgBox("Press: " & vbCrLf _ 
    & "Yes to copy IP address" & vbCrLf _ 
    & "No to copy FQDN" & vbCrLf _ 
    & "Cancel to copy nothing", vbYesNoCancel) 

Select Case msgboxResponse 
Case vbYes: 'Code to copy IP to clipboard 
Case vbNo: 'Code to copy FQDN 
Case vbCancel: 'do nothing 

Вот УБ небо:

enter image description here End Select

+0

Как много поскольку я люблю этот ответ, это просто немного для того, чтобы искать то, что я ищу. Это работает точно так, как предполагалось! – Walthavian

0

Пока не очевидно, вы можете скопировать содержимое любого MsgBox в буфер обмена просто нажав Ctrl- Ins, но заголовок и кнопки также включены.

Вы можете просто поместить данные в буфер обмена с помощью утилиты командной строки clip.exe.

With WScript.CreateObject("WScript.Shell") 
    .Environment("PROCESS")("_toClip") = "Here, concatenate the variables to place in clipboard" 
    .Run "cmd /v /q /c ""echo(!_toClip!|clip""", 0, True 
    .Environment("PROCESS").Remove "_toClip" 
End With 

И, конечно же, вместо того чтобы показывать два inputboxes, просто сцепить данные, а затем показать только один входной ящик со всей необходимой информацией.

Смежные вопросы