none
Programa em VB executar um bloco de código VBS RRS feed

  • Pergunta

  • Boa tarde,

     

    Pessoal estou fazendo um programinha em VB para configurar a rede da empresa.

    Eu tenho 1 script em VBS que faz isso, porém os dados como Endereço Ip Máscara de rede etc, estão fixo dentro do bloco de código VBS.

    No programa eu tenho  alguns TextBoxs que recebem esses dados como IP, Máscara de rede, Gateway etc, então eu queria que quando eu clica-se em confirmar ele executasse esse vbs e aonde eu tenho os dados fixo eu trocaria por váriaveis ai daria certo.

     

    Alguem pode me ajudar?



    Atenciosamente
    Fabrício Castro Maluf
    E-mail: fabricio@metaora.com.br
    sexta-feira, 1 de outubro de 2010 17:21

Respostas

  • Ficou muito bom. O chr(13) deveria ter resolvido a questão de ficar tudo em uma linha.

    E se tentar gerar escrevendo linha por linha utilizando aquele primeiro método que escrevi? mais ou menos assim:

    Print #1, "dim oShell"
    Print #1, "oShell = Wscript.CreateObject(""Wscript.Shell"")"
    ...
    Print #1, "strGateway = Array(""" & GAT & """)"
    ...
    Close #1

     


    Fábio de Paula Junior
    segunda-feira, 4 de outubro de 2010 15:04
    Moderador

