Tela Cheia/Janelada - Utilitário p/programas em modo console

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

Moderador: Moderadores

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á

Tela Cheia/Janelada - Utilitário p/programas em modo console

Mensagem por Pablo César »

De volta a casa.

Eu sei que este assunto ja foi discutido e acho que ainda não tem uma solução adequada para o caso de usuario alternar o modo de exibição da tela cheia para modo janelado. Isto é de muita importancia quando queremos utilizar dentro dos nossos sistemas em Clipper, aplicativos for Windows (por exemplo o Internet Explorer do Windows, Word para Mala direta, Excel para gráficos estatisticos, dial-up, etc...). Mas pra isso o usuários tem que estarem atentos para passar sua tela para modo janelado, caso contrario a janela ativa ficará minimizada e certos usuários tentam abrir novas sessões do sistema. Isto é ficam perdidos não sabendo o resultado em tela após execução do aplicativo Windows.

Para isto pensei em uma possível solução, porém eu não domino nenhuma linguagem que trate em baixo nível.

Minha idéia seria:

Objetivo: Avisar ao usuário para alternar entre janela modo "JANELADO" e modo "TEXTO".

Mas pra isto, se encontrassemos uma alma caridosa que seja programador em liguagem "FOR WINDOWS", e solicitar que desenvolva um aplicativo com as seguintes caracteristicas:

1. Não precisa exibir algo na tela. (O que evitaria mudar em modo gráfico).
2. Ao ser chamado (o aplicativo), verificar em que modo está sendo executado: "MODO JANELADO" ou "NÃO"
3. Criar um arquivo NUL com o nome de acordo ao resultado da opção 2. Digamos então: criar arquivo JANELADO.SCR ou TEXTO.SCR

Pois então, com a criação destes arquivos, poderiamos gerenciar avisos ao usuários para pressionar as teclas <ALT> <ENTER> cada vez que tenha que alternar de cada aplicativo "MODO GRAFICO" a "MODO TEXTO", e não deixar executar até que se adequem as o modo de exibição das janelas.

Encontrei no CD do Wagner, este codigo fonte que é parte da biblioteca OSLIB e para quem domina a linguagem C, achei que poderia ser util:

Código: Selecionar todos

/*
 * File......: AUTYIELD.C
 * Author....: Dave Pearson
 */

#include <extend.api>

#pragma optimize("lge", off)

/*  $DOC$
 *  $FUNCNAME$
 *      OL_WinFullScreen()
 *  $CATEGORY$
 *      Functions
 *  $ONELINER$
 *      Force a DOS window into full screen mode.
 *  $SYNTAX$
 *      OL_WinFullScreeen() --> NIL
 *  $ARGUMENTS$
 *      None.
 *  $RETURNS$
 *      Nothing.
 *  $DESCRIPTION$
 *      This function can be used to force your application into full
 *      screen mode when running under MS Windows. It should work
 *      correctly for Windows 3.x and Windows 95.
 *  $EXAMPLES$
 *      OL_WinFullScreen()
 *      alert( "Boo!" )
 *  $SEEALSO$
 *
 *  $END$
 */

CLIPPER OL_WinFull/*Screen*/( void )
{
    _asm {
        Mov AX, 0x168B;
        Mov BX, 0;
        Int 0x2F;
    }

    _ret();
}
Um clip-abraço,

Pablo
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Mensagem por MARCELOG »

Caro Pablo,
apesar de ter começado com clipper, atualmente estou usando o xHarbour.
Resolvi o problema criando uma função C que chama uma api do windows e executa o aplicativo, não retornando enquanto o mesmo não termina (ShellExecuteEx).
Quando o usuário vai acessar esse aplicativo, simplesmente aviso que enquanto o mesmo não for encerrado, o aplicativo "chamador" não vai ser reativado.
Após a execução do aplicativo windows, a função reativa a "janela"/ aplicativo chamador.
O xHarbour tem compatibilidade com o clipper, então, é so converter a função xHarbour para clipper.
Vou colocar a função xHarbour na seção respectiva, ou seja, CÓDIGO FONTE, disponibilizando a mesma para todos os participantes do fórum.
Com exceção do Windows, o conhecimento humano pertence a humanidade né.

