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

Re: WAPI - APLICATIVO para MS-DOS

Mensagem por Maligno »

Haveria possibilidade de colocar na fila de impressão do WINDOWS um arquivo ?. Talvez utilizando o SIMPLEX do BCC ++?.
SIMPLEX??? Não conheço. Que ser isso?
Mas é sempre possível colocar um arquivo qualquer na fila de impressão do Windows. Vou pesquisar.
Pois assim que trabalha o aplicativo USB apresentado pelo Heveraldo que é compilado com BCC++ e xHarbour em modo TEXTO, ele utiliza uma técnica que muito simples, de colocar o arquivo de impressão na fila de impressão do proprio WINDOWS.
Pra você me pedir uma coisa dessas, imagino que você tenha percebido o mesmo problema que eu percebo: o tamanho do EXE. Em XHarbour esse programa deve ter ficado bem maior que o WAPI. Nunca vi o programa, mas funciona bem, não?
Aí pensei... , o seu aplicativo WAPI, está ficando muito bom com todas estas implementações e ainda melhor se você pudesse disponibiliza-lo em uma OBJ ou LIB para ser usada dentro dos nosso aplicativos.

Isto é possível ou estou fantasiando ???
Possível não é. Pelo menos da forma tradicional, quando você inclui um objeto qualquer no seu script de encadeamento. Mas, por outro lado, é possível embutir o arquivo WAPI.EXE dentro do programa clipper, por meio de um objeto. Uma vez que o arquivo WAPI.EXE é bem pequeno, isso é fácil de fazer.
O esquema funciona assim: você converte o arquivo, através de uma técnica especial, em um conjunto de dados binários; cria um objeto com isso e, por meio de uma função especial, extrai o conteúdo original para um arquivo com o mesmo nome ou outro nome qualquer. Se você tiver funções que abstraiam esse trabalho, de rápido que é, dará a impressão de que é uma função Clipper autêntica.
Esse esquema eu tenho pronto e está funcional. Veja na minha página. Procure na tabela de cor salmão pelo título "Resources no Clipper". Vai precisar de um compilador Assembly. Tem lá também.

[]'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á

SIMPLEX

Mensagem por Pablo César »

Eu tinha visto algo na WEB sobre um método algoritmo:

http://www.mat.ua.pt/io/Documentos/Acet ... /frame.htm

O SIMPLEX refere-se a forma que é compilado no xHarbour fazendo omissão realizada no "hbapi.h", com SET HB_LEX=SIMPLEX. Mas de todas formas, eu não conheço a fundo este tema, ora porque refere-se ao xHarbour e não está aqui essa questão.

Desculpe MALIGNO pela minha dedução precipitada. Você tinha me explicado da função MULTIFLEX em ASSEMBLY e como ví a compilação do xHarbour com SIMPLEX, pensei que fosse alguma função que fazia parte do BCC++.
Maligno escreveu:Mas é sempre possível colocar um arquivo qualquer na fila de impressão do Windows. Vou pesquisar.
OBA ! Esperamos que você consiga, caro colega ! Boa sorte !

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

Re: SIMPLEX

Mensagem por Maligno »

Mais duas inclusões no aplicativo WAPI: reprodução de sons wave provenientes de arquivos wave ou de eventos do sistema, configurados pelo Painel de Controle (Sons). E por fim, a impressão de arquivos. Aliás, o enfileiramento do conteúdo de um arquivo no spooler de impressão do Windows. Não testei muito bem. Quase nem uso impressora e a minha não está lá essas coisas. Além do que, não é USB. Mas, acredito que a impressão funcionará perfeitamente em qualquer tipo de impressora, inclusive remota.
Mas é bom lembrar que, como é coisa nova, algumas alterações poderão ser feitas, como a inclusão de um argumento no MEIO dos demais, informando, por exemplo, uma certa quantidade de cópias a imprimir. Logo, a lista de argumentos poderá mudar.

E uma alteração: os argumentos de switches, quando houver mais de um, deverão ser separados por ponto-e-vírgula.

Código: Selecionar todos

