Clipper On Line • Ver Tópico - WAPI v1.05 - Funções da API do Windows

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

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

Moderador: Moderadores

 

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

Mensagempor Maligno » 09 Ago 2006 03:53

Nem preciso dizer muito. É só ler o fonte:
http://buzinello.com/download/wapi.zip.

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

-----------------------------------
Nota de Moderação:
tópico movido da seção Clipper, pois seu conteúdo não se relaciona com aquela seção.
Editado pela última vez por Maligno em 27 Abr 2008 12:58, no total de 4 vez
Avatar de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6432
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 12 vezes

Aplicativos para Windows

Mensagempor Pablo César » 09 Ago 2006 22:35

Legal essas funções Paulo,

-REBOOT -> reinicializa o Windows
-POWEROFF -> desliga o Windows
-HIBERNATE -> coloca o Windows em estado de hibernação
-SUSPEND -> suspende o Windows
-FLASH -> faz o botão da taskbar piscar
-TASKBAR:<ON|OFF> -> torna invisível/visível o botão na taskbar
-TITLEBAR:<TEXTO> -> muda o texto na barra de título da janela
-BUTTONX:<ON|OFF|DEL> -> liga/desliga (ON|OFF) o botão X da janela ou (DEL) remove o ítem do menu de contexto da janela (neste caso, não será possível recolocar o ítem no menu)

Mas agora tenho uma sugestão. Acho que eu já fiz o seguinte questionamento:

Teria como ampliar o seu código fonte para verificar, se já existe uma janela (digamos com o mesmo TITLEBAR) e se for positivo, criar um arquivo (digamos: RODANDO.TXT) ?. Daí então, poderiamos rodar dentro do aplicativo Clipper para saber se ja não está rodando (minimizado), isto é, em multi-sessão.

Seria bom conseguir isto, claro que a sua presteza, sabendo que estaria sujeito a margem de erro. Mas a principio funcionaria. Me dê a sua opinião Sr. Paulo.

E obrigado pela sua participação aqui no FORUM.

sds :{
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5539
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 150 vezes

Mensagempor rrfsistemas » 10 Ago 2006 02:26

Não sei se vai ajudar muito mas, eu faço da seguinte forma no meu sistema em Visual Fox Pro, com a API do Windows. ;)

Não sei como vc vai adaptar este códogo...
Public _SISTEMA
_SISTEMA = "  SIADEM - Empresa v1.02 Demo"
Declare Integer FindWindow In WIN32API String, String
Declare Integer BringWindowToTop In WIN32API Integer
Declare Integer IsWindow In WIN32API Integer
janela = FindWindow(0, _SISTEMA)
If (IsWindow(janela)<>0)  && verifica se existe uma janela com o nome
   = BringWindowToTop(janela) && coloca a janela em cima de todas
   _Screen.Caption = _SISTEMA   
   = Messagebox('SISTEMA JÁ ESTÁ EM USO NESTA MÁQUINA !!!', 000, 'Atenção')
   Return
Endif
Release janela
Clear Dlls
CLEAR
Clear All
_SISTEMA = "  SIADEM - Empresa v1.02 Demo"
_Screen.WindowState = 2
lcOnShutdown="ShutDown()"
On Shutdown &lcOnShutdown
On Error ErrorHandler(Error(),Program(),Lineno())


Espero que ajude !! :xau
"Não é a ferramenta que faz o artesão e sim a sua criatividade...""
Renato Ribeiro Ferreira
Tecnologia em Analise de Sistemas de Informação
http://www.rrfsistemas.hd1.com.br
( VFP 9 + MySql e/ou Oracle 11 ) - ...Harbour/MiniGui...
Avatar de usuário

rrfsistemas
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 246
Data de registro: 11 Jul 2004 18:16
Cidade/Estado: Uberlândia/MG
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Mensagempor Maligno » 10 Ago 2006 04:54

rrfsistemas escreveu:Não sei se vai ajudar muito mas, eu faço da seguinte forma no meu sistema em Visual Fox Pro, com a API do Windows. ;)

