Usuário com melhor resposta
Maximizar aplicação

Pergunta
-
Boa tarde!
Não estou conseguindo achar uma forma de maximizar uma aplicação pela minha aplicação, quero criar uma aplicação para verificar se uma aplicação está aberta, se estiver, maximizar ela na tela e mover o mouse até uma certa posição para dar um clique. Já consegui verificar se a mesma está aberta, mas não consigo maximizar para partir para outra etapa, segue código:
public const int WM_SYSCOMMAND = 0x0112; public const int SW_SHOWMAXIMIZED = 0xF030; [DllImport("user32.dll")] public static extern int ShowWindow(IntPtr hWnd, int Msg, int intwParam, int lParam); Process[] pname = Process.GetProcessesByName("mwvertical"); if (pname.Length != 0) { ShowWindow(pname[0].MainWindowHandle, WM_SYSCOMMAND, SW_SHOWMAXIMIZED, 0); }
Quando executo o código, ele identifica a aplicação, entra na condição, mas não maximiza.
Att,
- Editado Gabriel Bassani Ribeiro segunda-feira, 15 de fevereiro de 2016 15:48
Respostas
-
Gabriel,
Com certeza o problema está na aplicação middleware, acredito que a funcionalidade disparada pelo maximizar de dentro da aplicação ativa outras rotinas que fogem do maximizar padrão como estamos acostumados a implementar. Verifique nos processos se essa aplicação quando maximizada não gera um processo filho, nesse casso você teria que dar um restore no processo pai para conseguir achar o processo filho e depois dar um maximize no processo filho.
Espero ter ajudado e boa sorte!
Não esqueça de marcar como útil uma resposta que te ajude.
"A diversão é a alma do negócio"- Marcado como Resposta Marcos SJ sexta-feira, 19 de fevereiro de 2016 18:43
Todas as Respostas
-
Boa tarde!
Já implementei a parte de verificação do aplicativo em execução, a parte do mouse e o clique, só falta antes de executar esse evento do mouse, ao verificar meu aplicativo em execução ele chamar esse aplicativo como primeiro plano, mas não estou conseguindo.
Att,
-
Boa Tarde Gabriel,
Segue esse exemplo, ele verifica se o form está aberto, se tiver o coloca em primeiro plano, senão ele abre o mesmo.
if (Application.OpenForms.OfType<frm_lembrete>().Count() > 0) { frm_lembrete MeuFormulario = new frm_lembrete(); Application.OpenForms[MeuFormulario.Name].Activate(); Application.OpenForms[MeuFormulario.Name].WindowState = FormWindowState.Normal; } else { frm_lembrete abrir = new frm_lembrete(); abrir.Show(); }
Espero que te ajude.
- Sugerido como Resposta Ricardo dos Sntos terça-feira, 16 de fevereiro de 2016 00:19
- Não Sugerido como Resposta Gabriel Bassani Ribeiro terça-feira, 16 de fevereiro de 2016 10:34
- Sugerido como Resposta Pablicio Miranda Pires sexta-feira, 13 de abril de 2018 15:36
-
Boa tarde!
Mas é uma aplicação externa. Exemplo:
Eu verifico se a calculadora estava executando(calc.exe), caso esteja, eu chamo ela como primeiro plano. Como assim? Se tiver três aplicações abertas(Word - Maximizado, Excel - Minimizado e Calc - Minimizado), após identificar minha calculadora em execução, eu coloco ela maximizado(na frente de todas as outras). Entendeu? É isso que não estou conseguindo fazer.
Por que colocar na frente? Porque estou simulando um clique no mouse e preciso que ela esteja na tela para clicar no local específico no programa. Então antes de realizar o clique no mouse eu coloco a aplicação maximizada e aí eu realizo o meu clique.
Minha aplicação só tem o trabalho de identificar o processo em execução e maximizar ele.
Att,
- Editado Gabriel Bassani Ribeiro segunda-feira, 15 de fevereiro de 2016 19:34
-
Amigo,
Tente o código abaixo:
private const int SW_SHOWNORMAL = 1; private const int SW_SHOWMINIMIZED = 2; private const int SW_SHOWMAXIMIZED = 3; [DllImport("user32.dll")] private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow); private void button1_Click(object sender, EventArgs e) { // retrieve Notepad main window handle IntPtr hWnd = FindWindow("Notepad", "Untitled - Notepad"); if (!hWnd.Equals(IntPtr.Zero)) { // SW_SHOWMAXIMIZED to maximize the window // SW_SHOWMINIMIZED to minimize the window // SW_SHOWNORMAL to make the window be normal size ShowWindowAsync(hWnd, SW_SHOWMAXIMIZED); } }
Espero ter ajudado!
Não esqueça de marcar como útil uma resposta que te ajude.
"A diversão é a alma do negócio" -
Boa tarde!
Não maximiza.
Através deste código eu conseguir colocar ele no primeiro plano, mas o problema que se caixa estiver dimensionada ele não maximiza quando joga no primeiro plano. Segue:
const int SW_SHOWMAXIMIZED = 3;
[DllImport("user32")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
ShowWindow(pname[0].MainWindowHandle, SW_SHOWMAXIMIZED);
Att,
-
Amigo,
Infelizmente existe algum problema com essa aplicação que você está tentando maximizar ou algum erro na implementação, digo isso porque tenho o mesmo código funcionando em várias aplicações que rodando em diferentes versões do windows, e não tenho problema.
No lugar de tentar maximizar "essa aplicação" tente maximizar outra, por exemplo, OUTLOOK ou até mesmo o NOTEDPAD e veja se funciona.Espero ter ajudado e boa sorte!
Não esqueça de marcar como útil uma resposta que te ajude.
"A diversão é a alma do negócio" -
Boa tarde!
Muito obrigado pela ajuda, mas não tem nada de errada com minha aplicação, pois aplicação não é minha. De fato, dos dois modos implementados, o bloco de notas maximiza, enquanto a aplicação que quero maximizar(que é middleware) não vai k Estava analisando, o título da janela no visual é uma, no código é outra... Quando tenta maximizar a aplicação, a aplicação fica normal e surge uma tela preta ao lado, mas não maximizada, toda preta. Estranho k Acho que essa aplicação merece um olhar mais atento para conseguir maximizar. Por enquanto, estou utilizando o seguinte código:
Implementei da seguinte forma:
const int SW_SHOWMAXIMIZED = 3; //Maximizar const int ShowMinimized = 2; //Esconder const int Restore = 9; //Restaurar [DllImport("user32")] static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); ShowWindow(pname[0].MainWindowHandle, ShowMinimized); ShowWindow(pname[0].MainWindowHandle, SW_SHOWMAXIMIZED); ShowWindow(pname[0].MainWindowHandle, Restore);
Por enquanto não encontrei a resposta que maximize aplicação(Essa aplicação) quando a mesma está dimensionada.
No seu código para rodar, preciso fazer o seguinte:
[DllImport("user32.dll", EntryPoint = "FindWindow")] private static extern IntPtr FindWindow(string lp1, string lp2);
Nada demais, só um detalhe.
-
-
-
Gabriel,
Com certeza o problema está na aplicação middleware, acredito que a funcionalidade disparada pelo maximizar de dentro da aplicação ativa outras rotinas que fogem do maximizar padrão como estamos acostumados a implementar. Verifique nos processos se essa aplicação quando maximizada não gera um processo filho, nesse casso você teria que dar um restore no processo pai para conseguir achar o processo filho e depois dar um maximize no processo filho.
Espero ter ajudado e boa sorte!
Não esqueça de marcar como útil uma resposta que te ajude.
"A diversão é a alma do negócio"- Marcado como Resposta Marcos SJ sexta-feira, 19 de fevereiro de 2016 18:43
-
Boa tarde,
Por falta de retorno do usuário, esta thread será encerrada.
Caso seja necessário, por gentileza, abra uma thread nova.
AtenciosamenteMarcos SJ Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita
MSDN Community Support
Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.
-
Boa Tarde Gabriel,
Segue esse exemplo, ele verifica se o form está aberto, se tiver o coloca em primeiro plano, senão ele abre o mesmo.
if (Application.OpenForms.OfType<frm_lembrete>().Count() > 0) { frm_lembrete MeuFormulario = new frm_lembrete(); Application.OpenForms[MeuFormulario.Name].Activate(); Application.OpenForms[MeuFormulario.Name].WindowState = FormWindowState.Normal; } else { frm_lembrete abrir = new frm_lembrete(); abrir.Show(); }
Espero que te ajude.
Boa tarde, Mariana! Resolveu meu problema. Muito obrigado a todos!!! -