A relação atualizada dos switches:
---------------------------------------------------------
    -REBOOT
    -POWEROFF
    -HIBERNATE
    -SUSPEND
    -FLASH:<times[;handle>]
    -PLAYSOUND:<source>
    -SETTASKBAR:<HIDE|SHOW>
    -GETAPPINFO:<filename>
    -SETAPPTITLE:<title>
    -SETBUTTONX:<ON|OFF|DEL>
    -PRINT:<printerName;inputFile;reportTitle;resultFile>
Os detalhes de cada switch podem ser obtidos do arquivo fonte. Detalhe: WAPI agora tem um arquivo de cabeçalho com algumas constantes que poderão ser utilizadas no Clipper. São mensagens de erros e os identificadores de sons fixos dos eventos do Windows.

Futuro:
No decorrer desta semana vou fazer o switch para obter a lista de impressoras instaladas no Windows e, atendendo o pedido de um amigo, um mecânismo para ler e escrever no Registry do Windows.
Vou também montar uma LIB para embutir o WAPI no Clipper, para que não seja necessário mais nada, além do programa Clipper.
Tudo isso, claro, quando o tempo permitir. :)

[]'s
Maligno
http://www.buzinello.com/prg
Editado pela última vez por Maligno em 11 Set 2006 06:47, em um total de 1 vez.
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 »

Agora são dois arquivos, mas o de demos ainda não contém uma demonstração do switch de impressão.

http://buzinello.com/download/wapi.zip
http://buzinello.com/download/wapi_demos.zip (contém os EXE prontos)

[]'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á

WAPI - APLICATIVO para MS-DOS

Mensagem por Pablo César »

LEGAL MALIGNO !!!!

Pooohhh fiquei muito contente, com mais essas implementações. Pena que ahora tenho que sair, mas irei testar logo que eu voltar (tou animadissimo !). Será que a questão de colocar som através do WAPI, irá funcionar em background ? E será que pode ser interrompido a reprodução do som em andamento ?. Porque se ele funcionasse em background iria ser possível rodar o nosso aplicativo sem ser afetado pelo som.

Mas a questão da impressão através do WAPI, abre sem dúvidas uma possibilidade de impressão nos programas feito em CLIPPER, em USB, LEXMARK, sinal de fumaça (como disse o nosso colega... hehe). Poooh estou muito contente e realmente muito agradecido MALIGNO, pela sua contribuição, você é um GENIO ! Legal, mesmo. Algum dia, terei o prazer de conhecé-lo pessoalmente, ja que moramos no mesmo estado.

Obrigado MALIGNO, mais uma vez, a nossa comunidade agradece com muito respeito e reconhecimento.

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

Re: WAPI - APLICATIVO para MS-DOS

Mensagem por Maligno »

Será que a questão de colocar som através do WAPI, irá funcionar em background ? E será que pode ser interrompido a reprodução do som em andamento ?.
A função de reprodução de som, sabe-se lá porque, só funciona no modo síncrono. É um mistério. Vou pesquisar mais um pouco depois. Acho que deve ter solução pra isso.

[]'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á

WAPI - APLICATIVO para MS-DOS

Mensagem por Pablo César »

Caro MALIGNO,

Gostei muito da nova opção PRINT, e funcina muito bem. Agora irei pra casa de uma amiga onde tem impressora USB em XP. Mas aparentemente, sem nenhum inconveniente. Inclusive testei da seguinte forma:

WAPI -PRINT:"Epson LX-810";CLIENTES.PRN;"Listagem de clientes";RESULTA.TXT

O 1º parametro "Epson LX-810", está conforme descrito no WIN.INI, ja no meu sistema eu leio este nome que foi dado pelo WINDOWS. Mas como você disse, irá impementar mais uma opção para que crie em arquivo os nomes das impressoras que estão cadastradas. Isso será também de grande ajuda.

WAPI -PRINT:LPT1;CLIENTES.PRN;"Listagem de clientes";RESULTA.TXT

Nesta opção também funcionou sem problemas.

Porém se ficar faltando algum parametro, não imprime (é claro). Mesmo que nao queira passar o 4º parametro (criação de arquivo de resultado de impressão).

Quanto a questão do switch PLAYSOUND, ele não está funcionando em background. Bom seria que funcionasse para que não ficasse o sistema travado (em espera de final de execução).

