WAPI v1.05 - Funções da API do Windows

Fórum sobre ferramentas de apoio à programação (Clipper/[x]Harbour)

Moderador: Moderadores

Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Sobrando um tempinho nesta madrugada, resolvi pesquisar a respeito e acabei incluindo mais um switch, para obter várias informações acerca do sistema.

Código: Selecionar todos

  -DELETEREGISTRY:<fullKeyPath>;<entryName>;<resultFile>
  -FLASH:<times>[;<handle>]
  -GETAPPSINFO:<resultFile>
  -GETCLIPBOARD:<resultFile>
  -GETDEFPRINTER:<resultFile>
  -GETHDINFO:<resultFile>
  -GETMYHANDLE:<resultFile>
  -GETPRINTERS:<resultFile>
* -GETSYSTEMINFO:<resultFile>
  -GETWINDOWSINFO:<resultFile>
  -HIBERNATE
  -PLAYWAVE:<source>
  -POWEROFF
  -PRINT:<printerName>;<inputFile>;<reportTitle>;<resultFile>
  -READREGISTRY:<fullKeyPath>;<entryName>;<resultFile>
  -REBOOT
  -SETAPPTITLE:<title>
  -SETBUTTONX:<on|off|del>
  -SETCLIPBOARD:<valueType>;<value>;<resultFile>
  -SETSTARTBUTTON:<hide|show|disable|enable>
  -SETTASKBUTTON:<hide|show>[;<handle>]
  -SUSPEND
  -URL2FILE:<URL>;<fileName>;<timeOut>;<resultFile>
  -WINDOW2TOP:<handle>
  -WRITEREGISTRY:<fullKeyPath>;<entryName>;<valueType>;<value>;<resultFile>
O switch retorna uma lista de strings (separadas por vírgulas), onde constam:

1) Nome do computador
2) Nome do usuário logado no sistema
3) Diretório de instalação do Windows (nome longo)
4) Idem, nome curto
5) Diretório do sistema (nome longo)
6) Idem, nome curto
7) Diretório de instalação de programas (nome longo)
8) Idem, nome curto
9) Diretório do desktop do usuário (nome longo)
10) Idem, nome curto
11) Diretório do desktop para todos os usuários (nome longo)
12) Idem, nome curto
13) Diretório da pasta "Meus Documentos" (nome longo)
14) Idem, nome curto

A função de biblioteca, GetSysInfo(), naturalmente, retorna uma matriz.

Download: http://buzinello.com/download/wapi.zip

E a recomendação de sempre: leia o README.TXT no diretório WAPI\LIB para conhecer os detalhes das funções e/ou o fonte WAPI.C para conhecer os switches.

[]'s
Maligno
http://www.buzinello.com/prg
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

LEGAL !. Esta função é bem completa. Pensar que eu fazia rodar todo uma listagem através do RUN DIR > DIR.TXT e ainda sujeito a não funcionar adequadamente ora pelo WINXP ou pelo VISTA por causa do sinal de re-direcionamento ">". Além do mais que demorava e sujeito a erro estava a minha rotina.

Sem falar do NOME-COMPUTADOR e NOME-DO-LOGADO, que me estava sendo falta.

Eu acho que quando o programador decide fazer um SISTEMA, deve pensar de forma que SIMPLEFIQUE a vida do usuário, tem que ser VERSÁTIL (independente da versão do WINDOWS), com RECURSOS que possibilite a CONFIGURAÇÃO do SISTEMA pelo próprio usuário. Tudo isto isto aliado com AGILIDADE e PRATICIDADE. Parece redundante, não é ?. Mas veja bem, que os nossos esforços valem a pena para que o CLIENTE fique SATISFEITO e consiga PRODUZIR cada vez mais. Porque se o cliente está BEM, NÓS também iremos estar. A idéia de fazer um SISTEMA que se ADECUE ao CLIENTE e não o CLIENTE que deva se ADECUAR ao SISTEMA. Isto é qualidade do PRODUTO.

Obrigado, MALIGNO ! Esta BIBLIOTECA está cada vez MELHOR !.

