Maximizar janela do DOS

Delphi

29/05/2003

Olá.
Estou com o seguinte problema:
Tem uma janela do MS-DOS, que está em FullScreen, só que minimizado. Eu jah tenho o handle dessa janela e queria maximiza-la novamente pelo Delphi. Como fazer isso ?

Obrigado.


Nildo

Nildo

Curtidas 0

Respostas

Tiba

Tiba

29/05/2003

Olá. Estou com o seguinte problema: Tem uma janela do MS-DOS, que está em FullScreen, só que minimizado. Eu jah tenho o handle dessa janela e queria maximiza-la novamente pelo Delphi. Como fazer isso ? Obrigado.


Estou tendo agora o mesmo problema que o nildo ....
será que alguém agora sabe como resolver este problema ?
ou vc mesmo nildo conseguiu resolver ?


GOSTEI 0
Dopi

Dopi

29/05/2003

Acho que isso é de pouca ajuda... mas....

As aplicações TEF discado das operadoras efetuam algo semelhante... mesmo com programas DOS, porém aparentemente elas usam um ALT-TAB para voltar para a aplicação anterior. Notei isso porque se durante a transação TEF você escolher outra Janela (que nao seja da A.C.) e voltar para o programa TEF, quande ele encerra, e tenta restaurar o foco para a A.C. ele restaura para esta janela e nao para a A.C.... Exatamente como um ALT-TAB..

