Maximizar janela do DOS
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 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
Curtidas 0
Respostas
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
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... :-(
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
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
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
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 ?
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
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
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.
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
29/05/2003
como eu faria para enumerar todas as janelas ?
GOSTEI 0
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!!!
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
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
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;
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
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
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
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
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
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
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
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
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
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 ..
Alguém sabe o pq de não dar certo no XP ou uma outra forma de simular o ?
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
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´ ..
Alguém sabe o pq de não dar certo no XP ou uma outra forma de simular o ´ALT + ENTER´ ?
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