Percebí que no seu código-fonte, é utilizado uma função interna chamada GETSHORTPATHNAME(). Esta função faria com a "tradução" do modo de NOMES-CURTOS ?. E será, que não seria possível disponibilizá-la pra nós também dentro do WAPI ?. Daí então acho que você poderia sintetizar o número de resultados (VETORES após leitura do arquivo-de-resultado) da função -GETSYSTEMINFO. Desta forma não precisaria gravar em arquivo os NOMES-CURTOS e sim os NOMES-LONGOS para posteriormente passar pela função de "tradução", isto conforme usuário solicitar. Que você acha de adicionar o recurso do GETSHORTPATHNAME() e sintetizar o resultado da função -GETSYSTEMINFO ?.

Mais uma vez obrigadão ! :)Pos :D :)) -:]
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Que você acha de adicionar o recurso do GETSHORTPATHNAME() e sintetizar o resultado da função -GETSYSTEMINFO ?.
Não vejo razão pra isso. Se você utiliza nomes longos, obrigatoriamente você terá de usar aquela biblioteca para Clipper (LBFN?), que internamente já possui uma função de conversão. Portanto, não há necessidade. E para quem não usa nomes longos, o WAPI já fornece as duas formas.

[]'s
Maligno
http://www.buzinello.com/prg
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Só achei que com essa outra função de tratamento de NOMES-LONGOS, o WAPI ficaria mais ainda versátil. Eu deixaria de usar essa outra biblioteca LBFN. Ou a função interna GETSHORTPATHNAME(), não é confiável ?. Além do mais, sempre é bom ter a opção de NOMES-CURTOS e os resultados do-GETSYSTEMINFO deixariam de ser redundantes com a nova opção.

Mas enfim, não há drama algum !. A biblioteca é sua, e você sabe avaliar o que é bom pra ela. Assim, como mostrar a versão da biblioteca, pois sempre haverá alguém que tenha uma versão anterior querendo fazer algo que na versão mais atual tenha. Think about !

Um clip-abraço :)Pos
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Só achei que com essa outra função de tratamento de NOMES-LONGOS, o WAPI ficaria mais ainda versátil. Eu deixaria de usar essa outra biblioteca LBFN.
Se você usa a LBFN é porque usa nomes longos. Você precisa dela. E se precisa dela, não precisa de outra função para obter os nomes curtos. Aí sim seria redundância. Além do que, no WAPI quero oferecer apenas serviços que não existam em Clipper. Não é o caso dessa função.
Ou a função interna GETSHORTPATHNAME(), não é confiável ?.
É uma função da API do Windows. Imagino que possa confiar nela. :)
Além do mais, sempre é bom ter a opção de NOMES-CURTOS e os resultados do-GETSYSTEMINFO deixariam de ser redundantes com a nova opção.
Não vejo redundância, uma vez que são outras versões dos nomes. Além do que, incluí essa opção apenas porque havia "espaço" para o switch crescer. Resolvi incluir os nomes curtos para os casos daqueles que não usam nomes longos, como eu. Era uma necessidade.
mostrar a versão da biblioteca, pois sempre haverá alguém que tenha uma versão anterior querendo fazer algo que na versão mais atual tenha.
Ah, sim. Já estou pensando nisso. Mas provavelmente não será um switch.

[]'s
Maligno
http://www.buzinello.com/prg
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

MALIGNO, me permita fazer algumas aclarações e sugestões.
Maligno escreveu:Se você usa a DBLFN é porque usa nomes longos.
Bem, na maioria dos casos eu preciso dos nomes de arquivos e/ou drietórios de forma CURTA, não longa. Hoje em dia é mais comum encontrar os nome em modo LONGO, mas por questão do DOS é preciso em modo CURTO. E o DBLFN.LIB possue as duas funções: LFNSHORT e LFNLONGTOSHORT, cujos nomes ja diz o que elas fazem. Veja outros recursos desta LIB também: http://www.ousob.com/ng/lfnlib/ng249.php
Maligno escreveu:Não vejo redundância ... //... Resolvi incluir os nomes curtos para os casos daqueles que não usam nomes longos
Ok, perfeito, acho útil pois daí não precisaria usar o DBLFN. Eu me expressei mal quando. Eu quiz dizer que se você fizesse uma nova função para conseguir os NOMES-CURTOS, alguns itens do resultado do GETSYSTEMINFO passariam a ser redundantes porque daí então não haveria necessidade de gerar os caminhos em modo CURTO.
Maligno escreveu:Ah, sim. Já estou pensando nisso. Mas provavelmente não será um switch.
Seria bom que o WAPI.EXE, ao ser executado sem parâmetro algum, mostrasse a versão e/ou o mesmo na WAPI.LIB, quando chamada sem parâmetro algum.