Como inserir um ALT-TAB no buffer do Teclado em Windows ? Isso eu não sei... :-(


GOSTEI 0
Nildo

Nildo

29/05/2003

A solução é simples:
use a API SetForegroundWindow e passe o Handle do FindWindow( 0, ´Prompt do MS-DOS, blablabla´), que o foco vai para aquele botãozinho que está na barra do menu iniciar do Windows. Agora é só você simular um ENTER pelo Keybd_event e a tela vai se restaurar!!

Nada como ganbiarras, hehehe


GOSTEI 0
Tiba

Tiba

29/05/2003

Como conseguir o handle se eu soubesse parte do texto de uma janela ?

por exemplo .. Se o texto completo para buscar a janela fosse ´Prompt do MS-DOS´ e eu soubesse apenas ´MS-DOS´ ..

tem como buscar ?


GOSTEI 0
Nildo

Nildo

29/05/2003

Como conseguir o handle se eu soubesse parte do texto de uma janela ? por exemplo .. Se o texto completo para buscar a janela fosse ´Prompt do MS-DOS´ e eu soubesse apenas ´MS-DOS´ .. tem como buscar ?


Nesse caso você deve enumerar todas as janelas, salvar em uma array contendo o Nome da janela e o Handle dela, e depois fazer uma pesquisa por essa array e retornar seu handle específico.


GOSTEI 0
Tiba

Tiba

29/05/2003

mais explicações ...

no meu caso, um aplicativo em MS-DOS executa um outro feito no delphi, dessa forma o aplicativo em MS-DOS fica fullscreen e minimizado e depois segue conforme sua dúvida nildo ...

mas .. essa aplicação em MS-DOS pode ser executada pelo Prompt ou através de um atalho criado na Área de Trabalho ... assim os textos das janelas ficam diferentes.


GOSTEI 0
Tiba

Tiba

29/05/2003

como eu faria para enumerar todas as janelas ?


GOSTEI 0
Delphinhow

Delphinhow

29/05/2003

Desculpe mais não entendi se vc tem o handle da janela que vc quer envie a mensagem para ela pedindo que se maximize. Fica mais ou menos assim
sendmessage(handle, WM_SYSCOMMAND, SC_MAXIMIZE,0) ;
acho que é isso só de uma conferida nos comandos!!! Tô com preguiça de abrir o delphi!!!


GOSTEI 0
Tiba

Tiba

29/05/2003

Desculpe mais não entendi se vc tem o handle da janela que vc quer envie a mensagem para ela pedindo que se maximize. Fica mais ou menos assim sendmessage(handle, WM_SYSCOMMAND, SC_MAXIMIZE,0) ; acho que é isso só de uma conferida nos comandos!!! Tô com preguiça de abrir o delphi!!!


Não tenho o handle da Janela .... tenho parte do texto da janela e a partir disto quero buscar o handle da janela..


GOSTEI 0
Dorivansousa

Dorivansousa

29/05/2003

simulando o pressionamento da tecla Alt+Tab (so testei em windows 98):

procedure TForm1.Button1Click(Sender: TObject);
begin
{ Mantém pressionada Alt }
keybd_event(VK_MENU, 0, KEYEVENTF_EXTENDEDKEY or 0, 0);

{ Pressiona F2 }
keybd_event(VK_TAB, 0, 0, 0);

{ Libera (solta) CTRL }
keybd_event(VK_MENU, $45, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
end;


GOSTEI 0
Nildo

Nildo

29/05/2003

1 ano e 3 meses depois alguem reviveu este tópico! :D

Para quem quiser a solução, aqui vai:
http://skyscraper.fortunecity.com/gigo/311/winprog/fullscr.txt

Está em C e eu não funcionei, mas parece que funciona...

Um abraço a todos


GOSTEI 0
Dorivansousa

Dorivansousa

29/05/2003

segundo as regras vc sempre deve fazer uma pesquisa antes de incluir alguma mensagem, fiz isso e me enteressei pelo tópico...


GOSTEI 0
Nildo

Nildo

29/05/2003

segundo as regras vc sempre deve fazer uma pesquisa antes de incluir alguma mensagem, fiz isso e me enteressei pelo tópico...


Perfeito!


GOSTEI 0
Tiba

Tiba

29/05/2003

simulando o pressionamento da tecla Alt+Tab (so testei em windows 98):


O problema de fazer essa simulação é que se a janela já estiver abrindo em tela inteira, ela voltará em modo janela.

Então .. o problema é saber quando a janela já estiver abrindo em tela inteira.


GOSTEI 0
Tiba

Tiba

29/05/2003

Para quem quiser a solução, aqui vai: http://skyscraper.fortunecity.com/gigo/311/winprog/fullscr.txt Está em C e eu não funcionei, mas parece que funciona...


Não funcionou como eu queria ...

esta solução apenas simula o como eu já tinha tentado e tbm foi proposto pelo dorivansousa.

portanto, o problema continua em saber quando já está em tela inteira para que não volte em Uso em Janela.


GOSTEI 0
Dorivansousa

Dorivansousa

29/05/2003

acredito se vc vai usar aplicativo windows alternado com outro em dos seria mais interessante nao usar tela inteira e sim o aplicativo-dos maximizado e em modo janela desabilitando as propridades do mesmo para evitar que o usario chame alt+enter, ficaria mais facil pra alternar...


GOSTEI 0
Tiba

Tiba

29/05/2003

acredito se vc vai usar aplicativo windows alternado com outro em dos seria mais interessante nao usar tela inteira e sim o aplicativo-dos maximizado e em modo janela desabilitando as propridades do mesmo para evitar que o usario chame alt+enter, ficaria mais facil pra alternar...


Não vou ficar alternando sempre os dois aplicativos (DOS e Windows), apenas com minha aplicação em Windows vou chamar o sistema em DOS.

Os usuários preferem utilizar o sistema em DOS em Tela Inteira, pois em janela acaba ficando desconfigurada a tela do sistema.


GOSTEI 0
Tiba

Tiba

29/05/2003

consegui resolver meu problema parcialmente fazendo da seguinte forma ...

eu apago o arquivo *.PIF do respectivo executável, depois chamo o programa e em seguida simulo o .

apagando-se o arquivo *.PIF eu evito que o programa já abra em Tela Inteira e depois com a simulação do ele volte em modo janela.

mas o problema agora está com o Windows XP que não aceita os comandos abaixo para simular o ..
{ Mantém pressionada ALT }
keybd_event(VK_MENU, 0, KEYEVENTF_EXTENDEDKEY or 0, 0);
{ Pressiona ENTER }
keybd_event(VK_RETURN, 0, 0, 0);
{ Libera (solta) ALT }
keybd_event(VK_MENU, $45, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);


Alguém sabe o pq de não dar certo no XP ou uma outra forma de simular o ?


GOSTEI 0
Tiba

Tiba

29/05/2003

[b:223a6af605]corrigindo acima ...[/b:223a6af605]

consegui resolver meu problema parcialmente fazendo da seguinte forma ...

eu apago o arquivo *.PIF do respectivo executável, depois chamo o programa e em seguida simulo o ´ALT + ENTER´.

apagando-se o arquivo *.PIF eu evito que o programa já abra em Tela Inteira e depois com a simulação do ´ALT + ENTER´ ele volte em modo janela.

mas o problema agora está com o Windows XP que não aceita os comandos abaixo para simular o ´ALT + ENTER´ ..
{ Mantém pressionada ALT }
keybd_event(VK_MENU, 0, KEYEVENTF_EXTENDEDKEY or 0, 0);
{ Pressiona ENTER }
keybd_event(VK_RETURN, 0, 0, 0);
{ Libera (solta) ALT }
keybd_event(VK_MENU, $45, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);


Alguém sabe o pq de não dar certo no XP ou uma outra forma de simular o ´ALT + ENTER´ ?


GOSTEI 0
POSTAR