Testei também o switch FLASH e funciona também OK.

Por enquanto, a questão do switch SETAPPTITLE e do status da janela DOS, aguardo anciosamente.

Obrigado, mais uma vez MALIGNO.
:)Pos :{ -:]
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: WAPI - APLICATIVO para MS-DOS

Mensagem por Maligno »

Recapitulando:

Código: Selecionar todos

-FLASH:<times[;handle>]
-GETAPPINFO:<filename>
-GETDEFPRINTER:<fileName>
-GETHDINFO:<fileName>
-GETPRINTERS:<fileName>
-HIBERNATE
-MYHANDLE:<filename>
-PLAYSOUND:<source>
-POWEROFF
-PRINT:<printerName>;<inputFile>;<reportTitle>;<resultFile>
-REBOOT
-SETAPPTITLE:<title>
-SETBUTTONX:<ON|OFF|DEL>
-SETTASKBAR:<HIDE|SHOW>
-SUSPEND
Nem vou explicar muita coisa, pois os detalhes estão no fonte. Só quero observar alguns detalhes:

1) -PRINT agora imprime para a impressora "default". É só trocar o nome por #.

2) Pois agora também há um switch para descobrir qual é a impressora default: -GETDEFPRINTER. Também vou alterar -GETPRINTER para indicar na lista de impressoras, qual é a default. Mas fica pra semana que vem.

3) Quando não quiser gerar algum arquivo de resultado, basta informar NUL como o nome do arquivo, em qualquer switch. Não só no de impressão.

4) Adicionei -GETHDINFO. Talvez alguém se lembre que eu tenho um outro utilitário, chamado HDI, que fornece dados sobre o modêlo, número de série (de fábrica) e versão do HD instalado como o principal da máquina. Esse switch faz a mesma coisa, mas evita o uso de um outro utilitário só pra isso.

5) -SETAPPTITLE está de rosca. Pesquisei por toda a Net e nada de resolver isso. Mas se eu não resolver pelo WAPI diretamente, já sei como resolver pela LIB que vou fazer. De qualquer forma, sem solução não ficará.

6) -PLAYSOUND continua no modo síncrono. Mas eu troquei um switch de compilação e tornei o WAPI um programa GUI sem janela. Assim, sua instância morre quando terminar a música, liberando o programa DOS de imediato.

7) -MYHANDLE retorna o handle da janela da instância do WAPI. Eu fiz só pra teste, mas mantive no fonte.

8) Esqueci de dizer, e só depois que me dei conta que não é tão óbvio: o WAPI pode executar vários comandos na mesma linha de comando. Exemplo:

Código: Selecionar todos

wapi -FLASH:3 -PRINT:#;wapi.c;"WAPI source code";NUL -FLASH:3 -PLAYSOUND:dance.wav
Isso fará a janela do DOS piscar três vezes, imprimirá o fonte do WAPI na impressora default e sem criar um arquivo de resultado, piscará mais três vezes e, finalmente, tocará uma música.

---

O esquema de ler/gravar no registry do Windows ainda não ficou pronto, mas no decorrer desta semana eu faço, juntamente com uma biblioteca Clipper com funções de embutimento do WAPI e abastração de todos os comandos, para facilitar o uso.

Uma lembrança: o WAPI não está totalmente pronto. Assim, é bem possível que alguns switches sofram mudanças em parâmetros e/ou arquivos de resultados tenham suas estruturas modificadas. Portanto, pra botar em uso final, é melhor esperar que eu faça a LIB dele. Daí sim, nada será alterado de forma que exija uma reestruturação do seu programa. Com as funções de abstração, tudo ficará mais fácil ainda.

Outra coisa: esta semana foi bem tumultuada pra mim. Não tive muito tempo de testar tudo com o rigor que eu gostaria. Assim, bugs podem existir. Daí é só dizer. :)

Os links:
http://buzinello.com/download/wapi.zip
http://buzinello.com/download/wapi_demos.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á

WAPI - APLICATIVO para MS-DOS

Mensagem por Pablo César »

Caro colega MALIGNO,

