Académique Documents
Professionnel Documents
Culture Documents
1995-2006 BrasCow / Kdex brascow@hotmail.com / darshu_14@hotmail.com loucura ser sbio quando a ignorncia a alegria de todos!
Chimera
Introduo
Depois de navegar um pouco pelo google, tentando encontrar algum material sobre VBScript, e no encontrar nenhuma apostila ou tutorial sobre tal assunto, resolvi criar meu prprio tutorial. O objetivo deste tutorial auxiliar algum que queira comear a aprender VBS, mas para isso necessrio que a pessoa tenha ao menos um conhecimento bsico de lgica de programao. importante lembrar que VBScript pode ser usado em pginas da internet, assim como Java script. Mas, o vbs tambm pode ser um arquivo e ele ir funcionar como se fosse um arquivo de lote (os famosos .bat do dos), para tanto voc deve salvar o arquivo com a extenso .vbs, voc pode escrever os scripts no bloco de notas e para testar basta dar dois cliques no arquivo salvo.
Declarando variveis
Varivel tudo aquilo que est sujeito a modificaes e em programao so elas que guardam os dados, sejam eles entrados pelo usurio ou no.Para se declarar uma varivel em VBS deve se utilizar o seguinte modo: DIM [nome da varivel], [nome da varivel], [...] Ex: DIM nome, idade, top, contador, dia
Declarando constantes
Constantes tudo aquilo que no est sujeito a modificaes, na programao so semelhantes as variveis com a diferena de que os dados armazenados nela no mudam durante todo o programa, elas so sempre inicializadas com algum valor (dado), e eles no so entrados pelo usurio.Para se declarar uma constante faa do seguinte modo: Const [nome da constante] = [dado] Ex: CONST nome = Kdex CONST ano = 2005 CONST MinhaString = Isto uma string
1 Comeando o bsico
Vamos comear fazendo algo simples e depois iremos melhorando e complicando aos poucos. O primeiro script ir fazer aparece uma janela com a mensagem Al Mundo!, para tanto devemos utilizar o comando MsgBox.Copie o cdigo a seguir e salve como ex10.vbs: MsgBox "Al Mundo!",,"Exemplo 1-0"
Faa alguns testes antes de prosseguir adiante com os estudos. Valores de Retorno Constante vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo Valor 1 2 3 4 5 6 7 Descrio Boto OK foi pressionado. Boto Cancel foi pressionado. Boto Abort foi pressionado. Boto Retry foi pressionado. Boto Ignore foi pressionado. Boto Yes foi pressionado. Boto No foi pressionado.
A tabela a cima indica os valores que so retornados quando algum boto do MsgBox pressionado, veremos melhor isto na parte 2 do tutorial. Para o segundo script iremos fazer o mesmo que o primeiro, ex10.Vbs, mas iremos utilizar uma constante para definir o que ele deve mostrar na janela aberta.Digite o cdigo a seguir e salve como ex11.vbs: Const texto = "Isto est dentro de uma constante..." REM O trecho acima guarda a mensagem na constante texto, 'para que possa ser utilizada logo em seguida. MsgBox texto, 64, "Exemplo 1-1"
se o boto pressionado for NO ou NO, a varivel resposta ir receber o valor 7.Para ver o valor devolvido por outros botes consulte a tabela Valores de Retorno (parte 1.1). Entre a linha 3 e 7 se encontra o cdigo que nos interessa, o cdigo responsvel pela exibio das mensagem dependendo da resposta.
Pegue um dos exemplos da tabela e troque com a condio apresentada nos exemplos a cima, para testar. Bloco de instruo o conjunto de instrues ou comandos que o script deve executar caso a condio seja verdadeira. Bloco de instrues para seno o conjunto de instrues que o script ir executar caso a condio testada seja falsa. End if usado para fechar, terminar, a estrutura de deciso If. Agora faa um script que diga que ir formatar o computador, e tenha como opes os botes OK e CANCEL. Se o usurio escolher OK ele deve exibir uma janela dizendo que o usurio corajoso, se no deve dizer que ele covarde.A soluo est aqui em baixo.Salve-o como ex21.vbs: Dim botao botao = MsgBox ("Seu computador ser formatado !", 17, "Aviso do Sistema") If botao = 1 Then MsgBox "Voc corajoso, meu filho...",64 Else MsgBox "Voc o maio covarde que eu j conheci !",48 End if
Uma das solues possveis est a seguir e usa do que chamamos de estrutura de deciso encadeada, para saber mais sobre est estrutura aconselho a leitura de uma apostila de lgica de programao. Dim nome,senha nome = InputBox ("Entre com seu nome :", "Login", "Usurio") senha = InputBox ("Entre com sua senha :", "Login") If nome = "root" Then If senha = "admin" Then MsgBox "Acesso permitido",,"Passe" Else MsgBox "Acesso negado",48, "Tente de novo" End if Else MsgBox "Acesso negado",48 End if
3 Estruturas de repetio
Estrutura de repetio, ou lao de repetio, aquela responsvel por repetir um pedao do cdigo por um certo nmero de vezes ou at que uma condio seja verdadeira. Vou por um script para ilustrar o que eu quero dizer, este Script ir exibir uma mensagem qualquer 10 vezes seguida.Voc pode salva-lo como ex30.vbs: Dim I For I = 1 to 10 MsgBox "Tutorial de VBS - Chimera",,I & " - Exemplo 3-0" Next
Tudo que for escrito entre For e Next ser repetido pelo nmero de vezes que for decidido, a no ser que seja encontrada a instruo End For que por sua vez encerra o lao de repetio. A finalidade de Step, quando aparece, o de decidir em qual velocidade o lao ir se mover, ou seja, se ele vai rodar de 1 em 1, 2 em 2 ou 7 em 7 e assim por diante. Para testar a opo Step faa um script que mostre apenas os cinco primeiros nmeros pares. Salve o script como ex31.vbs. A soluo est logo a seguir: Dim I For I = 2 to 10 Step 2 MsgBox I,,"Exemplo 3-1" Next 'Para I v de 2 at 10, mas de 2 em 2
Chimera")
H mais diferenas nesta instruo: uma delas fato de no ser obrigado a colocar uma condio; outra diferena desta estrutura est no fato de ela possuir duas estruturas diferentes.Em uma a condio declarada no inicio, na outra no fim.Vejamos a estrutura, ento: Do [{While | Until} condio] (Bloco de instrues) [Exit Do] (Bloco de instrues) Loop Do (Bloco de instrues) [Exit Do] (Bloco de instrues) Loop [{While | Until} condio] Ex: Do While contador < 20 contador = contador + 1 MsgBox contador,, "Tutorial de VBS - Chimera" Loop Do Until nome = "chimera" nome = InputBox ("Entre com um nome para sair","nome: chimera") Loop Agora os mesmos exemplos, mas com as condies no final: Ex: Do contador = contador + 1 MsgBox contador,, "Tutorial de VBS - Chimera" Loop While contador < 20 Do nome = InputBox ("Entre com um nome para sair","nome: chimera") Loop Until nome = "chimera" A diferena entre os dois modos, est no fato de que se a declarao da condio feita no inicio, dependendo do cdigo que o precede, o trecho entre Do e Loop pode chegar a no ser executado.Mas, se fizer a declarao de condio no final, ela ser executada ao menos uma vez. Apenas para constar o until da instruo quer dizer at que.Sobre como usar a estrutura Do... Loop sem usufruir de condio, o modo de utiliza-lo o mesmo, mas voc deve por um comando Exit Do dentro do cdigo para finalizar o lao. Como exemplo iremos fazer um script, sem declarar uma condio na estrutura, que ir se repetir at que o usurio no digite nada.Salve este exemplo como ex33.vbs: Dim nome Do nome = InputBox("Para sair no digite nada", "Exemplo 3-3") If nome = "" Then Exit Do End If Loop
Para praticar tente fazer alguns script, eis aqui uma idia: 1- Faa um script que tente descobri a idade do usurio, chutando todas as alternativas.Obs: ele deve chutar uma por vez e permite que o usurio diga se ele acertou ou no. Uma das solues possvel essa: Dim numero, resp 'Declara as variveis numero = 0 'Inicializa a varivel numero com o valor 0 Do numero = numero + 1 'Incrementa a varivel numero em 1 resp = MsgBox ("Voc tem "&numero&" anos?",VbYesNo,"Tutorial de VBS") IF resp = 6 Then 'Se a resposta for afirmativa ento Exit Do 'Termina o lao de repetio End if Loop MsgBox "Acertei...hahaha",48, "Tutorial de VBS - Chimera"
Para facilitar o trabalho de descobrir qual o valor da letra que se deseja, use o Script a seguir.Salve-o como ex40.vbs.Aproveite o cdigo e analise-o. Dim letra, resposta, numero MsgBox "Script para descobrir o cdigo ASCII",,"Exemplo 4-0" Do Letra = InputBox("Digite a letra que se deseja descobri o valor:") Numero = Asc(letra) MsgBox "O valor para a letra: "&letra& " "&numero,,"Tutorial de VBS" Resposta = MsgBox("Deseja continuar?",36,"Tutorial de VBS - Chimera") Loop until resposta = 7
A partir de agora as coisas comeam ficar interessantes, podemos classificar o que vir adiante como nvel intermedirio (esta apenas a minha definio).Depois de voc j ter visto o bsico, vamos comear a trabalhar com objetos, ou seja, voc ir ver como copiar arquivo, criar arquivos de texto, entre outras coisas. Divirta-se...
5 Utilizando Objetos
Objeto - qualquer estrutura modular que faz parte de um produto. Uma janela, por exemplo, um objeto de uma casa, de um carro ou de um software com interface grfica para o usurio. Atributos - So as caractersticas do objeto, como cor e tamanho, a janela, por exemplo, tem atributos como o modelo, tamanho, abertura simples ou dupla, entre outros. Definio extrada de a Bblia do Delphi desvendando o caminho das pedras, do autor Fernando Anselmo. Veja um exemplo do que se capaz de fazer utilizando os objetos do VBS, o exemplo ir apenas abrir o bloco de nota.Copie-o e salve como ex50.vbs: REM Tutorial de VBS - Chimera dim wsh Set wsh = CreateObject ("Wscript.Shell") wsh.Run ("notepad.exe") Uma explicao rpida sobre o que acontece quando se executa este Script: Na segunda linha feita a declarao da varivel que ir receber objeto Wscript.Shell, o responsvel por rodar o bloco de notas. Na terceira linha a varivel wsh recebe o objeto Wscript.Shell, por meio do comando set e createobject. Na quarta linha utilizamos o comando Run da varivel wsh, que recebeu por ser, agora, o objeto Wscript.Shell.
Devo lembrar que se o arquivo que for ser executado no se encontra na pasta atual e nem no PATH de diretrios do windows, local onde o windows procura pelo programa a ser executado, voc precisar especificar tambm o caminho do arquivo a ser executado. Agora irei mostrar um script que dever funcionar como se fosse a prpria caixa de executar do windows, onde permitir voc abrir/executar um arquivo ou pasta. Salve-o como ex521.vbs: Dim wsh, arquivo Set wsh = CreateObject("Wscript.Shell") arquivo = InputBox("Entre com o comando","Exemplo 5-2.1") wsh.run(arquivo) Obs: Ele ir dar erro caso seja indicado um arquivo ou caminho inexistente.
A sintaxe deles a seguinte: Wsh.RegWrite chave, dado[, tipo] Wsh.RegRead (chave) Wsh.RegDelete chave Ex: wsh.RegWrite "HKLM\Software\Microsoft\Windows\Chimera\Kdex","Tutorial" wsh.regread ("HKLM\Software\Microsoft\Windows\Chimera\Kdex") wsh.Delete ("HKLM\Software\Microsoft\Windows\Chimera\Kdex") wsh.Delete ("HKLM\Software\Microsoft\Windows\Chimera\") No local onde est marcado chave, voc pode colocar a chave em si ou o valor a ser trabalhado.O vbs entende que se a chave terminar com um caractere \, ento se trata de uma chave do registro, caso contrrio se trata de um valor. Nos exemplos acima ele cria na primeira linha uma chave chamada chimera dentro da chave Windows e um valor chamado Kdex, contendo o dado tutorial, dentro da chave chimera. Na segunda linha ele o dado contido no valor Kdex da chave chimera. Na terceira linha, o valor Kdex apagado junto com seu contedo. J na quarta linha apagada a chave chimera com todos os valore que estiverem dentro dela. Quando se trabalha com o registro do windows pode-se usar de abreviaes para as chaves principais do registro.As abreviaes so as seqguintes: Constante HKCU HKLM HKCR Chave HKEY_CURRENT_USER HKEY_LOCAL_MACHINE. HKEY_CLASSES_ROOT
Na parte onde est escrito tipo, se refere ao tipo de dado que ser armazenado no registro e esses podem ser: -REG_SZ -REG_EXPAND_SZ -REG_DWORD -REG_BINARY Vamos fazer agora um script que crie uma chave de nome Chimera na chave HKEY_LOCAL_MACHINE\SOFTWARE.Iremos colocar dentro desta chave um valor chamado Site que conter o endereo http://www.vxbrasil.com. Colocaremos tambm um valor de nome Source, contendo o dado Tutorial de VBS.Salve este script como ex5220.vbs: Dim wsh Set wsh = CreateObject("Wscript.Shell") wsh.RegWrite "HKLM\Software\Chimera\Site","http://www.vxbrasil.com" wsh.RegWrite "HKLM\Software\Chimera\Source","Tutorial de VBS" MsgBox "Chave e valores criados.",64,"Exemplo 5-2.2-0" O exemplo acima cria as chaves e os valores no registro do windows, para se funcionou corretamente use o programa regedit.exe que instalado junto com o windows.
O prximo script ir ler os valores que colocamos no registro e exibir para que ns possamos ver. Para que o script rode corretamente necessrio ter rodado o exemplo anterior, e que no se tenha apagado a chave nem os valores criado por ele. Salve o exemplo a seguir como ex5221.vbs: Dim wsh, valor1, valor2 Set wsh = CreateObject("Wscript.Shell") valor1 = wsh.RegRead ("HKLM\Software\Chimera\Site") valor2 = wsh.RegRead ("HKLM\Software\Chimera\Source") MsgBox "O dado do valor Site "&valor1 ,64,"Exemplo 5-2.2-1" MsgBox "O dado do valor Source "&valor2 ,64,"Exemplo 5-2.2-1" Embora no seja necessrio explicar, as variveis valor1 e valor2 so usadas apenas para armazenar os dados contidos nos valores Site e Source respectivamente. E para finalizar a parte que fala sobre trabalho com registro, iremos fazer um script que apague a chave e os valores criados pelo ex5220.vbs. Para que o script rode corretamente necessrio ter rodado o exemplo anterior, e que no se tenha apagado a chave nem os valores criado por ele, ou seja, se for roda-lo duas vezes, necessrio que se rode o ex5220.vbs de novo.Veja o cdigo e salve-o como ex5222.vbs: Dim wsh Set wsh = CreateObject("Wscript.Shell") wsh.RegDelete ("HKLM\Software\Chimera\Site") 'Apaga o valor Site wsh.RegDelete ("HKLM\Software\Chimera\Source") 'Apaga o valor Site wsh.RegDelete ("HKLM\Software\Chimera\") 'Apaga toda a chave Chimera MsgBox "Chave e valores deletados",64,"Exemplo 5-2.2-2" Um outro modo de fazer isto apenas excluindo a chave que tambm resolve tudo, o script para tal coisa o seguinte e se voc quiser pode salva-lo como ex5223.vbs: Dim wsh Set wsh = CreateObject("Wscript.Shell") wsh.RegDelete ("HKLM\Software\Chimera\") 'Apaga a chave e seu contedo MsgBox "Chave e valores deletados",64,"Exemplo 5-2.2-3"
dim fso,f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("VXChimera.txt",2,True) f.WriteLine "Kdex" f.Write "Tutorial de VBS - Chimera" & vbCrLf f.Write "O cdigo a fonte" f.Close Rode o script e veja que ele cria uma arquivo texto com o nome de VXChimera.txt.A nica explicao que considero necessria no momento sobre o uso do comando Set que agora foi usado de modo diferente. Como foi dito antes, o objeto FileSystemObject possui dentro dele outros objetos.Na terceira linha quando a varivel f setada ao filesystemobject(fso), criado pelo fso.OpenTextFile um objeto de arquivo texto que possui propriedades para trabalhar com o arquivo. Os demais modos de setar uma varivel so iguais a este, ento no vou tentar explicar novamente.
Se for utilizado o valor 2 como opo de modo, o arquivo existente, caso haja, ser apagado e sobrescrito.Ento tome muito cuidado ao usar o valor 2. O parmetro criar indica se o arquivo pode ou no ser criado caso ele no exista.O valor padro para este item False, caso o arquivo no exista ele no ser criado, mas se voc indicar True o arquivo ser criado se j no existir.
J a opo formato nos mostra como arquivo ser aberto, se vai ser aberto em formato ASCII ou unicode, o padro para esta opo usar o formato padro do sistema operacional.Os valores para esta opo so: Constante TristateUseDefault TristateTrue TristateFalse Valor -2 -1 0 Descrio Abre o arquivo usando o padro do sistema. Abre o arquivo em formato unicode. Abre o arquivo em formato ASCII.
Veja um exemplo apenas para ilustrar este tpico, ele ir criar um arquivo do tipo txt, em branco, apenas, salve-o como ex531.vbs: dim fso,f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile("ex531.txt",2,True)'Cria o arquivo em si f.Close 'Sai do modo de edio do arquivo
Descrio Simula um <ENTER> no notepad. Cria uma nova linha igual a vbCrLf. String com valor 0, mas diferente de () Simula o pressionamento de <TAB>.
Estas constantes tambm podem ser usadas nos comandos InputBox e MsgBox, como tambm pode ser usadas em qualquer varivel do tipo String.
Agora para encerrar a parte sobre leitura e edio de arquivos, aqui vai um script para copiar um arquivo texto, usando os conhecimentos adquiridos at o momento.Salve-o como ex534.vbs: dim fso, file, texto, origem, destino, resp, wsh MsgBox "Exemplo 5-3.4",48,"Tutorial de VBS" resp = MsgBox ("Copiar arquivo ?",36,"Exemplo 5-3.4") If resp = 6 Then origem = InputBox("Caminho e nome do arquivo a ser copiado:") If origem <> "" Then REM PRIMEIRA PARTE DA COPIA DO ARQUIVO Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile(origem,1,false) texto = f.ReadAll 'Copia os dados do arquivo de origem f.Close 'Fecha o arquivo de origem REM SEGUNDA PARTE DA COPIA, REFERE-SE AO DESTINO MsgBox "Se o arquivo destino no existir ele ser criado",64 MsgBox "Se o arquivo destino existir ele ser sobrescrito",64 Do destino = InputBox("Caminho e nome do arquivo destino:") Loop Until destino <> "" REM TERCEIRA PARTE A COPIA PROPRIAMENTE DITA Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile(destino,2,true) f.Write texto 'Escreve os dados no arquivo de destino f.Close 'Fecha o arquivo de destino REM QUARTA PARTE, FINALIZANDO TUDO MsgBox "Arquivo "& origem &" copiado com sucesso",64,"Tutorial de VBS" resp = MsgBox("deseja abrir a cpia ?",36) If resp = 6 Then Set wsh = CreateObject("Wscript.Shell") wsh.Run destino End If End If End If
Apndice
A Operadores Aritmticos
A seguir segue uma tabela contendo todos os operadores aritmticos em VBS, explicando o que eles fazem: Operador + * / \ mod ^ Nome Adio Subtrao Multiplicao Diviso Diviso Diviso Potenciao Tabela de Operadores Aritmticos Descrio Soma dois nmeros Subtrai dois nmeros Multiplica dois nmeros Divide dois nmeros e retorna um nmero real Divide dois nmeros e retorna um nmero inteiro Divide dois nmeros e retorna o resto da diviso Faz a potenciao de 2 nmeros Exemplo 14 + 21 7 - 7 4 * 6 10 / 4 10 \ 4 15 mod 4 2^10 Resultado 35 0 24 2,5 2 3 1024