Espero ter ajudado.

MarceloG

PS: Provavelmente o Wagner gente boa não vai "chiar", e pelo jeito, a função também não foi criada pelo mesmo.
Todavia, antes de divulgar um trecho de código que você não criou, peça licença ao autor ou distribuidor.
É legal e só faz engrandecer a informação.
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 »

Prezado Marcelo,

Não conseguí testar por não ter xHarbour instalado e por não ter prática com essa ferramenta,seria muito bom se alguém compila-se e disponibilia-se aqui no forum. Achei, não sei se vai funcionar em Clipper (RUN do RUN) rsrs. Mas para meu caso específico, eu não utilizo o comando RUN para executar aplicativos Windows. Eu possuo uma bacth que gerencia através de um menu toda chamada dos aplicativos. O exemplo da minha batch é assim:

Código: Selecionar todos

@ECHO OFF
NET USE LPT1: \\SERVIDOR\IMPRESSORA /YES
ECHO . > C:JARODA.SYS
:INICIO
MENU.EXE
IF ERRORLEVEL 255 GOTO FIN
IF ERRORLEVEL 254 CADASTRO.EXE
IF ERRORLEVEL 253 CONSULTA.EXE
IF ERRORLEVEL 252 GOTO WINAPLICA
IF ERRORLEVEL 2 GOTO INICIO
IF ERRORLEVEL 1 GOTO FIN
GOTO INICIO
:WINAPLICA
rem Colocaria o aplicativo de verificação do modo de exibição da janela
START /W C:\ARQUIV~1\INTERN~1\IEXPLORE https://pctoledo.org
GOTO INICIO
:FIN
IF EXIST C:JARODA.SYS DEL C:JARODA.SYS
GOTO SAI
:SAI
Faço isto, para evitar problemas com falta de memoria, para dar maior versatilidade ao sistema e para poder tratar isoladamente a sua manutenção.
MACELOG escreveu:PS: Provavelmente o Wagner gente boa não vai "chiar", e pelo jeito, a função também não foi criada pelo mesmo.
Todavia, antes de divulgar um trecho de código que você não criou, peça licença ao autor ou distribuidor.
É legal e só faz engrandecer a informação.
Concordo com você em mencionar o nome do autor, mas como pode ver o código já menciona o autor e além do mais que esse código estava disponível na internet em: http://www.davep.org/clipper/oslib106.zip (no proprio site do Dave http://www.davep.org/clipper/), portanto desconsidero a necessidade de pedir autorização ja que é dominio público. Só mencionei do Wagner porque foi através do CD que comprei dele que conhecí o trabalho do Dave. Faço este esclarecimento porque na época não o fiz e considero necessário deixar em claro a minha posição.

Um clip-abraço

Pablo
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á

Tela Cheia/Janelada - Utilitário p/programas em modo console

Mensagem por Pablo César »

Depois de tanto tempo, encontrei uma forma de alternar o modo de exibição através de um aplicativo que reproduz o ALT-ENTER. Só que será válido utiliza-lo somente quando tivermos certeza que o aplicativo sempre abre em modo "Tela cheia". Isso em Win98 já é possível detectar o modo mas em WINXP ainda não. O link para baixar o aplicativo é ==> http://www.richpasco.org/utilities/keystuff.zip e a sintaxe é:

KEYSTUFF ALT-ENTER

Seja na linha de comando ou dentro do nosso aplicativo irá reproduzir as teclas ALT ENTER

Espero ter ajudado e desculpem ter ressucitado o post...
Editado pela última vez por Pablo César em 03 Jun 2010 18:47, em um total de 3 vezes.
Razão: Decidí mover este tópico, porque colegas me alertaram sobre a relação deste tópico com a seção Clipper e decidí move-la porque naquela época não havia distinção de seções.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
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á

Tela cheia para sessão em WINXP

Mensagem por Pablo César »

