Убрать приложение из Alt+Tab

Дата: 31.10.2009
Категории: Visual Studio (C#) WinForms WPF

В некоторых случаях нет необходимости показывать форму приложения в меню Alt+Tab. Убрать очень просто:

[DllImport("user32.dll")]
private static extern int SetWindowLong(IntPtr window, int index, int value);

[DllImport("user32.dll")]
private static extern int GetWindowLong(IntPtr window, int index);

private const int GWL_EXSTYLE = -20;
private const int WS_EX_TOOLWINDOW = 0x00000080;

public static void HideFromAltTab(IntPtr Handle)
{
    SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, 
        GWL_EXSTYLE) | WS_EX_TOOLWINDOW);
}

Функция SetWindowLong изменяет атрибуты определяемого окна.

Функция GetWindowLong возвращает информацию об окне.

Далее в обработчике формы Load пишем:

private void FormMain_Load(object sender, EventArgs e)
{
    HideFromAltTab(this.Handle);
}

Коментарии:

  1. 31.10.2009 в 22:43

    Who it are! Зачем это надо?

  2. 31.10.2009 в 22:55

    Если тебе не нада, это не означает что это всем не нужно.

  3. 27.08.2010 в 12:14

    Бывает — ой как надо. Например для написания той же ICQ…

  4. 20.06.2011 в 10:24

    Не работает, если вызывать в FormMain_Load( ).

    Лучше вызывать в
    private void Form_Main_Shown( object sender, EventArgs e )
    {
    HideFromAltTab( this.Handle );
    }
    когда форма уже отрисовалась.

  5. 20.06.2011 в 10:44

    Нет, надо каждый раз применять после активации формы:

    protected override void OnActivated( EventArgs e )
    {
    base.OnActivated( e );
    HideFromAltTab( this.Handle );
    }

  6. 30.08.2011 в 14:45

    Извините, если не в тему. А как тоже самое сделать в VB?

  7. 01.09.2011 в 10:58

    Все точно также только синтаксис другой, если вы знаете VB и C#, то перевести вам не составит труда. Я VB не знаю, и не хочу изучать, VB для меня не удобен.