Este exemplo demonstra como ler os valores do registro, veja:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
//exemplo 04 - como fazer leitura em uma chave de registro: /**__________________________________________________________________** //lendo uma string: (REG_SZ, REG_EXPAND_SZ ); inclua'win' //primeiro abra a chave em modo leitura: k = win.RegAbraChave( HKEY_CURRENT_USER,'PrismaInfo', KEY_LEITURA); //KEY_READ = MODO LEITURA //A funcao acima retorna a chave e tipo em caso de sucesso ou nulo quando em erro. se k entao //verifica se foi retornado uma chave aberta ou nulo v , tip = win.RegLeiaChaveStr( k , 'TESTE_STR' ); //use a funcao que lê strings. se tip == REG_SZ entao imprima'sz' fim se v entao win.Msg(nulo,v,'String') senao win.poe(conv_w"ERRO - chave não encontrada no registro ou não pôde ser aberta") fim; //multistring (o retorno é uma tabela de strings tab , tip = win.RegLeiaChaveStr( k , 'TESTE_MULTISTR' ) ; //use a funcao que lê strings. se tip == REG_MULTI_SZ entao se tipo(tab) == 'tabela' entao win.Msg( nulo , tabela.concat( tab , ' | '), 'MULTI_SZ'); fim senao win.poe( tab ); fim //fim tip == win.RegFecheChave(k); //agora que já obtivemos o valor, podemos fechar a chave, nunca se esqueça disso. fim //se k /**__________________________________________________________________** //lendo número k2 = win.RegAbraChave( HKEY_CURRENT_USER,'PrismaInfo', KEY_LEITURA); se k2 entao v = win.RegLeiaChaveNum ( k2 , 'TESTE_NUM' ); //um DWORD convertido para prisma number. se v entao win.Msg(nulo , v , 'Numero' ) senao win.poe(conv_w"ERRO - chave não encontrada no registro ou não pôde ser aberta") fim; win.RegFecheChave(k2); fim /**__________________________________________________________________** //LENDO UMA CHAVE BINARIA = REG_BINARY // O RETORNO É UMA TABELA DE NUMEROS: //cada número é de 0 a 255. (ou em hexa = 0 a ff; k3 = win.RegAbraChave( HKEY_CURRENT_USER,'PrismaInfo', KEY_LEITURA); se k3 entao v = win.RegLeiaChaveBin ( k3 , 'TESTE_BIN' ); se v entao win.Msg( nulo, tabela.concat(v,' | ') , 'Binary' ) senao win.poe(conv_w"ERRO - chave não encontrada no registro ou não pôde ser aberta") fim; win.RegFecheChave(k3); fim win.poe(conv_c"ok para sair..."); |
A novidade aqui fica por conta da função de leitura (As outras funções foram bem explicadas nos posts anteriores);
1 – abra uma chave com o tipo KEY_LEITURA ou KEY_ACESSO_TOTAL (acesso total para leitura, escrita, criação etc);
2 – use a chave retornada na função de leitura logo abaixo:
1 |
v , tip = win.RegLeiaChaveStr( k , 'Nome' );//para string (REG_SZ, REG_MULTI_SZ, REG_EXPAND_SZ) |
1 |
v , tip = win.RegLeiaChaveNum( k , 'Nome' );//para numero (REG_DWORD, REG_QWORD) |
1 |
v , tip = win.RegLeiaChaveBin( k , 'Nome' );//Tabela de números(REG_BINARY); |
Em que ‘k’ é a chave aberta anteriormente, e ‘Nome’ é o nome da subchave ou valor a ser lido.
O tipo de retorno vai depender do tipo do valor. Para facilitar ao programador, esta função retorna duas variáveis:
v = valor que pode ser um número, uma string ou tabela de hexa, de strings etc.
tip = o tipo de retorno, basta fazer uma comparação para saber como usar o tipo. Ex.: se tip == RE_SZ entao [código aqui para string] fim
Após receber os dados corretamente em Prisma, não precisará mais da chave aberta. Então vá para o passo 3;
3 – feche a chave com a função win.RegFecheChave(chave);
Como receber os retornos:
Dependendo do tipo do dado no regedit o retorno será um tipo prisma diferente,
Veja abaixo:
REG_DWORD = o retorno em prisma será um número, portanto poderá fazer: operações, comparações ou qualquer outro uso feito a um número em prisma.
REG_QWORD = igual ao de cima, com a diferença de que este, dentro do sistema Windows, é 64 bits. Para Prisma não faz diferença é número igual ao anterior.
REG_SZ = uma string normal. Ao receber este valor você pode fazer qualquer operação aplicada a uma string em Prisma.
Dica: não tem como gravar números com casas decimais após o ponto, então converta para string e grave como REG_SZ. Durante a leitura basta converter para número novamente em Prisma com as funções:str = convstring(numero); e num = convnumero(str);
REG_BINARY = o valor retornado é uma tabela (matriz) de números, bastando usar o comando ‘para’ ou ‘enquanto’ para criar um laço de repetição e ler todos os índices da tabela. Após ler cada dado dessa tabela, poderá fazer qualquer operação aplicável a um número em Prisma.
REG_MULTI_SZ = o valor recebido é uma tabela de strings (matriz de strings), use o comando ‘para’ ou ‘enquanto’ para ler cada índice da tabela, e depois poderá fazer qualquer operação aplicável a uma string em Prisma.
REG_EXPAND_SZ = o valor retornado é uma string podendo conter variáveis de ambiente, como “%TEMP%”; use como uma string em Prisma.
Espero que tenha sido útil. Qualquer dúvida ou crítica poste nos comentários ou no fórum oficial aqui;
Att. Adalberto Amorim Felipe