Não sei como vc vai adaptar este códogo...
Public _SISTEMA
_SISTEMA = "  SIADEM - Empresa v1.02 Demo"
Declare Integer FindWindow In WIN32API String, String
Declare Integer BringWindowToTop In WIN32API Integer
Declare Integer IsWindow In WIN32API Integer
janela = FindWindow(0, _SISTEMA)
If (IsWindow(janela)<>0)  && verifica se existe uma janela com o nome
   = BringWindowToTop(janela) && coloca a janela em cima de todas
   _Screen.Caption = _SISTEMA   
   = Messagebox('SISTEMA JÁ ESTÁ EM USO NESTA MÁQUINA !!!', 000, 'Atenção')
   Return
Endif
Release janela
Clear Dlls
CLEAR
Clear All
_SISTEMA = "  SIADEM - Empresa v1.02 Demo"
_Screen.WindowState = 2
lcOnShutdown="ShutDown()"
On Shutdown &lcOnShutdown
On Error ErrorHandler(Error(),Program(),Lineno())


Bom, é a idéia que o colega teve. Mas não é a forma "canônica" para evitar múltiplas instâncias do mesmo programa, até porque, a barra de títulos, para muitos programas, é um meio dinâmico de informação ao usuário. Assim, em alguns casos o título pode mudar totalmente. Para uma solução mais segura, o que normalmente se utiliza é um objeto de sincronização de tarefas (semáforos de threads) chamado Mutex. O princípio é simples: uma vez que apenas uma tarefa pode ter a propriedade de um Mutex, podemos forçar para só exista uma instância de um mesmo programa rodando ao mesmo tempo. Veja o exemplo e, se achar interessante, adapte às suas necessidades.

}
HANDLE hMutex = CreateMutex(NULL,true,"RFFSISTEMAS_PROJ001");
if (GetLastError() == ERROR_ALREADY_EXISTS) {
   //
   // Mensagem de alerta ou o que quiser
   //
   if(hMutex) CloseHandle(hMutex);
   return 0;
}

//
//
// Neste ponto você dá continuidade ao seu programa
// Mas note que o Mutex continua ativo no sistema.
//
//

ReleaseMutex(hMutex);
CloseHandle(hMutex);
{

Vou verificar como o Mutex poderia ser utilizado no WAPI. Volto ao assunto depois. :)

[]'s
Maligno
http://www.buzinello.com/prg
Avatar de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6432
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 12 vezes

Verificar se está aberta a janela WINDOWS

Mensagempor Pablo César » 30 Ago 2006 21:12

Maligno escreveu:Bom, é a idéia que o colega teve. Mas não é a forma "canônica" para evitar múltiplas instâncias do mesmo programa, até porque, a barra de títulos, para muitos programas, é um meio dinâmico de informação ao usuário. Assim, em alguns casos o título pode mudar totalmente.


Prezado colega Maligno,

Nesse caso também há outra solução. Já viu o WINTIT ?. Antes de executar meu aplicativo (através de arquivo de lote, BACTH) eu chamo o WINTIT para forçar que essa aplicação fique com o mesmo título na janela-WINDOWS.

Você ja conseguiu algo sobre essa minha idéia ?. Contamos com teu conhecimento em C, não esqueça por favor !.

Um clip-abraço
:xau :)Pos
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5539
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 150 vezes

Re: Verificar se está aberta a janela WINDOWS

Mensagempor Maligno » 01 Set 2006 02:55

Nesse caso também há outra solução. Já viu o WINTIT ?. Antes de executar meu aplicativo (através de arquivo de lote, BACTH) eu chamo o WINTIT para forçar que essa aplicação fique com o mesmo título na janela-WINDOWS.

Nunca ouvi falar.

Você ja conseguiu algo sobre essa minha idéia ?. Contamos com teu conhecimento em C, não esqueça por favor.

O problema não está no esquecimento (de fato, não esqueci). O problema está no tempo. :(
Mas, quanto a sua idéia, acho que tenho outra melhor. Uma lista de todas as janelas abertas. Você passa o nome de um arquivo e o programa lista nele os nomes das janelas abertas. Você procuraria pelo nome da sua aplicação e, existindo, você tem a opção de travar o programa, evitando uma segunda instância. E também ficaria fácil saber se um determinado programa está em execução (o Word, por exemplo). Seria uma opção a mais para a mesma função.
Aliás, um amigo que programa em Clipper também de me pediu para acrescentar uma outra função. Mas isso tudo só no final de semana. :)

