none
Criar um Array RRS feed

  • Pergunta

  • Ba galera boa tarde

    galera, como eu faço para criar um array que leia duas chaves de registro destinas.

    exemplo:

    arrPastas = array("\Program Files (x86)\base1\","\Arquivos de Programas\base2\")

    mais gostaria de ler duas chaves de registris.

    obrigado tche.


    • Editado Marcelo TI terça-feira, 17 de julho de 2012 19:34
    terça-feira, 17 de julho de 2012 18:44

Respostas

  • Quando eu vejo alguem usando o select case eu sempre dou a maior moral pro cara porque é uma estrutura que acho muito organizada e simples (mas vejo pouca gente usando), vc está tentado complicar.

    O case só comparar uma variavel e vc está querendo fazer com duas.

    Um IF THEN ELSE deve resolver o seu caso:

    strComputer = "."
     
    Set oReg=GetObject("winmgmts:\\" & _
        strComputer & "\root\default:StdRegProv")
     
    oReg.GetStringValue HKLM,"SOFTWARE\GRADE\VERSION\","ID", strconsulta
    oReg.GetStringValue HKLM,"SOFTWARE\GRADENew\VERSION\","ID", strconsulta1
    
    IF not isnull(strconsulta)  then
    
    	if strconsulta = "3.2.1021" then
    		wscript.echo "Ok versão local"
    	end if
    	
    	
    elseif not isnull(strconsulta1) then
    
    	if strconsulta = "5.3.2111" then
    		wscript.echo "Ok versão LAN"
    	end if
    
    else
    	wscript.echo "Nenhuma versão instalada"
    
    end if


    Fábio de Paula Junior



    • Editado Fábio JrModerator quarta-feira, 18 de julho de 2012 19:47 Adicionado else
    • Marcado como Resposta Marcelo TI quinta-feira, 19 de julho de 2012 18:58
    quarta-feira, 18 de julho de 2012 19:44
    Moderador

Todas as Respostas

  • Marcelo,

    Provavelmente você já tem o código que lê a chave, o array por si somente armazena dados, ele não faz nenhuma ação.

    Se vc quer guardar a informação no Array e são dois valores então crie o array já dimensionado como 2 e insira os valores depois.

    dim Valor(1)
    
    Valor(0)=funcaoqleRegistro("hklm\...")
    Valor(1)=funcaoqleRegistro("hklm\...")

    Observe que vc inicia o array informando (1) mas o tamanho dele é dois pois o index inicia em 0.

    Ref.:

    VBScript Variables 

    msdn.microsoft.com/en-us/library/t7zd6etz(v=vs.84).aspx


    Fábio de Paula Junior

    terça-feira, 17 de julho de 2012 22:00
    Moderador
  • Ba Fabião bom dia tche.

    obrigado mais uma vez pela força em primeiro lugar, vou lhe contar minha necessidade tche vamos ver se vc compreende e assim consegue me ajudar melhor.

    montei um codigo com varios if e elseif como vc ja me mostrou, e tudo funciona, porem para dar o start deste tudo funciona, eu coloquei ele dentro de um select case, que faz o case por um valor coletado na leitura de uma chave de registro, bem aqui esta o meu problema, eu tenho que ler duas chaves distintas que ira me passar valores distintos tb, esta variavel eu gostaria de utilizar o mesmo nome por exemplo strConsulta, por isto que pensei no array, mais vejo que desta forma que vc esta me mostrando não vai atender pois assim eu terai que ter dois select case, um para o Valor(0) e um para o Valor(1), vc conseguiu me compreender.

    basicamente eu tenho duas chaves que ira me passar dois valores diferentes tche, e eu gostaria de algo que fosse possivel de ler esta duas chaves e me retorna-se somente uma variavel de nome X para que esta variavel entre no select case.

    tem um outro detalhe, é necessario ter um tratamento para null sendo na falta das duas chaves, e um outro ponto uma maquina nunca possui as duas chaves, sempre será encontrada a chave A ou a chave B.

    valeu Fabião.

    quarta-feira, 18 de julho de 2012 09:26
  • Marcelo,

    Acho que entendi, tente compreender o exemplo abaixo

    dim Valor(2)
    
    Valor(0)="FABIO"
    Valor(1)="MARCELO"
    Valor(1)="TESTE"
    
    
    for each Item in Valor
    
    	Select case Item
    
    		Case "FABIO"
    			wscript.echo "Valor igual a FABIO"
    
    
    		Case "MARCELO"
    			wscript.echo "Valor igual a MARCELO"
    
    
    		CASE else
    
    			WSCRIPT.ECHO "VALOR NÃO É NEM FABIO NEM MARCELO"
    
    	end select
    
    
    next

    Veja que tenho Valor com 3 valores.

    O for each vai ler cada um destes valores, na primeira volta ele lê o (0) depois o (1) e assim sucessivamente, a cada volta ele subtitui o valor da variavel Item pelo item do array Valor. Então eu coloquei um Select Case dentro do loop for e a cada volta ele vai entrar em uma opção diferente.

    Ainda assim não sei se é vantajoso utilizar uma estrutura desta para apenas 2 items, eu só utilizo quando são muitos ou que o tamanho do array é dinâmico, isto é, tem hora que ele pode ter tamanho 2 ou pode ter 1000.


    Fábio de Paula Junior


    quarta-feira, 18 de julho de 2012 11:43
    Moderador
  • ba fabião compreendi tche mais não estou conseguindo colocar o processo de leitura do reg nesta logica, tenti assim mais deu erro.

    strComputer = "."

    Set oReg=GetObject("winmgmts:\\" & _
       strComputer & "\root\default:StdRegProv")

    dim Valor(2)

    Valor(0)=oReg.GetStringValue HKLM,"SOFTWARE\GRADE\VERSION\","ID"

    Valor(1)=oReg.GetStringValue HKLM,"SOFTWARE\GRADENew\VERSION\","ID"

    Valor(1)="Sem o produto"

    for each Item in Valor

    Select case Item

    Case "3.2.1021"
    wscript
    .echo "Ok versão local"


    Case "5.3.2111"
    wscript
    .echo "Ok versão LAN"


    CASE else

    WSCRIPT
    .ECHO "Não tem o produto"

    end select


    next

    quarta-feira, 18 de julho de 2012 12:22
  • Não tenho como testar mas acho que está errada a sintaxe de leitura do registro, deveria ser assim

    oReg.GetStringValue HKLM,"SOFTWARE\GRADE\VERSION\","ID",Valor(0)
    oReg.GetStringValue HKLM,"SOFTWARE\GRADENew\VERSION\","ID",Valor(1)

    Outra coisa, porque vc só precisa de Valor(0) e (1), não tem necessidade de um terceiro.

    Ainda acho que é melhor você fazer dois Select Cases.


    Fábio de Paula Junior

    quarta-feira, 18 de julho de 2012 15:14
    Moderador
  • obrigado Fabião... eu tb estou achando que melhor forma é fazer dois select case mesmo...

    uma ultima questão meu amigo, é posseivel criar um select case dentro de uma sub de um select case ja existente ?

    quarta-feira, 18 de julho de 2012 16:05
  • Sim.


    Fábio de Paula Junior

    quarta-feira, 18 de julho de 2012 16:51
    Moderador
  • Ba Fabião me enrolei todo tche, fiz assim para criar dois cases

    strComputer = "."

    Set oReg=GetObject("winmgmts:\\" & _
       strComputer & "\root\default:StdRegProv")

    oReg.GetStringValue HKLM,"SOFTWARE\GRADE\VERSION\","ID", strconsulta

    Reg.GetStringValue HKLM,"SOFTWARE\GRADENew\VERSION\","ID", strconsulta1

    Select case strconsulta

    Case "3.2.1021"
    wscript
    .echo "Ok versão local"

    end select

    Select case strconsulta1

    Case "5.3.2111"
    wscript
    .echo "Ok versão LAN"

    end select

    next

    Dentro de cada case, ele busca as informaçoes do programa, e mais algumas coisas que é padrão para os dois, a questão é que quando a maquina esta com a versão 5, as chaves que são padrão passam outro valor que é diferente da versão 3, acho que as variaveis não poderam ter o mesmo nome dentro de cada case correto, por exemplo a variavel strkey no case 3 e case 5 o strkey teria que ser strkey1 para que ele não rode este outro resultado correto ou isto nao deveria ocorrer ?

    quarta-feira, 18 de julho de 2012 18:17
  • Quando eu vejo alguem usando o select case eu sempre dou a maior moral pro cara porque é uma estrutura que acho muito organizada e simples (mas vejo pouca gente usando), vc está tentado complicar.

    O case só comparar uma variavel e vc está querendo fazer com duas.

    Um IF THEN ELSE deve resolver o seu caso:

    strComputer = "."
     
    Set oReg=GetObject("winmgmts:\\" & _
        strComputer & "\root\default:StdRegProv")
     
    oReg.GetStringValue HKLM,"SOFTWARE\GRADE\VERSION\","ID", strconsulta
    oReg.GetStringValue HKLM,"SOFTWARE\GRADENew\VERSION\","ID", strconsulta1
    
    IF not isnull(strconsulta)  then
    
    	if strconsulta = "3.2.1021" then
    		wscript.echo "Ok versão local"
    	end if
    	
    	
    elseif not isnull(strconsulta1) then
    
    	if strconsulta = "5.3.2111" then
    		wscript.echo "Ok versão LAN"
    	end if
    
    else
    	wscript.echo "Nenhuma versão instalada"
    
    end if


    Fábio de Paula Junior



    • Editado Fábio JrModerator quarta-feira, 18 de julho de 2012 19:47 Adicionado else
    • Marcado como Resposta Marcelo TI quinta-feira, 19 de julho de 2012 18:58
    quarta-feira, 18 de julho de 2012 19:44
    Moderador
  • Ba Fabio desculpe o gaucho... hehe sou um pouco lento, mais to aprendendo tche..

    agora ficou claro com este exemplo.

    mais uma vez obrigado tche.

    quinta-feira, 19 de julho de 2012 18:58