Aceite mais uma sugestão, MALIGNO. Vejo que a sua documentação é bem extensa e completa. Ja pensou fazer em arquivo .NG ? Da qual todos estamos acostumados a utilizar.

Um clip-abraço :)Pos
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Pablo César escreveu:na maioria dos casos eu preciso dos nomes de arquivos e/ou drietórios de forma CURTA, não longa.
Estou na mesma situação. :)
Eu quiz dizer que se você fizesse uma nova função para conseguir os NOMES-CURTOS, alguns itens do resultado do GETSYSTEMINFO passariam a ser redundantes porque daí então não haveria necessidade de gerar os caminhos em modo CURTO.
É verdade. Mas realmente não há necessidade disso. Quem for usar nomes longos, obrigatoriamente precisará usar a lib LFN. E se usar, não precisará deste recurso no WAPI.
Seria bom que o WAPI.EXE, ao ser executado sem parâmetro algum, mostrasse a versão
Pois é exatamente isso que vou fazer.
Ja pensou fazer em arquivo .NG?
Já pensei. Mas só pensei. :)))) Vai demorar um pouco mais.

[]'s
Maligno
http://www.buzinello.com/prg
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Eu sugerí a criação do NG, mas eu não sei como fazer. Sei que existe um aplicativo ou uma LIB que é possível construir tais NGs. Se eu conseguisse aqui no FORUM explicação e utilitário de como fazer, eu me habilito para ajudar a fazer baseado na sua documentação. Se você quiser.

Um clip-abraço :)Pos
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

* * * * * * * * * * * * * * * * * * * * *

A linha espalhafatosa serve apenas para marcar o fim de uma fase e o início de outra na história do WAPI, pois daqui por diante teremos um acompanhamento pelo número da versão.
Como o WAPI cresceu bastante (já temos 25 switches), a partir deste ponto estou considerando o WAPI concluído. Sua versão agora é a 1.00.
Daqui pra frente, todas as inclusões e/ou modificações acrescentarão um número ao release, e será acrescido algum comentário no arquivo de histórico de versão. Tal arquivo ainda não existe. Será criado a partir da próxima modificação que vier.
Para saber qual é a versão que está usando, basta executar o WAPI.EXE sem qualquer argumento. Lá aparecerá o número da versão, mes/ano e link para o download oficial. Não haverá um switch para ler o número da versão em arquivo.

Download já disponível: http://buzinello.com/download/wapi.zip

[]'s
Maligno
http://www.buzinello.com/prg
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Ok, pra mim esta ultima versão é a décima quarta versão. :)Pos
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Para a próxima atualização, já tenho pronto o bloqueio total ou parcial do teclado. E outras coisas mais. Já está pronto, funcionando em Windows 98 e NT/XP. Mas antes de liberar, tenho de fazer o WAPI se tornar residente.

[]'s
Maligno
http://www.buzinello.com/prg
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Buenas...
Tche, Maligno me tira uma duvida, em que e pq se bloquearia o teclado total ou parcial ?

Obs: sei que pra ECF é obrigatorio fazer isso.

Abraços
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Obs: sei que pra ECF é obrigatorio fazer isso.
Você próprio já deu um motivo. Mas há outros: às vezes o sujeito tem o péssimo hábito de apertar a WinKey pra acionar outra aplicação e acaba se perdendo pra voltar ao seu programa DOS. A solução é bloquear a WinKey. Às vezes (programas de caixa, por exemplo) ao usuário não se deveria permitir dar uma escapada do programa. Solução: bloquear todas as teclas especiais ou mesmo forçar o programa a rodar num desktop à parte (só XP), bloquear o desktop inteiro, etc. E por aí vai...

[]'s
Maligno
http://www.buzinello.com/prg
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Maligno, valeu pela explicação.......me diga uma ultima coisa...nesse bloqueio parcial vai ter como bloquear por ex: CTRL+ALT+DEL ou ALT+C .....????

Abraços e Boa Semana !!!
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

nesse bloqueio parcial vai ter como bloquear por ex: CTRL+ALT+DEL ou ALT+C .....????
Claro.

[]'s
Maligno
http://www.buzinello.com/prg
Responder