none
Maximizar aplicação RRS feed

  • 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,


    segunda-feira, 15 de fevereiro de 2016 15:43

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
    quarta-feira, 17 de fevereiro de 2016 13:03

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,

    segunda-feira, 15 de fevereiro de 2016 17:51
  • 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.


    segunda-feira, 15 de fevereiro de 2016 19:25
  • 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, 



    segunda-feira, 15 de fevereiro de 2016 19:32
  • 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);
        }
    }

    Fonte: https://social.msdn.microsoft.com/Forums/vstudio/en-US/9bde4870-1599-4958-9ab4-902fa98ba53a/how-do-i-maximizeminimize-applications-programmatically-in-c?forum=csharpgeneral

    Espero ter ajudado!


    Não esqueça de marcar como útil uma resposta que te ajude.
    "A diversão é a alma do negócio"

    terça-feira, 16 de fevereiro de 2016 13:44
  • 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,

    terça-feira, 16 de fevereiro de 2016 15:00
  • 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"

    terça-feira, 16 de fevereiro de 2016 16:07
  • 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.

    terça-feira, 16 de fevereiro de 2016 17:18
  • No Load do form, insira este código:             

                        this.MinimumSize = this.Size;
                        this.MaximumSize = this.Size;


    Gilberto Otsuka

    terça-feira, 16 de fevereiro de 2016 18:31
  • Bom dia!

    Eu só poderia fazer(this), se o formulário fosse meu. Porém, eu não tenho acesso ao código da aplicação. Para fazer um redimensionamento da aplicação tenho que ir na user32.dll

    Att,

    quarta-feira, 17 de fevereiro de 2016 10:58
  • 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
    quarta-feira, 17 de fevereiro de 2016 13:03
  • Boa tarde,

    Por falta de retorno do usuário, esta thread será encerrada.

    Caso seja necessário, por gentileza, abra uma thread nova.

    Atenciosamente

    Marcos 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.

    sexta-feira, 19 de fevereiro de 2016 18:43
  • 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!!!
    sexta-feira, 13 de abril de 2018 15:37
  • Boa tarde, Mariana! Resolveu meu problema. Muito obrigado a todos!!!
    sexta-feira, 13 de abril de 2018 15:38