INTERPRETADOR DE SCRIPTS - MANUAL DO PROGRAMADOR SUMÁRIO 1) DESCRIÇÃO 2) FUNCIONAMENTO GERAL 3) ESTRUTURA DO PROGRAMA 4) UM PRIMEIRO EXEMPLO 5) DESVIOS 6) COMANDOS 6.1) INTERAÇÕES COM O USUÁRIO 6.2) MULTIMÍDIA 6.3) EXECUÇÃO EXTERNA E DESVIOS 6.4) OPERAÇÕES COM ARQUIVO 6.5) PROCESSAMENTO DE VARIÁVEIS 6.6) TESTES DE VALORES: EXECUÇÃO CONDICIONAL 6.7) REPETIÇÕES 6.8) OPERAÇÕES COM DIRETÓRIOS 6.9) OPERAÇÕES COM JANELAS 6.10) AÇÕES DE TECLADO E MOUSE 6.11) MSAA (MICROSOFT ACTIVE ACCESSIBILITY) 6.12) MENUS 7) CÓDIGOS RETORNADOS PELAS TECLAS 1) DESCRIÇÃO O programa Scriptvox é um interpretador de linguagem de comandos que permite um controle de execução de seqüências de ações controladas por um programa. Poderíamos pensar que é um equivalente dos antigos comandos .BAT do MS DOS, mas com um poder tremendamente aumentado, e adequado ao processamento no Windows. As ações que podem ser executadas foram talhadas para possibilitar a criação de interfaces sonoras para deficientes visuais. A linguagem é facílima de ser aprendida, mas tem muitas facilidades que tornam muito poderosa essa ferramenta. A linguagem foi criada para ser absolutamente simples de ser programada, quando o problema é simples. Desta forma, acreditamos que se crie um número grande de "programadores curiosos", gente que não teria a paciência para aprender uma linguagem convencional de computação ao ponto de criar alguma coisa útil. A linguagem pode ser pensada também como "a primeira linguagem" do aprendiz de programação, possibilitando que com um conhecimento muito rudimentar de programação, um estudante crie programas de interface que atuem sobre outros programas, possibilitando resultados muito interessantes e criativos. É importante ressaltar que um script tem escopo de funcionamento com lógica muito mais simples do que um programa convencional, escrito em Pascal ou outra linguagem qualquer. Assim, a linguagem não possui comandos poderosos de controle, as variáveis são todas do mesmo tipo (cadeias de caracteres) e o tratamento de rotinas não permite o uso de parâmetros. Da mesma forma, o tratamento aritmético é rudimentar. Entretanto, um programa que em Pascal poderia consumir 500 linhas ou mais pode ser escrito provavelmente em menos de 100 em ScriptVox. 2) FUNCIONAMENTO GERAL Um script de comandos é um arquivo de texto com extensão .CMD. Para ativá-lo no Winvox existem duas opções: a. Localizar o arquivo .CMD desejado com a opção de arquivos e executar este arquivo com a opção x b. Ativar o utilitário ScriptVox (opção U S) e informar o nome completo do arquivo .CMD Nota sobre a instalação: Deve-se assegurar que o arquivo \windows\dosvox.ini contenha as seguintes linhas [DOSVOX] PROG.CMD=c:\winvox\scripvox.exe [PROGUTIL] Util19=S,c:\winvox\scripvox.exe,UTSCRIPT,Executor de script de comandos 3) ESTRUTURA DO PROGRAMA a) Formato do programa O programa é um texto comum; os comandos podem vir em maiúsculos ou minúsculos, com ou sem acentos; as linhas podem ter até 256 letras; linhas em branco são ignoradas Uma linha começada por asterisco é também ignorada (comentários) Os brancos ao início da linha são desprezados, possibilitando o uso de endentação nos programas. b) Funcionamento As instruções do programa são executadas seqüencialmente, linha após linha. As únicas exceções são os comandos que promovem explicitamente um desvio no fluxo normal de execução, a saber: desvia, se, chama e retorna. Veremos o funcionamento desses comandos mais adiante. O programa permite o registro de informações nas chamadas "variáveis". Existem dois tipos de variáveis: a) as variáveis rápidas que são identificadas por uma única letra, de A até Z. Um programa pode usar no máximo 26 variáveis rápidas. b) as variáveis lentas que são identificadas por um caracter $ seguido de uma palavra. Um programa pode usar no máximo 200 variáveis lentas. As mesmas operações realizadas sobre variáveis rápidas podem ser realizada sobre as lentas mas estas são um pouco menos eficientes. Ambos os tipos de variáveis podem conter cadeias de caracteres de até 65000 letras. Números são tratados internamente como se fossem cadeias de caracteres (ligeiramente particularizadas). 4) UM PRIMEIRO EXEMPLO Para que se tenha uma breve idéia da cara de um programa vejamos o trecho abaixo. * Meu primeiro programa escreve "Oi amigo, qual seu nome?" lê n escreve "Muito prazer, "& escreve n escreve "Realmente não é nada difícil programar" A primeira linha é um comentário, e é ignorada pelo interpretador; em seguida a frase Oi amigo, qual o seu nome ? é mostrada numa janela e sintetizada em voz; a seguir o usuário deve teclar uma resposta pressionando depois Enter; esta resposta é armazenada na variável n; a máquina então fala: Muito prazer, (o indicador & diz que não se deve pular linha após essa escrita) colocar ao lado o que foi teclado pelo usuário, armazenado internamente na variável n, pular de linha (pois este comando escreve não possui uma letra & ao final) e finalmente escrever Realmente não é nada difícil programar Antes de prosseguir digite este texto, e o execute. Uma versão ligeiramente modificada deste texto faz uso de uma variável lenta. * Meu primeiro programa escreve "Oi amigo, qual seu nome?" lê $nome escreve "Muito prazer, "& escreve $nome escreve "Realmente não é nada difícil programar" 5) DESVIOS É possível inserir no texto do programa linhas começando pela letra @, seguidas (sem espaço em branco) por uma palavra. Essas linhas são chamadas de "rótulos" e servem para que se possa desviar a execução para uma delas. O trecho a seguir ilustra um desvio escreve "Digite uma palavra e eu repetirei" escreve "Termine com a palavra FIM" @outraPalavra lê t escreve t se t = "FIM" desvia @fim desvia @outraPalavra @fim escreve "Tchau" Notas sobre estilo: É comum inserir uma linha em branco antes de um rótulo para aumentar a legibilidade do programa. Quando os comandos de desvio provocam uma repetição de um trecho é usual que ele seja destacado através da inserção de alguns espaços em branco em todas as linhas (indentação). 6) COMANDOS Na descrição simplificada abaixo, o uso de chaves indica um item adicional e o de colchetes, um item obrigatório. 6.1) INTERAÇÕES COM O USUÁRIO a) escreve {MUDO} ["frase" ou variavel] ["frase" ou variavel] ... Escreve um texto, sintetizando simultaneamente. Se a palavra MUDO estiver contida, ele não é sintetizado, apenas escrito. Quando o comando é terminado por &, não pula linha. exemplos: escreve "Oi" escreve "Eu me chamo " & escreve "Antonio Borges" seja a "Nasci em 1956" escreve a b) lê [SENHA ou MUDO ou EDITA] [variável] Obtém do teclado uma cadeia de caracteres para uma variável. Quando o comando é terminado por &, apenas uma letra é lida; a opção de senha faz com que a escrita não apareça nem seja ecoada; a opção mudo faz com que os caracteres sejam escritos na tela, porém não sejam ecoados; a opção edita verifica se há algum conteúdo previamente armazenado na variável, e se houver, coloca-o no campo de leitura para que possa ser editado. exemplos: lê a lê SENHA s lê MUDO a lê c& lê EDITA $nomeantigo c) tela [LIMPA ou MINIMIZADA ou NORMAL ou @x,y] Controla a aparência da janela ou reposiciona o cursor nela. A opção Minimizada serve para tirar a janela do script da área visível, dando, provavelmente a vez para uma outra janela que esteja abaixo dela. A opção Normal traz para a atividade uma janela de script que esteja minimizada ou escondida atrás de outra. Exemplos: tela LIMPA tela @10,10 escreve "oi" d) bipa {tipoBip} Soa um bip ou clek. Se o tipo do bip for omitido será emitido um bip. Caso contrário, 0 = bip 1 = clek e) cor [valor ou variavel] fundo [valor ou variavel] Cores válidas: Preto = 0 Azul = 1 Verde = 2 Ciano (Azul) = 3 Vermelho = 4 Magenta = 5 Marrom = 6 Branco fosco = 7 Cinza escuro = 8 Azul claro = 9 Verde claro = 10 Ciano claro = 11 Vermelho claro = 12 Magenta Claro = 13 Amarelo = 14 Branco = 15 Escreve com a cor ou o fundo de letra dados, a partir deste momento. Para desenhar usando uma janela colorida, use o comando fundo seguido do comando tela limpa. Exemplos: COR 4 ESCREVE "Estou escrevendo este texto em vermelho" Fundo 9 ESCREVE "Vermelho em fundo azul claro" FUNDO 0 COR 7 TELA LIMPA f) observa TECLADO [variavel] A variável selecionada recebe um dos seguintes valores 0: não foi teclado nada 1: teclado requer leitura, foi teclado algo Exemplo: @maisUmBip bipa 1 observa TECLADO x se x = 0 desvia @maisUmBip lê a & O exemplo acima fica repatidamente clekando até que o usuário aperte uma tecla. g) espera [tempoEmSegundos] O script é paralisado durante o número de segundos especificado. Exemplo: bipa espera 2 bipa O exemplo acima realiza dois bips separados por dois segundos de intervalo. 6.2) MULTIMÍDIA a) toca ["nomeArquivo" ou variável] Este comando permite a execução de um arquivo multimídia (MIDI, WAV, etc), que possa ser processado pelo Windows. Se este comando for terminado por &, o script prossegue, não esperando a execução da mídia terminar. exemplo: toca "c:\windows\media\tada.wav" b) mci [variavelRetorno] ["frase" ou variável] Permite a execução de um comando do MCI - Media Control Interface, permitindo o controle completo dos dispositivos multimidia, como CD-ROM, exibição de filmes, sons, animações, etc... Veja manual de programação do Windows para uma relação completa de comandos MCI. exemplo: mci "PLAY CDAUDIO" 6.3) EXECUÇÃO EXTERNA E DESVIOS a) executa ["programa" ou variavel] Executa um programa comum. Quando o comando é terminado por &, o script prossegue em paralelo com a execução do programa, caso contrário, o script espera que o programa conclua sua execução para prosseguir. exemplo: executa "\winvox\edivox" escreve "Voltando do editor" b) desvia [@rotulo] ou desvia [SCRIPT] [nomescript] [@rotulo] Desvia a execução para um ponto qualquer indicado pelo @rotulo É comum este comando ser usado junto com o comando se. Uma variante deste comando permite a continuação da execução em um outro script (ou a partir de um rótulo deste). exemplo: escreve "Tecle vários nomes que eu vou repeti-los." escreve "Tecle apenas enter para terminar" @denovo lê n se n = "" desvia @fim escreve "Você teclou " & escreve n desvia @denovo @fim escreve "Obrigado!" Quando se deseja repetir uma ação várias vezes é interessante usar os comandos de repetição, que tornam o programa mais legível. c) termina [MUDO] Termina a execução do script. A palavra MUDO, quando especificada inibe a mensagem "fim de script" que normalmente é falada quando o script se finaliza. exemplo: escreve "oi" termina escreve "tchau" No exemplo acima, tchau não será falado, pois o comando termina será executado antes, e assim, o programa terminará. d) chama [@rotulo] Desvia a execução para um ponto qualquer indicado pelo @rotulo. Algum momento após esta operação, entretanto, pode-se executar o comando retorna para voltar a execução uma linha abaixo desta do comando chama. É o conceito convencional de chamada de subrotina. exemplo: escreve "Início do programa, chamando rotina de entrada" chama @entrar escreve "Agora, estou cansado chamando rotina de fim" chama @fim termina @entrada escreve "bom dia" retorna @fim escreve "tchau" escreve "vou dormir" retorna Uma rotina pode chamar outra rotina, ou seja, é possível executar outros comandos chama, antes de um comando retorna, desde que depois se executem diversos comandos retorna, um para cada chama. Não é possível passar parâmetros, como em muitas linguagens de programação. e) retorna A execução deste comando provoca o desvio para depois do último comando chama "empilhado". f) cmd [variavel] Este comando permite que uma variável seja montada (possivelmente através de operações de concatenação) e depois interpretada como se fosse um comando. exemplo: seja c "escreve ""Antonio""" escreve "Vou executar o seguinte comando" escreve c cmd c Nota: no exemplo acima é mostrado também como se colocam aspas dentro de aspas: duas aspas para cada aspa a introduzir. h) debug {+ ou -} Liga ou desliga o modo debug, no qual cada comando executado é falado. Esse comando é útil durante a verificação de possíveis erros do script. exemplo: escreve "Vou mostrar o que estou fazendo" debug + seja i 1 soma i 2 escreve i debug - escreve "Agora vou parar de mostrar" seja i 3 soma i 2 escreve i 6.4) OPERAÇÕES COM ARQUIVO Os comandos a seguir trabalham com arquivos. Para processamento, um arquivo deve ser aberto, e associado a um número de 0 a 9, que é referenciado durante a leitura ou escrita. a) abre #n ["nomeArquivo" ou variavel] Associa um número n a um arquivo Terminando este comando com &, o arquivo é criado (acrescentado se já existir) exemplo: abre #1 "c:\winvox\treino\china.txt" abre #1 "novo.txt" & b) fecha #n Libera o sistema Windows do controle do arquivo previamente aberto. O arquivo pode ser também uma conexão de Internet, como veremos mais adiante. exemplo: fecha #1 c) lê #n [variavel] Lê uma linha completa do arquivo, se ela existir. Deve-se sempre verificar se essa operação foi bem sucedida (por exemplo, se não chegou ao fim do arquivo) usando depois o comando checa. exemplo lê #1 x checa s se s <> 0 desvia @houveErroOuAcabouArquivo d) checa [variavel] Verifica o resultado da última operação lê ou escreve. A variável selecionada recebe um código para indicar o que houve. 0: não houve problemas <> 0: indica um erro ou fim de arquivo exemplo: lê #1 x checa s se s <> 0 escreve "Problemas no arquivo" e) escreve #n ["valor" ou variavel] Escreve uma linha no arquivo. Terminado por & não pula linha. exemplo: escreve #1 "Antonio " & escreve #1 "Borges" f) remove ["nomeArquivo" ou variavel] Remove um arquivo. Se este comando for terminado por & e houver um problema na remoção (por exemplo, se o arquivo não existir ou estiver protegido contra escrita, não acusa erro. exemplo: remove "x.txt" g) renomeia ["nomeArquivo" ou variavel] ["novoNome" ou variavel] Troca o nome de um arquivo por outro Se este comando for terminado por &, não acusa erro de execução se não puder renomear o arquivo. exemplos: renomeia "a.txt" "novo.txt" seja c "c.txt" seja d "d.txt" renomeia c d h) replica ["nomeArquivo" ou variavel] ["novoNome" ou variavel] Troca o nome de um arquivo por outro. Se o arquivo novo já existir ele será removido. Se este comando for terminado por &, não acusa erro de execução se não puder criar o arquivo. importante: Deve-se tomar o cuidado de não usar para o arquivo novo o o mesmo nome do antigo. Este será destruído antes da cópia. exemplos: replica "a.txt" "novo.txt" seja c "c.txt" seja d "d.txt" replica c d 6.5) PROCESSAMENTO DE VARIÁVEIS a) seja [variavelDestino] = {funcaoOpcional} [valor ou variavel] Atribui um valor a uma variável. O sinal de igual é usado por fins meramente visuais, e pode ser omitido. exemplos: seja a 1 seja a = 1 seja n "Antonio" Não são permitidas operações aritméticas no comando seja. Assim seja a=b+c é uma operação inválida. Pode-se opcionalmente usar neste comando uma das seguintes funções, que atuam como modificadores do valor ou variável TAMANHO indica que ao invés da variável (ou valor) deve usar o número de letras dela MAIUSC indica que antes de realizar a operação deve trocar o valor ou variável para maiúsculas TRIM indica que serão removidos todos os espaços em branco ao início e fim do valor ou variável POS [subcadeia] calcula a posição de uma subcadeia na variável RAND [n] retorna um valor inteiro aleatório entre 0 e n-1 (inclusive) obs: este comando está geralmente associado ao uso do comando RANDOMIZA Outras operações válidas são: DATA obtem a data no formato DD/MM/AAAA HORA obtém a hora no formato HH:MM:SS DIA obtém o nome do dia (segunda, terça, etc...) TEMPO calcula o tempo em centésimos de segundos desde que o programa começou. exemplo: seja a "Antonio" seja t TAMANHO a escreve t seja a MAIUSC a seja a TRIM " 123 " Será escrito 7 depois ANTONIO em maiúsculas depois 123 sem espaços antes nem depois seja a "Antonio" seja p POS "nio" a escreve p Será escrito 5 seja d DATA seja s DIA seja h HORA escreve d & escreve " " & escreve s & escreve " " & escreve h Será escrita data, o dia da semana e a hora. b) soma [variavelDest] [valor ou variavel] A variável destino é incrementada com o valor ou variavel dado. Na soma (não na subtração), eventuais prefixos alfabéticos da variável são mantidos. O valor pode também ser negativo. exemplo: seja r 5 soma r 2 escreve r seja r "Antonio2" soma r 4 escreve r serão escritos os valores 7 e Antonio6 essa forma de somar nomes é muito útil quando se realiza processamento de vários arquivos, que frequentemente são numerados e possuem prefixos, por exemplo arq1, arq2, arq3. c) subtrai [variavelDest] [valor ou variavel] A variável destino tem diminuído o valor dado. exemplo: seja r 5 subtrai r 2 escreve r será escrito 3 como resposta. d) multiplica [variavelDest] [valor ou variavel] A variável destino é multiplicada pelo valor ou variável dado. exemplo: seja r 5 multiplica r 2 escreve r será escrito 10 como resposta. e) divide [variavelDest] [valor ou variavel] A variável destino é dividida pelo valor ou variável dado, sendo desprezado o resto. exemplo: seja r 9 divide r 2 escreve r será escrito 4 como resposta. f) concatena [variavelDest] [valor ou variavel] Adiciona à direita da variável destino algumas outras letras. exemplo: seja a "Anto" concatena a "nio" seja n 2 concatena a n seja b " Borges" concatena a b escreve a Será escrito Antonio2 Borges. g) copia [variavelDest] [variavel] [numcaracinicio] [numcaracfim] Traz para a variável destino um pedaço de uma outra variável exemplo: seja a "bananada" copia x a 3 6 escreve x Será escrito nana. h) transfere [DE, PARA] [variavel] Move o conteúdo textual de uma linha da área de transferência DE ou PARA uma variável Exemplos: seja a "Núcleo de Computação Eletrônica" transfere de a No exemplo acima, o texto NCE será colocado na área de transferência do Windows, podendo, posteriormente ser colado em algum outro utilitário. transfere para a escreve a No exemplo acima será escrito na tela (e também sintetizado) o conteúdo da área de transferência. i) substitui [variavel] [valor antigo] [valor novo] Troca todas as ocorrências de uma cadeia por outra numa variável exemplo: seja a "Eu gosto de comer kkk" seja v "banana" substitui a "kkk" v escreve a Será escrito: Eu gosto de comer banana. j) randomiza Faz com que o valor retornado no comando seja ... RAND varie a cada execução deste script (se este comando não for usado a seqüência de números pseudo-aleatórios será sempre a mesma). exemplo: randomiza seja r rand 10 escreve r seja r rand 10 escreve r seja r rand 10 escreve r Serão escritos três números aleatórios entre 0 e 9. 6.6) TESTES DE VALORES: EXECUÇÃO CONDICIONAL a) se {NÃO} [variavel] [comparador] ["valor" ou variavel] comando Este comando permite a execução condicional de comando qualquer, baseado numa comparação de uma variável com outra (ou com um valor). exemplo: escreve "Qual sua opção?" lê n se n = "T" desvia @testaTeclado se n = "E" desvia @editarTexto se n = "L" desvia @lerTexto A comparação pode ser feita usando os seguintes comparadores: = igual (exceto possívelmente por maiúsculas) == igual inclusive nas maiúsculas <> diferente < menor > maior <= menor ou igual >= maior ou igual =* é começada por *= é terminada por *=* existe como subcadeia em exemplo: escreve "Qual o seu nome completo" lê n se n *= "Borges" escreve "Você é parente do Antonio Borges?" b) forma estendida do comando se se [NÃO] [variavel] [comparador] ["valor" ou variavel] ... (lista de ações a serem executadas) fim se Freqüentemente queremos realizar mais de um comando quando realizamos um comando "se". Para isso, colocamos a lista de comandos desejados embaixo do comando se, e não ao lado. Para indicar o fim da lista de comandos usamos as palavras fim se. exemplo: se n = "Antonio" escreve "É um cara legal" escreve "Na verdade, é um cara muito legal" fim se Nota: não é possível usar comandos "se" nesta forma, aninhados uns dentro dos outros, como em muitas linguagens de programação. Entretanto, é possível colocar entre os comandos, alguns comandos "se" na forma simples (com o comando a executar do lado). se n = "Antonio" se i > 40 escreve "Está certo, ele tem mais do que essa idade" escreve "Ele é um cara legal" fim se b) segunda forma estendida do comando se se [NÃO] [variavel] [comparador] ["valor" ou variavel] senão (indica o início das ações alternativas) fim se (marca o final) Esta é uma forma alternativa de realizar testes, em que é possível especificar não apenas os comandos a executar caso a condição testada seja verdadeira, mas também outras ações que serão executadas na situação contrária. exemplo: se i < 10 escreve "É uma criança" escreve "Tem que estudar" senão escreve "Não é uma criança" escreve "Mas também tem que estudar" fim se c) Formas encadeadas de comandos se/senão. É válido realizar seqüências de testes, se/senão, como a seguir exemplo: se i < 12 escreve "É uma criança" escreve "Tem que estudar" senão se i < 19 escreve "É um jovem" escreve "Tem que estudar especialmente" senão escreve "É um adulto" escreve "Além de estudar ainda tem que ensinar" fim se 6.7) REPETIÇÕES a) enquanto [NÃO] [variavel] [comparador] ["valor" ou variavel] ... fim enquanto Este comando permite a execução repetida de uma lista de comandos. Esta lista é terminada pelo comando fim enquanto. A execução ocorre repetidas vezes até que a comparação realizada seja verdade. exemplo: escreve "Tecle palavras, a última será fim" seja p "x" enquanto a <> "fim" lê p seja l tamanho p escreve "possui " & escreve l & escreve " letras" fim enquanto Será escrito o número de letras de diversas palavras lidas (a última é fim) Não é possível realizar a execução de dois comandos enquanto embutidos. Importante: cuidado para não usar o comando enquanto quando a condição nunca tornar-se verdadeira. Por exemplo: seja a "2" enquanto a <> "1" soma a 1 fim enquanto O exemplo acima fica em eterno loop e não há como interrompê-lo. b) repete [variavel] ["valor" ou variavel] ... fim repete Este comando é usado para repetir um trecho um número determinado de vezes. O trecho é terminada pelo comando fim repete. A variável recebe a contagem do número de vezes. exemplo: escreve "Eu digo e repito:" repete n 4 escreve n & escreve " - Scriptvox é mais poderoso do que parece" fim repete será escrito Eu digo e repito: 1 - Scriptvox é mais poderoso do que parece 2 - Scriptvox é mais poderoso do que parece 3 - Scriptvox é mais poderoso do que parece 4 - Scriptvox é mais poderoso do que parece 6.8) OPERAÇÕES COM DIRETÓRIOS a) busca [variavel] {DIR} [["nomeArqs" ou variável] ou PRÓXIMO] Esse comando permite saber se um arquivo (ou mais que um) existem, dada uma "máscara de busca" (algo semelhante ao comando DIR do DOS). Ao especificar a palavra DIR no comando é efetuada a busca de diretório e não de arquivo. O nome do arquivo é jogado na variável, ou este é deixado em branco. No caso do uso de máscaras, após a primeira busca, deve usar o comando com a palavra PRÓXIMO ao invés do nome da variável. Se omitido nome ou PRÓXIMO devolve diretório atual exemplo: *Testa se um arquivo cujo nome é dado existe. escreve "Informe o nome do arquivo" lê a busca x a se x = "" escreve "Arquivo não existe" senão escreve "Arquivo existe" fim se *Apaga os arquivos temporários do diretório atual escreve "Apagando os arquivos temporários" busca a "*.TMP" enquanto a <> "" escreve a remove a & busca a PROXIMO fim enquanto *Lista os nomes dos subdiretórios do diretório atual busca a DIR "*.*" enquanto a <> "" escreve a remove a & busca a PROXIMO fim enquanto b) dir {CRIA, REMOVE} ["nomeDiretorio" ou variavel] {terminado por & não dá erro ou dir {TROCA} ["nomeDiretorio" ou variavel] [nome novo} {terminado por & não dá erro Esse comando cria, remove ou troca para um diretório exemplo: dir CRIA "\winvox\treino\novodir" 6.9) OPERAÇÕES COM JANELAS a) espera [tempo] ["nome janela" ou variavel] Espera, no máximo por um certo tempo em segundos, que uma janela com título começado por um certo nome receba atividade no Windows (venha para cima das outras). exemplo: executa "winword" & espera 10 "Microsoft Word" b) janela [FECHA, MINIMIZA, MAXIMIZA, NORMAL] ["nome janela" ou variavel] Fecha, minimiza, maximiza ou traz para o topo das outras uma certa janela. exemplo: executa "notepad" espera 10 janela FECHA "Bloco de Notas" c) captura [TÍTULO ou ATIVA, CAMPO, FOCO] [variavel] Captura para uma variável ou título da janela ativa, o campo ativo ou o elemento que está com o foco do Windows. exemplo: captura ATIVA x escreve x escreverá SCRIPTVOX, o nome do programa atual. 6.10) AÇÕES DE TECLADO E MOUSE As ações a seguir são enviadas diretamente para a janela ativa atual do windows, permitindo o seu uso em "controle remoto". Esses comandos, portanto são fundamentais para a criação de interfaces adaptativas para programas do Windows. a) digita "frase" Envia uma seqüência de teclagens para o programa ativo, e depois Enter. Se terminado por &, o Enter não é enviado. exemplo: *digita um texto automáticamente no EDIVOX executa "\winvox\edivox" & espera 2 digita "x.txt" espera 1 digita "Este é um teste de digitação automática" digita "Vamos verificar " & digita "se funciona" espera 2 escreve "Atenção, EDIVOX ficou aberto" Nota: não esquecer do & depois do comando de executar, caso contrário o programa scriptvox será bloqueado até que aquele termine. b) aciona [tecla virtual] Envia uma tecla virtual para o programa ativo. São as seguintes as teclas virtuais mais importantes: UP, DOWN, LEFT, RIGHT ESCAPE ou ESC ENTER e RETURN TAB F1 até F12 INS, DEL ou DELETE HOME, END PAGEUP, PAGEDN PRIOR, NEXT -> sinonimos de pageup e pagedn SNAPSHOT -> printScreen As teclas a seguir são usadas em conjunto com outras, por exemplo ALT+A, CONTROL+F1 CTRL+ SHIFT+ ALT+ Exemplo: chamar um edivox para editar o arquivo x.txt, remover a primeira linha do texto, salvar e sair executa "\winvox\edivox" & espera 2 digita "x.txt" espera 1 aciona "CTRL+Y" aciona "F2" espera 1 aciona "ESC" aciona "S" aciona "S" c) clica {DUPLO, NULO} [x,y ou TELA x,y] Executa um clique ou clique duplo de mouse numa posição. A palavra NULO indica uma movimentação pura, sem clique. O uso da palavra TELA indica que é uma coordenada absoluta de tela. Se ela for omitida a coordenada é calculada em função da janela atualmente ativa no Windows. A coordenada superior esquerda da tela é (0, 0). exemplo: clica TELA 10, 590 espera 1 aciona "DOWN" aciona "DOWN" aciona "ENTER" termina O exemplo acima abre o menu iniciar e aciona a segunda opção de baixo para cima (nota: tela configurada em 800 x 600). d) le [MOUSE ou RATO] [x,y ou TELA x,y] Obtém a posição do mouse, em função das coordenadas da tela, ou da janela ativa. A coordenada superior esquerda da tela é (0, 0). 6.10) OPERAÇÕES COM INTERNET O scriptvox é capaz de realizar comunicações (um tanto limitadas) através de TCP/IP. Apesar desses limites, o número de aplicações que é possível construir é brutalmente grande, pois a maior parte dos protocolos atuais usa a forma textual, muito adequada para processamento com este programa. A única dificuldade provável é conhecer as mensagens válidas nos diálogos executados pelos diferentes servidores (o que se chama de protocolo), e mandar as mensagens segundo esse padrão. a) internet [INICIA, TERMINA] Este comando é obrigatório para estabelecer ou terminar a comunicação via Internet. exemplo: internet INICIA internet TERMINA b) conecta #n ["valor" ou variavel] ["porta" ou variavel] Conecta uma porta remota, associando-a a um arquivo. Posteriormente, pode-se tratar a conexão exatamente como se fosse um arquivo comum (não esquecer de fechar o arquivo). exemplo: pergunta a hora a um servidor remoto que horas são (porta 13 TCP/IP) internet INICIA conecta #1 "intervox.nce.ufrj.br" 13 le #1 h escreve h fecha #1 internet TERMINA exemplo: pergunta a um servidor POP3 quantas cartas existem para ser lidas (nota: a maioria das respostas do servidor é ignorada) internet INICIA conecta #1 "caec.nce.ufrj.br" 110 lê #1 r escreve #1 "USER upgrade" lê #1 r escreve #1 "PASS dosvoxrnp" lê #1 r escreve #1 "STAT" lê #1 r escreve "--- resposta sobre conteúdo de cartas do servidor ---" escreve r escreve #1 "QUIT" lê #1 r internet TERMINA c) serve #n ["porta" ou variavel] Este comando permite a criação de um servidor TCP/IP. Uma vez que alguém acesse esta porta, o programa abrirá automaticamente o arquivo #n no qual se pode escrever e ler, estabelecendo a conversa com o parceiro. exemplo: envia uma mensagem para quem acessar a porta 2000 internet INICIA serve #1 2000 escreve #1 "Oi, é um prazer falar com você" lê #1 x escreve "Parceiro falou o seguinte" escreve x fecha #1 internet TERMINA d) observa #n [variavel] 0: porta TCP/IP não requer atenção 1: porta requer leitura Este comando serve para permitir que um programa não fique preso a uma recepção de dados (comando lê). Quando o programa quiser saber se chegou alguma mensagem, pode observar e verificar. quando ocorre uma desconexão remota, existe a indicação que a porta requer leitura. Assim use o comando checa para verificar se houve um fechamento do arquivo. exemplo: internet INICIA conecta #1 "caec.nce.ufrj.br" 110 repete v 10 observa #1 s se s <> 0 desvia @chegoualgo escreve "esperando mais um segundo" espera 1 fim repete escreve "parceiro ficou mudo, vou-me desconectar" desvia @fim @chegoualgo lê #1 x escreve "Parceiro falou o seguinte" escreve x @fim fecha #1 internet TERMINA d) ip [LOCAL, REMOTO] #n [variavel] O comando IP serve para obter o número IP da conexão, tanto do lado local quanto remoto. A conexão precisa ter sido aberta anteriormente com um comando conecta ou serve. exemplo: internet inicia conecta #1 "www.ig.com.br" 80 ip local #1 l ip remoto #1 r escreve l escreve r fecha #1 internet termina 6.11) MSAA (MICROSOFT ACTIVE ACCESSIBILITY) O Windows fornece informações sobre o que é exibido na tela, por meio de um sistema chamado MSAA. Para acessar essas informações, você pode: .perguntar qual o objeto que está na posição x,y (Captura) O comando para isso é MSAA captura x y . pedir ao windows que fique monitorando os eventos como cliques de mouse para depois indicar o elemento que foi atingido. Os comandos para iniciar e finalizar esta monitoração são: MSAA monitora MSAA fim MSAA CHECA s Este último comando (CHECA) verifica se houve algum evento pode-se usar quando a variável = 0 não ocorreu nenhum evento na tela do Windows. Nota: é obrigatório executar este comando CHECA de tempos em tempos para que a monitoração da tela seja copiada para os buffers internos do scripvox. Pode por meio do Scriptvox obter o nome do elemento, o seu código, tipo, estado, valor e posição. Os comandos para isso são: MSAA nome [variavel] MSAA codigo [variavel] MSAA tipo [variavel] MSAA estado [variavel] MSAA valor [variavel] MSAA area [variavel x] [variavel y] [variavel larg] [variavel alt] Exemplos: 1) o programa a seguir lê continuamente o nome dos elementos da tela sobre o qual o mouse está-se posicionando. @loop lê mouse tela x y MSAA captura x y MSAA nome n MSAA valor v se a <> n escreve n seja a n fim se observa teclado t se t = 0 desvia @loop termina MSAA monitora @loop MSAA checa c se c = 1 MSAA nome n se a <> n escreve n seja a n fim se observa teclado t se t = 0 desvia @loop MSAA fim termina 6.12) MENUS Para interagir com o computador, freqüentemente faz-se uso de um menu de opções controlado com as setas. Os menus são criados na tela fornecendo as suas opções. O comando menu executa pode ser chamado várias vezes para realizar diversas operações sobre o mesmo menu. Assim quando alguma letra é pressionada, o comando menu executa retorna os valores abaixo: Os comandos são: menu CRIA xmin ymin xmax ymax menu ADICIONA ["valor" ou variavel] menu EXECUTA [variavel] [variavel] [variável] { rsão etornados respectivamente: número do item, letra teclada e texto do item } menu TERMINA Exemplo: fundo 0 tela limpa fundo 6 menu CRIA 1 1 30 3 menu ADICIONA "primeira opção" menu ADICIONA "segunda opção" menu ADICIONA "terceira opção" menu EXECUTA n l t fundo 0 menu TERMINA escreve "Item escolhido " n escreve "Letra teclada " l escreve "Texto " x 7) CÓDIGOS RETORNADOS PELAS TECLAS Os códigos gerados pelo comando LÊ com terminador & e pelo menu executa são os seguintes, sempre precedidos por #0, por exemplo "#0#59". F1=#59; F2=#60; F3=#61; F4=#62; F5=#63; F6=#64; F7=#65; F8=#66; F9=#67; F10=#68; F11=#69; F12=#70; ALT F1=#104; CONTROL F1=#94; CONTROL F2=#95; CONTROL F3=#96; CONTROL F4=#97; CONTROL F5=#98; CONTROL F6=#99; CONTROL F7=#100; CONTROL F8=#101; CONTROL F9=#102; CONTROL F10=#103; CONTROL F11=#104; CONTROL F12=#105; INSERT=#82; DEL=#83; HOME=#71; END=#79; PGUP=#73; PGDN=#81; CIMA=#72; BAIXO=#80; ESQ=#75; DIR=#77; ENTER=#13; BACKSPACE=#8; ESC=#27; TAB=#09; CONTROL PGUP =#132; CONTROL PGDN=#118; CONTROL ESQ=#115; CONTROL DIR=#116; CONTROL UP=#113; CONTROL DOWN=#114; CONTROL BACKSPACE=#127; CONTROL ENTER=#10; SHIFT INSERT=#$FE; CONTROL INSERT=#$FF;