[]'s
Maligno
http://www.buzinello.com/prg
Avatar de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6432
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 12 vezes

Desafios CLIPPER x WINDOWS

Mensagempor Pablo César » 01 Set 2006 09:14

Prezado colega Maligno,

Agradeço seu interesse, e desculpe minha apelação.

O nome WINTIT, na verdade não era a função da LIB que modifica o título da janela em WINDOWS. WINTIT, é o nome da função que eu dei para chamar desde a linha de comando a função OL_95VMTITLE(VTIT). (desculpe, falha minha). Minha ãplicativo é simples:

WINTIT.PRG:
// Compilar com as LIBs: OSLIB e CPMI

PARAMETERS VTXT
VOK:=OL_95VMTITLE(VTXT)


Neste caso forço o nome toda vez que for chamado o meu sistema, chamando antes (dentro de uma BATCH) o WINTIT.EXE, forçando o título da aplicação, mantendo o nome que eu designei a minha aplicação, mesmo que o usuário tenha mudado nas propriedades do ícone.
Inclusive eu testei em todos as versões do WINDOWS, e me parece que funciona perfeitamente.

Quanto a sua outra idéia de listar os nomes das janelas abertas. Me permita fazer uma sugestão. Que essa listagem pode criar um arquivo texto, com o qual poderá ser lido e processar dentro da propria aplicação se está ativa o não. Mas de todas as formas Maligno, acho muito importante a sua contribuição a nossa comunidade. E já que estamos neste assunto, gostaria de solicitar mais uma idéia (que ja é bem conhecida de todos) para que você possa acrescer na sua biblioteca se for possível.

A outra função, que deixa a todos nós impossibilitados de manipular no Clipper é quando o usuário pressina ALT ENTER, mudando com isto a exibição de modo TEXTO ao modo JANELADO. Sei que tem duas indicações de utilizar as funções:

1. Usando CA-Tools as seguintes funções :

SetScrMode(6)
SetScrMode(3)

2. Outra opção usando a função FULLSCREEN() do colega Evolver:

www.sistemabr.com.br/clipper/fullscrn.zip

Mas, nestas opções não dá para alternar o modo de exibição de TEXTO para JANELADO e de JANELADO outra vez a sua forma original em TEXTO. Para isto, acho que se você pudesse ver se a execução atual está em modo TEXTO ou JANELADO, que grave em um arquivo dizendo qual é o modo. Daí então, no nosso proprio sistema, dariamos uma mensagem ao usuário para mudar o modo de exibição, indicando ao usuário que deve pressionar as telcas ALT ENTER. Estou insistindo muito com este assunto, porque tenho situações que preciso utilizar programas GUI que em DOS não posso fazer. E não quero que após executar um programa GUI, a minha tela anterior (em DOS), fique minimizada e com isto o usuário fique perdido.

Sei Maligno, que estou pedindo muito. Não quero lhe ofender, mas se você acha que para você desenvolver isso, deveria ser ressarcido. Eu estou disposto (sempre e quando não seja um milhão de $$$, hehehe). Desculpe a minha brincadeira, sei muito bem que a sua participação e contribuição aqui no FORUM sempre foi de forma construtiva e gratuita. O que engrandece a todos nós e ficamos muito agradecidos com a sua dedicação. Pooohh, parace que estou puxando saco, mas acho que deve ser falado. Pois é falado tantas besteiras as vezes e que coisas importantes devem ser ditas.

Bem vou deixar por aqui... senão o Maligno, daqui a pouco se cansa de mim... e não deixo trabalar nesse fim de semana. Boa sorte Maligno.

Um clip-abraço
:)Pos :* :{ -:]
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5539
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 150 vezes

Mensagempor Maligno » 03 Set 2006 20:56

Dando continuidade ao utilitário, fiz algumas alterações e uma inclusão de importância. As alterações: alguns nomes de switches foram trocados só pra melhorar a compreensão da finalidade destes (se já usou antes, verifique e altere seu código). O switch -FLASH recebeu um parâmetro para informar que quantidade de vezes se deve piscar. A inclusão: o switch -GETAPPINFO que é utilizado para criar um arquivo (nome no parâmetro) com uma lista de todas as janelas top-level dos programas em execução no Windows, semelhante a do Task Manager. O arquivo conterá handle e título (separados por vírgula) de cada janela (uma por linha, CR/LF no final, claro).
O fonte contém todos os detalhes necessários.

