How to minimize a C # application?

2

How do I minimize or close (to the tray) any C # application? I'm trying to minimize TeamSpeak to the system tray.

    
asked by anonymous 14.12.2017 / 21:46

2 answers

16

You'll have to search for the application by name or ID via Process.GetProcesses , or Process.GetProcessByName , or Process.GetProcessById

An important detail, you can not minimize for SystemTray , this depends on the application, generally minimized applications that support the SystemTray can be natively configured to use SystemTray at the moment they minimize, but not every external application will have this capability, you can still try to minimize it.

I created an example:

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

...

public class HandleApp
{
    //Enumera os tipos para usar com o switch (o 1,2,3 são da API do user32)
    public enum Actions { Normal = 1, Minimize = 2, Maximize = 3 };

    //Importa o user32.dll para poder usar as APIs nativas
    [DllImport("user32.dll")]
    private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);

    //Busca um aplicativo pelo nome
    public static IntPtr FindWindow(string title)
    {
        Process[] pros = Process.GetProcessesByName(title);

        if (pros.Length == 0)
            return IntPtr.Zero;

        return pros[0].MainWindowHandle;
    }

    //Dispara a ação desejada, só tem 3 opções no exemplo
    public static void Action(string name, Actions act)
    {
        IntPtr hWnd = FindWindow(name);

        if (!hWnd.Equals(IntPtr.Zero))
            ShowWindowAsync(hWnd, (int) act);
    }
}

Examples of use

Search for an application by name and if found, minimize it:

HandleApp.Action("notepad", HandleApp.Actions.Minimize);

Search for an application by name and if found, maximize it:

HandleApp.Action("notepad", HandleApp.Actions.Maximize);

Search for an application by name and if it is found it leaves the normal size (default):

HandleApp.Action("notepad", HandleApp.Actions.Normal);

Extra

You can add more functionality to the:

public enum Actions { Normal = 1, Minimize = 2, Maximize = 3 };

The numbers for each enum should follow these ShowWindow function , in case I used 1, 2 and 3 which would be SW_SHOWNORMAL , SW_SHOWMINIMIZED and SW_SHOWMAXIMED respectively, follow the list :

+--------------------+----+-----------------------------------------------------------+
| SW_HIDE            |  0 | Esconde a janela e ativa outra janela.                    |
+--------------------+----+-----------------------------------------------------------+
| SW_SHOWNORMAL      |  1 | Ativa e exibe uma janela. Se a janela for minimizada ou   |
|                    |    | maximizada, o sistema restaura seu tamanho e posição      |
|                    |    | original. Um aplicativo deve especificar esse sinalizador |
|                    |    | ao exibir a janela pela primeira vez.                     |
+--------------------+----+-----------------------------------------------------------+
| SW_SHOWMINIMIZED   |  2 | Ativa a janela e a exibe como uma janela minimizada.      |
+--------------------+----+-----------------------------------------------------------+
| SW_SHOWMAXIMED     |  3 | Ativa a janela e a exibe como uma janela maximizada.      |
+--------------------+----+-----------------------------------------------------------+
| SW_MAXIMIZE        |  3 | Maximiza a janela especificada.                           |
+--------------------+----+-----------------------------------------------------------+
| SW_SHOWNOACTIVATE  |  4 | Exibe uma janela em seu tamanho e posição mais recentes.  |
|                    |    | Esse valor é semelhante ao SW_SHOWNORMAL , exceto que a   |
|                    |    | janela não ficará ativada.                                |
+--------------------+----+-----------------------------------------------------------+
| SW_SHOW            |  5 | Ativa a janela e a exibe em seu tamanho e posição atuais. |
+--------------------+----+-----------------------------------------------------------+
| SW_MINIMIZE        |  6 | Minimiza a janela especificada e ativa a próxima janela   |
|                    |    | de nível superior na ordem Z.                             |
+--------------------+----+-----------------------------------------------------------+
| SW_SHOWMINNOACTIVE |  7 | Exibe a janela como uma janela minimizada. Esse valor é   |
|                    |    | semelhante ao SW_SHOWMINIMIZED, exceto que a janela não   |
|                    |    | não fica ativada.                                         |
+--------------------+----+-----------------------------------------------------------+
| SW_SHOWNA          |  8 | Exibe a janela em seu tamanho e posição atuais.           |
|                    |    | Esse valor é semelhante ao SW_SHOW , exceto que a janela  |
|                    |    | não está ativada.                                         |
+--------------------+----+-----------------------------------------------------------+
| SW_RESTORE         |  9 | Ativa e exibe a janela. Se a janela for minimizada ou     |
|                    |    | maximizada, o sistema restaura seu tamanho e posição      |
|                    |    | original. Um aplicativo deve especificar esse sinalizador |
|                    |    | ao restaurar uma janela minimizada.                       |
+--------------------+----+-----------------------------------------------------------+
| SW_SHOWDEFAULT     | 10 | Define o estado de exibição com base no valor SW_         |
|                    |    | especificado na estrutura STARTUPINFO passada para a      |
|                    |    | função CreateProcess pelo programa que iniciou o          |
|                    |    | aplicativo.                                               |
+--------------------+----+-----------------------------------------------------------+
| SW_FORCEMINIMIZE   | 11 | Minimiza uma janela, mesmo que o segmento que possui a    |
|                    |    | janela não está respondendo. Esta bandeira só deve ser    |
|                    |    | usada ao minimizar as janelas de um segmento diferente.   |
+--------------------+----+-----------------------------------------------------------+
    
15.12.2017 / 01:46
-2
private void button4_Click(object sender, EventArgs e)
{
  Process[] pros = Process.GetProcessesByName("excel");
  IntPtr hnd = pros[0].MainWindowHandle; 
  ShowWindow(hnd,2);
}

[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); // função externa
    
25.10.2018 / 12:03