Olá pessoal, conseguí gerar um utilitário em C++ para mudar o modo de exibição da tela em FULLSCREEN e assim contribuir com a nossa comunidade e com o desenvolvimento de aplicações em modo console. O aplicativo é bem pequeno e espero que não haja incompatibilidades, portanto vocês mesmo dirão se deu problema. A única restrição é que só serve para XP e acredito para todas as versões de Windows baseados em NT. Isto é, para Win98 e Win95 não funcionará, pois são formas diferentes de tratar o fullscreen. O interessante é que ele converte o modo janelado em tela cheia e no caso que já esteja em tela cheia, daí não interfere em nada. É rápido e prático a sua utilização.

Para os casos WIN95/98 e ME, podemos usar o Z.COM com parâmentro -F que direcionado a um arquivo texto podemos detectar se está em tela cheia ou janelada. Uma vez que sabemos o modo de exibição, podemos até usar outro aplicativo chamado KEYSTUFF.EXE que simulará o ALT-ENTER portanto conseguindo reproduzir o modo de exibição desejado. Assim desta forma podemos ja dizer que a questão de mudar o modo de exibição: está em partes resolvido !

Em anexo o aplicativo FScrn_XP.EXE (zipado), deixem suas observações... valeu !!!
Anexos
FScrn_XP.zip
(7.71 KiB) Baixado 201 vezes
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
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á

Tela cheia para sessão em WIN95/98

Mensagem por Pablo César »

Este tópico, não quer largar de mim... rsrs Mas voltando ao passado, descobrí compilando a nossa aplicação Clipper com o FULLSCRN.OBJ que faz parte da da OSLIB do Dave Pearson, podemos chamar a função OL_WinFull() para as versões 95 e 98 (e talvez Millennium, não testei) do Windows para mudar para o modo Tela cheia. Para quem quiser o arquivo obj está em anexo e pode compilá-lo na sua aplicação:

RTLINK ou BLINKER FI SUA_APP,FULLSCRN

A função que o Maligno disponibilizou é idêntica (não igual) também podem baixá-la de: site do Maligno
Anexos
teste18.zip
(72.38 KiB) Baixado 200 vezes
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
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á

Tela Cheia/Janelada - WINXP

Mensagem por Pablo César »

Acabei juntando os tópicos ja que trata do mesmo assunto. Agora vamos ao que interessa... nesta semana foi postado um aplicativo que alterna os modos de exibição tela cheia para modo janelado e visa versa. Este aplicativo funciona bem em WINXP, para quem precisar segue o link: clique aqui

Pelo menos em WINXP, não precisará mais ver o modo antes de alterná-lo, ja pode ser utilizado este aplicativo, na linha de comando: FULLSCRREN -F (para FullScreen ou tela cheia) e FULLSCREEN -W (para o modo Windowed ou modo janelado).
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
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á

Tela Cheia/Janelada - Utilitário p/programas em modo console

Mensagem por Pablo César »

A procura de uma solução que abrangesse WIN98 e WINXP e com as soluções apresentadas podemos compor o seguinte:

1. Quando o SO for WIN98 (ou digamos Windows not NT based)
a. Executar o Z.COM com parâmentro -F > arquivo.txt e depois ler a seguinte string: "it's windowed mode." se no arquivo constar é porque o modo está em modo janelado.
b. Caso queira mudar o modo, executar o KEYSTUFF.EXE que simulará o ALT-ENTER e mudará de modo. Caso não queira usar o keystuff, pode usar a função OL_WinFull() diretamente da sua aplicação caso decida compilar o FULLSCRN.OBJ (mas neste caso só muda para tela cheia, não encontrei ainda um modo para janelado).

2. Quando o SO não for WINXP8 (ou digamos Windows NT based, não foi testado em VISTA nem WIN7)
a. Executar o utilitário FULLSCRREN -F com parâmetro -F (para FullScreen ou tela cheia) e com parâmetro -W (para o modo Windowed ou modo janelado).

Eu acostumo criar uma variável de ambiente contendo a versão do Windows, isso evita a toda hora estar verificando a versão do SO. Para o caso do WINXP SP2 existe uma variável de ambiente OS=Windows_NT, que também seria útil para comparar as versões.

E assim encerramos um dilema que venho sofrendo há muito tempo. Talvez com ajuda do Maligno, poderemos ainda unificar todas as funções (linguagem C++ e Assembler) num só aplicativo ou até mesmo biblioteca.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Responder