No ZIP eu incluí um programa de teste, que mostra como evitar que um mesmo programa seja executado duas vezes. O fonte é bem explicativo. Funciona no XP. Não pude testar em outro SO. Assim, agradeceria se alguém o testasse e desse um retorno.

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

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


PS: No decorrer desta semana, novas inclusões/alterações serão feitas.
Avatar de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6432
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 12 vezes

WAPI - APLICATIVO para MS-DOS

Mensagempor Pablo César » 05 Set 2006 10:37

Estimado colega Maligno,

Gostei muito da sua solução apresentada com o seu aplicativo WAPI.
E conforme você nos deu oportunidade a fazer comentários, eu gostaria de fazer alguma sugestões e comentários:

1.) O funcionamento do switch GETAPPINFO, está perfeito !. Muito bom !. E parabéns, Maligno !!!!.

2.) O funcionamento do switch SETAPPTITLE, não fica gravado no ícone da janela ativa. Funciona em momento da execução do WAPI, mas quando o WAPI é finalizado, o título original da janela, retorna. Faltaria que ele mudasse também no próprio ícone, onde acessamos pela "Propriedades" do mesmo. Dessa forma, forçariamos a que esse ícone, mantenha sempre o título ao qual o programador designou.

3.) Sobre o parametro "TIME" adicional do switch FLASH. Fiquei pensando em qual seria a sua utilidade. Pensei em algo que seria muito útil, mas requer mais uma implementação neste switch (outro parâmetro).
Agora, todos nós poderemos verificar se a janela com título XXX, está aberta ou não. Isto impedirá que o nosso aplicativo seja aberto multipla vezes. No meu sistema ja implementei e funciona perfeitamente, embora eu ainda use o OL_95VMTITLE("Título novo") da OSLIB. Mas eu gostaria ainda de avisar que com a janela piscando (aquela primeira que tinha sido aberta) e exibindo em tela, que outra janela está aberta. Claro que se fosse possível fazer piscar a janela com título XXX, digamos. Através de um parâmetro adicional. O parâmetro TÍTULO da janela. Assim como é feito no switch GETAPPINFO, que selecione a primeira janela com título indicado para pisque, chamando atenção do usuário.

4.) O switch SETTASKBAR, não funciona com o parâmetro "ON" ou "OFF". E sim funciona com "SHOW" e "HIDE". Nesta forma, a janela desaparece (como é mencionado no seu arquivo fonte .C). Nesse momento, a janela é abortada e cria uma tarefa chamada "WINOLDAP" com WIN98. Me pergunto: Para quê serviria esta opção ?. Também testei da seguinte maneira:

WAPI -SETTASKBAR:HIDE | WAPI -SETTASKBAR:SHOW

E desta forma, sim funciona. Só que a execução é momentânea.

5.) O switch SETBUTTONX:(ON ou OFF ou DEL), funciona bem. Acho que serviria para o cliente não fechar através do "X".

Mas estou muito contente e muito agradecido ao colega MALIGNO. Acho que todos nós estamos em dívida por compartilhar seus conhecimentos conosco, enriquecendo cada vez mais os recursos que podemos obter com o Clipper e aplicativos feitos na "linguagem C".

OBRIGADO MALIGNO ! :)Pos :{ :))
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5539
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 150 vezes

Re: WAPI - APLICATIVO para MS-DOS

Mensagempor Maligno » 06 Set 2006 07:11

2.) O funcionamento do switch SETAPPTITLE, não fica gravado no ícone da janela ativa. Funciona em momento da execução do WAPI, mas quando o WAPI é finalizado, o título original da janela, retorna. Faltaria que ele mudasse também no próprio ícone, onde acessamos pela "Propriedades" do mesmo. Dessa forma, forçariamos a que esse ícone, mantenha sempre o título ao qual o programador designou.

Mas o WAPI é transiente. Ao finalizar, volta o título antigo. Se você executá-lo através do seu programa, o título permanecerá até que o seu programa termine. Não ocorre isso?