Vão ser muito úteis essas implementações novas no WAPI.
Testei o WAPI com os swtiches e veja meus comentários:

-GETDEFPRINTER, funciona OK. Mas sugiro que este resultado seja incluso no switch GETPRINTERS, apenas mostrando com um asterisco na frente do nome da impressora indicando que essa é a "Padrão" para não ter que utilizar dois switches para ver as impressoras.
-GETHDINFO, que bom esta opção também, pois eu não tinha se me ocorrido, mas é muito importante, para ser utilizado para proteção de uso do software. Se bem que você mencionou de fazer uma outra opção de gravar no REGISTRO do WINDOWS e que em conjunto a esta nova opção poderia ser útil na instalação dos sistema feito em Clipper. Você teria alguma sugestão para este caso de REGISTRO no WINDOWS o quê poderia ser gravado ?.

Os switches GETHDINFO e MYHANDLE e me deram como resultado no arquivo apenas o valor: -53, é dizer não funcionou com o meu WIN98 (também não sei dizer se é por causa disto).

Você faz referência ao ler os arquivo WAPI.h para tratar dos resultados, mas onde estariam disponíveis para download os arquivos de diretrizes que é mencionado no seu arquivo WAPI.C ?

O switch PLAYSOUND, está melhor que antes porque ele carrega na memória o conteúdo a ser tocado e libera em poucos segundos ao menos.

Sobre a questão da tela do DOS em modo "JANELADO" ou "INTEIRA", também seria uma questão a ser resolvida.

Realmente toda esta contribuição dada por você será lembrada por todos que programam em linguagem DOS e que não possuem esses recursos.

É incrível ver que muitos dos nossos colegas que fizeram tantas declarações sobre seus conhecimentos, nenhum deles tenha tido a capacidade de elaborar (vamos dizer: uma futura LIB) que desmistifique muitas das limitações em que o Clipper se encontra. Eu sou grato MALIGNO e acho que TODOS nós devemos reconhecer seu conhecimento técnico, sua dedicação e seu companheirismo conosco. Obrigado, mais uma vez.

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

Re: WAPI - APLICATIVO para MS-DOS

Mensagem por Maligno »

-GETDEFPRINTER, funciona OK. Mas sugiro que este resultado seja incluso no switch GETPRINTERS, apenas mostrando com um asterisco na frente do nome da impressora indicando que essa é a "Padrão" para não ter que utilizar dois switches para ver as impressoras.
No meu post anterior comentei que era exatamente isso o que iria fazer. :)
-GETHDINFO, que bom esta opção também, pois eu não tinha se me ocorrido, mas é muito importante, para ser utilizado para proteção de uso do software. Se bem que você mencionou de fazer uma outra opção de gravar no REGISTRO do WINDOWS e que em conjunto a esta nova opção poderia ser útil na instalação dos sistema feito em Clipper. Você teria alguma sugestão para este caso de REGISTRO no WINDOWS o quê poderia ser gravado ?.
Uma infinidade de coisas. Vamos fazer assim. Deixa eu terminar o acesso ao Registry. Depois você abre um novo tópico apenas sobre essa questão. Assim, não estaríamos discutindo agora sobre aquilo que ainda é vaporware. :)
Os switches GETHDINFO e MYHANDLE e me deram como resultado no arquivo apenas o valor: -53, é dizer não funcionou com o meu WIN98 (também não sei dizer se é por causa disto).
Pra usar o -GETHDINFO você precisa de três coisas: HD que tenha SMART, BIOS com SMART habilitado e driver no SO para recuperar informações do HD. Para esse último caso, e no win98, há um driver: SMARTVSD.VxD, que deve(ria) residir no diretório \WINDOWS\IOSUBSYS. Eu estive testando esse recurso, mas usando uma VM win98 pelo VMWare. Não funcionou, mas também não corri muito atrás, por falta de tempo. No XP funciona muito bem, desde que os dois primeiros requisitos sejam satisfeitos, claro.
Você faz referência ao ler os arquivo WAPI.h para tratar dos resultados, mas onde estariam disponíveis para download os arquivos de diretrizes que é mencionado no seu arquivo WAPI.C ?
Você não me entendeu. Eu disse que você pode incluir no seu programa Clipper o arquivo WAPI.H, pois este possui as constantes que o programa usa. Esse arquivo evitará que você tenha que manipular números diretamente. É isso.
Sobre a questão da tela do DOS em modo "JANELADO" ou "INTEIRA", também seria uma questão a ser resolvida.
Ainda não pude ver nada relacionado a isso. Mas não esqueci. :)

