Colocando o foco em uma aplicação usando C#

Este artigo está usando como base o conteúdo do link

Aplicando Foco em uma aplicação em execução

Este código mostrará como trazer um aplicativo em execução para a frente e definir o foco para ele.

Basta inserir o nome da aplicação em seu código e execute a solução. Se o aplicativo estiver em execução, ele trará de volta o foco. Caso contrário, será escrito na tela “Error – MediaTypeNames.Application is not running!” e também a exceção encontrada pelo aplicação de console.

Nota: Esta solução não funciona se o aplicativo for minimizado!

Exemplo:

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace FocusApplication
{
    class Program
    {
        [DllImport("USER32.DLL")]
        public static extern bool SetForegroundWindow(IntPtr hWnd);

        static void Main(string[] args)
        {
            try
            {
                string appName = "notepad++";
                Process process = Process.GetProcessesByName(appName)[0];
                if (process != null)
                {
                    process.WaitForInputIdle();
                    IntPtr mainWindowHandle = process.MainWindowHandle;
                    SetForegroundWindow(mainWindowHandle); // if works the app pops in front of the screen
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Error - MediaTypeNames.Application is not running!");
                Console.WriteLine(" - Exception: " + e.Message);
                Console.ReadLine();
            }
        }
    }
}

Sobre o DllImport – USER32.DLL

Isso significa que o método declarado abaixo (SetForegroundWindow) não está em .NET – está em um arquivo DLL externo (nativo).
Nesse caso, ele está no arquivo User32.dll, que é um componente padrão do Windows e contem funções de gerenciamento do sistema operacional para a manipulação de mensagens, temporizadores, menus e comunicações.

Como obter o nome do aplicativo

No Windows 7
Basta executar o gerenciador de tarefas. O nome do processo é o nome da primeira coluna da aba Processos.

No Windows 10
Basta executar o gerenciador de tarefas. Clicar com o botão direto no processo e ir em Propriedades. O nome do processo estará escrito dentro da caixa de texto na aba “Geral”.

Nota: sempre usar o nome sem a extensão.

Exemplo:
– chrome.exe => chrome
– notepad++.exe => notepad++

Conclusão

Lidar com foco em aplicações do Windows pode ser algo problemático, essa é uma solução simples para forçar o foco a sua aplicação quando necessário

Qualquer dúvida ou dicas, entre em contato: leandrolt@gmail.com

Principais referências

– https://docs.microsoft.com/pt-br/dotnet/framework/interop/identifying-functions-in-dlls
– https://stackoverflow.com/questions/11512373/findwindow-and-setforegroundwindow-alternatives
– https://stackoverflow.com/questions/5990118/maximize-window-from-the-main-function/32322918#32322918

Leave a Reply

Your email address will not be published. Required fields are marked *