3.) Sobre o parametro "TIME" adicional do switch FLASH. Fiquei pensando em qual seria a sua utilidade. Pensei em algo que seria muito útil, mas requer mais uma implementação neste switch (outro parâmetro).

Entendeu agora porque GETAPPINFO inclui no arquivo o Handle das janelas? É através desse número que será possível (futuramente) interagir com outras janelas. Exemplo: estando o WordPad ativo e seu Handle sendo 123, você poderia fazer sua janela picar 10 vezes com o comando WAPI FLASH:10,123. Claro que isso também poderia ser feito para alertar o usuário que uma outra instância do seu programa já existe.

Agora, todos nós poderemos verificar se a janela com título XXX, está aberta ou não. Isto impedirá que o nosso aplicativo seja aberto multipla vezes. No meu sistema ja implementei e funciona perfeitamente, embora eu ainda use o OL_95VMTITLE("Título novo") da OSLIB.

Note que OL_95VMTitle() e OL_95AppTitle() não funcionam em kernel NT. Só Windows 98 pra baixo.

4.) O switch SETTASKBAR, não funciona com o parâmetro "ON" ou "OFF". E sim funciona com "SHOW" e "HIDE". Nesta forma, a janela desaparece (como é mencionado no seu arquivo fonte .C).

Pois é. Errei na documentação. Desculpe. Já consertei no fonte. O correto é SHOW/HIDE mesmo.

Nesse momento, a janela é abortada e cria uma tarefa chamada "WINOLDAP" com WIN98. Me pergunto: Para quê serviria esta opção ?. Também testei da seguinte maneira:
WAPI -SETTASKBAR:HIDE | WAPI -SETTASKBAR:SHOW

E desta forma, sim funciona. Só que a execução é momentânea.

Não tenho nenhum Windows 98 pra testar. Uso XP. Desconheço totalmente essa "WINOLDAP". Vou ver se consigo algum Windos 98 pra fazer o teste. Depois volto ao assunto.
Detalhe: no XP o efeito não é momentâneo. Uma vez que tenha tornado a janela DOS invisível, usando o WAPI diretamente na linha de comando, como teste, a janela não volta mais. Aí só "matando" a janela pelo Ctrl+Alt+Del. Se ela ficar invisível por meio do seu programa, ela desaparecerá por completo, não aparecendo nem mesmo na janela do "Task Manager". Assim, só o seu programa a tornará visível novamente, usando o SHOW. Um exemplo:

SwpRunCmd("WAPI -SetTaskBar:HIDE,0,".",".")
Millisec(5000)
SwpRunCmd("WAPI -SetTaskBar:SHOE,0,".",".")

Esse código de teste fará a janela do DOS sumir por 5 segundos. Depois volta ao normal.

5.) O switch SETBUTTONX:(ON ou OFF ou DEL), funciona bem. Acho que serviria para o cliente não fechar através do "X".

Exatamente. Mas lembre-se: ao usar o DEL, o comando de fechamento é excluído. A janela então, só será eliminada após o término do seu programa ou se o usuário apelar para Ctrl+Alt+Del.

Mas estou muito contente e muito agradecido ao colega MALIGNO. Acho que todos nós estamos em dívida por compartilhar seus conhecimentos conosco, enriquecendo cada vez mais os recursos que podemos obter com o Clipper e aplicativos feitos na "linguagem C".

É um prazer ajudar.

[]'s
Maligno
http://www.buzinello.com/prg
Avatar de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6432
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 12 vezes

WAPI - APLICATIVO para MS-DOS

Mensagempor Pablo César » 06 Set 2006 09:52

Citação: escreveu:Mas o WAPI é transiente. Ao finalizar, volta o título antigo. Se você executá-lo através do seu programa, o título permanecerá até que o seu programa termine. Não ocorre isso?


Não, não ocorre isso MALIGNO (pelo menos com WIN98).

Citação: escreveu:você poderia fazer sua janela picar 10 vezes com o comando WAPI FLASH:10,123. Claro que isso também poderia ser feito para alertar o usuário que uma outra instância do seu programa já existe.


Na função FlashTitleBar do seu código fonte está: HWND WHandle = GetForegroundWindow(). Estarias colocando mais um parâmetro ?.

Citação: escreveu:Note que OL_95VMTitle() e OL_95AppTitle() não funcionam em kernel NT. Só Windows 98 pra baixo.


Tens razão MALIGNO, testei no XP e o OL_95AppTitle() não funciona. Mas... estive comparando os OS e o que poderia ser feito. Como eu fisse: a modificação do título poderia ser feita no arquivo .PIF (do ícone do WIN98), porque o título dessa janela está escrito nesse arquivo .PIF (que poderia ser editado e gravado em baixo nível. Porém no caso do XP (não sei os outros), esse título está conforme o nome do arquivo .LNK (ícone do XP). Que renomeando esse arquivo .LNK você obterá o nome da janela para qual tenha sido mudado. Normalmente no WIN98 os ícones estão no \WINDOWS\DESKTOP e no XP normalmente estão no \DOCUME~1\XP\DESKTOP ou \documents and Settings\XP\Desktop.

Nesse caso, será que não poderias fazer algo para mudar no seu ícone também ?.

Citação: escreveu:Desconheço totalmente essa "WINOLDAP". Vou ver se consigo algum Windos 98 pra fazer o teste.


Esse "WINOLDAP" é uma parte do arquivo "winoa386.mod" (\WINDOWS\SYSTEM), que é para rodar componentes "Não-Windows" para modo 386. Segundo o que entendí ao pesquisa na WEB, veja:

http://www.xmission.com/~comphope/jargon/w/winoldap.htm

Mas eu acho que esta tarefa que fica e é adicional conforme a escução dessa opção do WAPI. Deveria ser eliminado, pois há relatos na WEB que diz trazer alguns inconvenientes na execução de outros sisemas (como deixar lento pela acumulação desses WINOLDAP e que também são considerado facilitadores para alocação de trojans, não sei se é veridico tudo isso). De todas formas, para quê poderia servir esta opção ??.

Gostaria que não esquecesse do meu outro pedido que poderia fazer parte deste seu utilitário WAPI, onde descrevo:

2. Outra opção usando a função FULLSCREEN() do colega Evolver:
www.sistemabr.com.br/clipper/fullscrn.zip que pudesse criar um arquivo indicando o tipo de exbição da janela.


Obrigado, mais uma vez MALIGNO pela sua atenção. Cabe dizer que a sua participação aqui no FORUM, sim é BEM VINDA, como assim a de todos que participam sem o fim de interesse somente pessoal. A linguagem que eu acho THE BEST, sem dúvidas é a LINGUAGEM C. É com ela que o Clipper (e todas as outras também), podem executar coisas imagináveis. Como eu gostaria poder aprender e dominar essa liguagem ! Você tem seus méritos e isso ninguem tira e eu agradeço humildemente sua colaboração.

Um clip-abraço
:)Pos :{
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5539
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 150 vezes

Re: WAPI - APLICATIVO para MS-DOS

Mensagempor Maligno » 06 Set 2006 11:41

Não, não ocorre isso MALIGNO (pelo menos com WIN98).

Então vou ter que pesquisar depois como fazer esse título vingar. :(

Na função FlashTitleBar do seu código fonte está: HWND WHandle = GetForegroundWindow(). Estarias colocando mais um parâmetro ?.

É uma finalidade do Handle. :)

Como eu fisse: a modificação do título poderia ser feita no arquivo .PIF (do ícone do WIN98), porque o título dessa janela está escrito nesse arquivo .PIF (que poderia ser editado e gravado em baixo nível. Porém no caso do XP (não sei os outros), esse título está conforme o nome do arquivo .LNK (ícone do XP). Que renomeando esse arquivo .LNK você obterá o nome da janela para qual tenha sido mudado. Normalmente no WIN98 os ícones estão no \WINDOWS\DESKTOP e no XP normalmente estão no \DOCUME~1\XP\DESKTOP ou \documents and Settings\XP\Desktop.

Em suma: no XP funciona. No Windos 98 (pra baixo?) não funciona. Vou ter que pesquisar e arrumar outra estratégia. O estranho é que o MSDN diz que funciona. :(

Nesse caso, será que não poderias fazer algo para mudar no seu ícone também ?.

Aquela "Propriedades" que aparece no menu do ícone se refere às propriedades do atalho da janela. Não acho boa idéia mudar no arquivo. Mas tudo bem. Só preciso botar a mão num Windows 98 pra ver o que acontece. Mas acho que já tenho uma alternativa.

Mas eu acho que esta tarefa que fica e é adicional conforme a escução dessa opção do WAPI. Deveria ser eliminado, pois há relatos na WEB que diz trazer alguns inconvenientes na execução de outros sisemas (como deixar lento pela acumulação desses WINOLDAP e que também são considerado facilitadores para alocação de trojans, não sei se é veridico tudo isso). De todas formas, para quê poderia servir esta opção ??.

Não sei. Eu nunca nem ouvi falar. Só comecei a aprender a API do Windows agora, quando já estava no XP.

2. Outra opção usando a função FULLSCREEN() do colega Evolver:
www.sistemabr.com.br/clipper/fullscrn.zip que pudesse criar um arquivo indicando o tipo de exbição da janela.

Vou ver se é possível ler o status da janela DOS. Se fosse outro tipo de aplicação tudo bem.

A linguagem que eu acho THE BEST, sem dúvidas é a LINGUAGEM C. É com ela que o Clipper (e todas as outras também), podem executar coisas imagináveis. Como eu gostaria poder aprender e dominar essa liguagem !

É só querer. Literatura grátis tem aos montes. Compiladores tem aos quilos. Fontes de pesquisa às toneladas. Só depende de você. Trace seu objetivo e dedique-se a ele. Mesmo que seja apenas uma pequena parte do seu tempo. Se você se dedicar de verdade, um bom resultado será apenas conseqüência.

[]'s
Maligno
http://www.buzinello.com/prg
Avatar de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6432
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 12 vezes

WAPI - APLICATIVO para MS-DOS

Mensagempor Pablo César » 06 Set 2006 12:33

Caro MALIGNO,

Acho que as vezes o meu português, não é aquelas coisas... hehe
Deixa eu esclarecer mais a minhas colocações após a sua última mensagem:

Quando Pablo escreveu:Na função FlashTitleBar do seu código fonte está: HWND WHandle = GetForegroundWindow(). Estarias colocando mais um parâmetro ?.


Eu quis dizer quer você vai ter que colocar um terceiro parâmetro na sua função FlashTitleBar() para que aceite o Handle da janela que quer ser piscada.

Quando Maligno escreveu:Em suma: no XP funciona. No Windos 98 (pra baixo?) não funciona. Vou ter que pesquisar e arrumar outra estratégia. O estranho é que o MSDN diz que funciona.


Na verdade você entendeu errado. Eu disse que:
Tens razão MALIGNO, testei no XP e o OL_95AppTitle() não funciona.. Você tinha razão, as funções do OSLIB não funcionam em kernel NT, embora para Windows 98 pra baixo, SIM.

Por esta razão eu sugerí para ti:
Que na sua aplicação WAPI, fizesse averificação do OS que estaria sendo usado para poder alterar nas "Propriedades do Ícone". Claro que isto difere para cada versão. Daí então eu esclarecí para cada situação de versão do OS poderia ser feito:

1.) No Windows 98 e pra baixo:

Modificação do título poderia ser feita no arquivo .PIF, que "normalmente" estaria na pasta "\WINDOWS\DESKTOP". Escrevendo dentro do arquivo .PIF. Lá dentro está gravado o título da janela.

2.) No Windows XP:
Porém o título está definido de acordo o proprio nome do arquivo .LNK (ícone do XP). Que renomeando esse arquivo .LNK, passa a mudar o título da janela. Normalmente esses arquivos de ícones estão no \DOCUME~1\XP\DESKTOP (forma MS-DOS) ou \documents and Settings\XP\Desktop (padrão WINDOWS, nome longo).

Quando Maligno escreveu:Aquela "Propriedades" que aparece no menu do ícone se refere às propriedades do atalho da janela. Não acho boa idéia mudar no arquivo.


Sei que nesta minha sugestão estou forçando mesmo a questão de manter o nome da janela para o nome ORIGINAL e~fazer com que funcione os sistemas "NON-WINDOWS". Mas é básicamente isso, o que a função OL_95AppTitle() da OSLIB faz. Claro que teria que adaptar para o caso do XP e ME.

Desejo boa sorte sobre "o status da janela DOS". Eu sempre quis aprender C++, acho que o C da Microsoft seria o mais conveniente para o Clipper e não o do BORLAND. Mas este é outro assunto que irei precisar ajuda do colega, se for do seu agrado.

Obrigado, + 1 vez :)Pos
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5539
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 150 vezes

Re: WAPI - APLICATIVO para MS-DOS

Mensagempor Maligno » 06 Set 2006 16:35

Acho que as vezes o meu português, não é aquelas coisas... hehe
Deixa eu esclarecer mais a minhas colocações após a sua última mensagem:

Talvez eu que esteja meio devagar hoje. Estou trabalhando há umas 20 horas direto. A gente acaba ficando meio "aéreo".

Eu quis dizer quer você vai ter que colocar um terceiro parâmetro na sua função FlashTitleBar() para que aceite o Handle da janela que quer ser piscada.

É isso mesmo. Não só o switch FLASH, mas qualquer outro switch que permita alguma interação com outra janela.

Que na sua aplicação WAPI, fizesse averificação do OS que estaria sendo usado para poder alterar nas "Propriedades do Ícone". Claro que isto difere para cada versão. Daí então eu esclarecí para cada situação de versão do OS poderia ser feito:

Sim. Se o efeito muda para cada SO, nada mais natural que haja um recurso para cada SO. Ou pelo menos, um para kernel NT e outro para os demais. Mas, as propriedades a que você se refere residem num PIF. O que eu não quero é alterar PIF. Não é o caminho mais conveniente. Mas lembre-se de que eu comentei que já havia pensado em algo. Acho que deve resolver. Mas antes, eu preciso arrumar um Windos 98. :)