[]'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á

WAPI.H

Mensagem por Pablo César »

OK, Maligno. Desculpe a minha ansiedade, pareceria que estou te cobrando como se eu tivesse direito.

Porém a inclusão do WAPI.H, desculpe mas não entendí ainda. Como eu poderia fazer um include se não possuo o WAPI.H para ver os resultados dos códigos. Veja que esse arquivo não está incluso no ZIP que você disponibiliza pra nós. Poderia me explicar melhor, por favor ?.

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

Re: WAPI.H

Mensagem por Maligno »

Opa! Me desculpe. Falha minha. Eu esqueci de incluir os arquivos H. Já corrigi e subi o pacote de novo. :)

[]'s
Maligno
http://www.buzinello.com/prg
MARINI
Usuário Nível 3
Usuário Nível 3
Mensagens: 288
Registrado em: 06 Jul 2004 08:06
Localização: Pindamonhangaba SP

Re: WAPI - APLICATIVO para MS-DOS

Mensagem por MARINI »

Maligno escreveu: 2) Pois agora também há um switch para descobrir qual é a impressora default: -GETDEFPRINTER. Também vou alterar -GETPRINTER para indicar na lista de impressoras, qual é a default. Mas fica pra semana que vem.
Beleza Maligno pela sua colaboração.
Estava estudando isto e reparei que se:

wapi -GETAPPINFO:TESTE.TXT

cria o arquivo TESTE.TXT com as informações, mas

wapi -GETPRINTERS:TESTE.TXT e
wapi -GETDEFPRINTER:TESTE.TXT não cria nada.

Sabe me dizer o motivo?
Sds
Marini
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á

WAPI - APLICATIVO para MS-DOS

Mensagem por Pablo César »

MARINI escreveu:wapi -GETPRINTERS:TESTE.TXT e
wapi -GETDEFPRINTER:TESTE.TXT não cria nada. Sabe me dizer o motivo?
Qual é a sua versão do WINDOWS ?. No meu WIN98, essas duas switches, funcionou perfeitamente.

Mas de todos modos, vale a pena esperar o colega MALIGNO finalizar esta questão porque ele tem intenções de unificá-las num só switch.

Viu, MARINI que legal ?. Até que enfim alguem se manifestou !!!.
Parece que muitos estão preocupados em querer se sobre-sair dos outros com aquele tópico que só ficam desmerecendo o nosso CLIPPER.

E a criação do WAPI sem dúvidas é uma das melhores CONTRIBUIÇÕES ao CLIPPER que surgiu neste FORUM. Como gostaria que os outros colegas que dissem que sabem outras linguagens, possam algum dia ajudar ao pobre CLIPPER.

Um CLIP-ABRAÇO
:)Pos
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á

Re: WAPI.H

Mensagem por Pablo César »

Maligno escreveu:Opa! Me desculpe. Falha minha. Eu esqueci de incluir os arquivos H. Já corrigi e subi o pacote de novo.
OK, MALIGNO, não dá para ficar bravo contigo... Mais agora, ja pensou se você fica bravo, hehe (uma brincadeirinha, tá ?). Mas voltando ao assunto por exemplo do switch PLAYSOUND, está dando erro com a seguinte sintaxe:

WAPI -SOUNDPLAY:1

Teoricamente, era para tocar o primeiro evento do meu WIN98 (inclusive está definido esse evento). E está dando o seguinte erro, seja com 1,2,3, etc...:
WAPI causou uma falha de página inválida no
módulo WINMM.DLL em 0197:bfdf8a4b.
E inclusive toca sempre o mesmo som do evento de iniciar o Windows.

Será que o meu WINDOWS está dando pau ?. Alguem mais poderia testar pra nós ?

Um clip-abraço :(
Responder