Todas as Respostas

  • Fabricio,

    Já tive exatamente o mesmo problema que você e na época fiz o seguinte: De dentro do programa vb6 eu gerava o arquivo .vbs alterando os parametros necessários na hora de escrever dentro do arquivo, em seguinda eu executava o .vbs gerado.

    Exemplo bem simples em que eu gero o script .vbs e depois eu executo o script gerado.

    Vai mostrar uma mensagem que está em um textbox(text1) do programa vb6(já não programo em VB6 a mais de 4 anos então não sei se a sintaxe está correta):

    Open "c:\script.vbs" For Output As #1
    Print #1, "wscript.echo " & Text1.text
    Close #1

    Shell "wscript.exe c:\script.vbs", 1)

    Vocë deve "printar" todas as linhas do seu script concatenando os parametros nas linhas onde vc muda o IP,mascara,gateway...

    Existe outra forma (mas precisa de concatenação dos parametros também) que é utilizando o objeto "MS Script Control in VB 6.0", veja o exemplo aqui: http://planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=56466&lngWId=1


    Fábio de Paula Junior
    sábado, 2 de outubro de 2010 13:34
    Moderador
  • Por que não colocar o textbox dentro do VBs?

    Dim str_endip, str_mask, str_gw 
    str_endip = InputBox("Digite o IP", "Endereço IP", "192.168.1.x") 
    str_mask = InputBox("Digite a Mascara", "Mascara", "255.255.255.0")
    str_gw = InputBox("Digite o Gateway", "Gateway", "192.168.1.1")
    WScript.Echo "IP: " & str_endip & vbCrLf _
    & "Mascara: " & str_mask & vbCrLf _
    & "Gateway: " & str_gw

    Qualquer dúvida poste.

    Abraço.


    Gabriel Nascimento MCP / MCTS / MCSA / MCSE / CCNA http://gabrielnascimentoit.spaces.live.com -- Se for útil vote.
    sábado, 2 de outubro de 2010 15:29
  • Bom dia,

     

    Fábio eu fiz o seguinte, coloquei o texto do arquivo VBS dentro de uma váriavel e os campos que eu tenho que mudar endereço ip são as váriaveis que recebem os textbos.

    Ai utilizo o seu exmplo e gero um arquivo VBS só que ele fica tudo em uma linha só e quando vai executar da erro.

    Além de ele colocar umas sujeiras no arquivo, se eu conseguisse formatar meu arquivo de saída daria certinho.

     

    Da uma olhada no meu código:

     Private Sub btnConfirma_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConfirma.Click

            Dim Gervbs

            Dim IP

            Dim MASC

            Dim GAT

            Dim DNS1

            Dim DNS2

     

            IP = txtIP.Text

            MASC = txtMasc.Text

            GAT = txtGat.Text

            DNS1 = txtDns1.Text

            DNS2 = txtDns2.Text

     

            Gervbs = (Chr(13) & _

            "dim oShell" & Chr(13) & _

            "oShell = Wscript.CreateObject(""Wscript.Shell"")" & Chr(13) & _

            "oShell.RegWrite(""HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable"", 1, ""REG_DWORD""" & Chr(13) & _

            "oShell.RegWrite(""HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyServer"", configproxy, ""REG_SZ""" & Chr(13) & _

            "objWMIService = GetObject(""winmgmts:\\.\root\cimv2"")" & Chr(13) & _

            "colNetAdapters = objWMIService.ExecQuery(""Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE"")" & Chr(13) & _

            "strIPAddress = Array(""" & IP & """)" & Chr(13) & _

            "strSubnetMask = Array(""" & MASC & """)" & Chr(13) & _

            "strGateway = Array(""" & GAT & """)" & Chr(13) & _

            "strGatewayMetric = Array(1)""" & Chr(13) & _

            "strDNS = Array(""" & DNS1 & """,""" & DNS2 & """)" & Chr(13) & _

                "For Each objNetAdapter In colNetAdapters" & Chr(13) & _

                    "errEnable = objNetAdapter.EnableStatic(strIPAddress,strSubnetMask)" & Chr(13) & _

                    "errGateways = objNetAdapter.SetGateways(strGateway,strGatewaymetric)" & Chr(13) & _

                    "objNetAdapter.SetDNSServerSearchOrder(strDNS)" & Chr(13) & _

                    "Next")

     

            Dim IPconf As New IO.StreamWriter("C:\Temp\ipfixo.vbs")

            IPconf.Write(Gervbs.ToString)

            IPconf.Close()

        End Sub

     




    Atenciosamente
    Fabrício Castro Maluf
    E-mail: fabricio@metaora.com.br
    segunda-feira, 4 de outubro de 2010 14:54
  • Ficou muito bom. O chr(13) deveria ter resolvido a questão de ficar tudo em uma linha.

    E se tentar gerar escrevendo linha por linha utilizando aquele primeiro método que escrevi? mais ou menos assim:

    Print #1, "dim oShell"
    Print #1, "oShell = Wscript.CreateObject(""Wscript.Shell"")"
    ...
    Print #1, "strGateway = Array(""" & GAT & """)"
    ...
    Close #1

     


    Fábio de Paula Junior
    segunda-feira, 4 de outubro de 2010 15:04
    Moderador
  • Ficou muito bom. O chr(13) deveria ter resolvido a questão de ficar tudo em uma linha.

    E se tentar gerar escrevendo linha por linha utilizando aquele primeiro método que escrevi? mais ou menos assim:

    Print #1, "dim oShell"
    Print #1, "oShell = Wscript.CreateObject(""Wscript.Shell"")"
    ...
    Print #1, "strGateway = Array(""" & GAT & """)"
    ...
    Close #1

     


    Fábio de Paula Junior

    Fábio fiz um esquema legal com suas dicas e deu certo, esta funcionando do jeito que eu queria, sem complicação da uma olhada:

     

     Private Sub btnConfirma_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConfirma.Click

            Dim IP

            Dim MASC

            Dim GAT

            Dim DNS1

            Dim DNS2

            Dim PROXY

     

            IP = txtIP.Text

            MASC = txtMasc.Text

            GAT = txtGat.Text

            DNS1 = txtDns1.Text

            DNS2 = txtDns2.Text

            PROXY = txtProxy.Text

     

            Dim IPconf As New IO.StreamWriter("C:\ConfEDI\ConfiguraRede\ipfixo.vbs")

            IPconf.WriteLine("Dim oShell")

            IPconf.WriteLine("set oShell = Wscript.CreateObject(""Wscript.Shell"")")

            IPconf.WriteLine("configproxy = """ & PROXY & """")

            IPconf.WriteLine("oShell.RegWrite ""HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable"", 1, ""REG_DWORD""")

            IPconf.WriteLine("oShell.RegWrite ""HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyServer"", configproxy, ""REG_SZ""")

            IPconf.WriteLine("Set objWMIService = GetObject(""winmgmts:\\.\root\cimv2"")")

            IPconf.WriteLine("Set colNetAdapters = objWMIService.ExecQuery(""Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE"")")

            IPconf.WriteLine("strIPAddress = Array(""" & IP & """)")

            IPconf.WriteLine("strSubnetMask = Array(""" & MASC & """)")

            IPconf.WriteLine("strGateway = Array(""" & GAT & """)")

            IPconf.WriteLine("strGatewayMetric = Array(1)")

            IPconf.WriteLine("strDNS = Array(""" & DNS1 & """,""" & DNS2 & """)")

            IPconf.WriteLine("For Each objNetAdapter In colNetAdapters")

            IPconf.WriteLine("errEnable = objNetAdapter.EnableStatic(strIPAddress,strSubnetMask)")

            IPconf.WriteLine("errGateways = objNetAdapter.SetGateways(strGateway,strGatewaymetric)")

            IPconf.WriteLine("objNetAdapter.SetDNSServerSearchOrder(strDNS)")

            IPconf.WriteLine("Next")

            IPconf.Close()

     

            Dim ConfRede

            ConfRede = _

                MsgBox("Deseja aplicar as configurações de rede ?" & vbLf & _

                        " " & vbLf & _

                       "IP: " & IP & "" & vbLf & _

                       "MASCARA DE REDE: " & MASC & "" & vbLf & _

                       "GATEWAY: " & GAT & "" & vbLf & _

                       "DNS1: " & DNS1 & "" & vbLf & _

                       "DNS2: " & DNS2 & "" & vbLf & _

                       "PROXY: " & PROXY & "", MsgBoxStyle.YesNo)

            If ConfRede = 6 Then

                Dim Chmvbs

                Chmvbs = CreateObject("Wscript.Shell")

                Chmvbs.Run("C:\ConfEDI\ConfiguraRede\ipfixo.vbs")

                MsgBox("Seu IP foi configurado ", MsgBoxStyle.Information)

            End If

            If ConfRede = 7 Then

                MsgBox("As configurações não foram aplicadas", MsgBoxStyle.OkOnly)

            End If

        End Sub

     

    Obrigado um abraço até.



    Atenciosamente
    Fabrício Castro Maluf
    E-mail: fabricio@metaora.com.br
    segunda-feira, 4 de outubro de 2010 19:10