Sei que nesta minha sugestão estou forçando mesmo a questão de manter o nome da janela para o nome ORIGINAL e~fazer com que funcione os sistemas "NON-WINDOWS". Mas é básicamente isso, o que a função OL_95AppTitle() da OSLIB faz. Claro que teria que adaptar para o caso do XP e ME.

Eu sei o que a OSLib faz. Ela usa um recurso simples, através da ativação de uma interrupção chamada Multiplex, em Assembly. Veja o fonte. É simples de tudo. É isso que pode ser feito, caso seja detectado um kernel não-NT. Mas vou ver se consigo uma alternativa melhor. Depois de ver o Win98.

Desejo boa sorte sobre "o status da janela DOS". Eu sempre quis aprender C++, acho que o C da Microsoft seria o mais conveniente para o Clipper e não o do BORLAND. Mas este é outro assunto que irei precisar ajuda do colega, se for do seu agrado.

Prefiro da Borland, que tem um compilador que consegue excelentes otimizações. Tem o GCC também. Muito bom. Mas nem dá pra dizer qual é melhor. Empatam. Mas isso não importa muito. Se o código C/C++ estiver dentro do padrão ANSI (as duas linguagens são padronizadas mundialmente), qualquer compilador decente vai compilar sem problema.

[]'s
Maligno
http://www.buzinello.com/prg
Avatar de usuário

Maligno
Membro Master

Membro Master
 
Mensagens: 6432
Data de registro: 06 Jul 2004 01:40
Cidade/Estado: Londrina/PR
Curtiu: 1 vez
Mens.Curtidas: 12 vezes

WAPI - APLICATIVO para MS-DOS

Mensagempor Pablo César » 08 Set 2006 14:53

Caro colega MALIGNO,

Me permita fazer outra solicitação ao seu aplicativo WAPI:

Haveria possibilidade de colocar na fila de impressão do WINDOWS um arquivo ?. Talvez utilizando o SIMPLEX do BCC ++ ?.

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.

Eu solicitei encarecidamente para os colegas que "dominam" xHarbour, para disponibilizar esse recurso em arquivo OBJ ou criação de uma LIB, mas não tive respostas.

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 ???

Pense bem nessa idéia, você está realmente ajudando a TODOS que programamos em Clipper e de forma generosa e sem interesse financeiro. O que certamente, muita gente deve estar incomodada com isso.

Um grande abraço

:)Pos :{
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5539
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 150 vezes

Próximo



Retornar para Ferramentas de Apoio

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


Faça uma doação para o forum
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro