Скрыть форму WPF из Alt+Tab

Я хочу скрыть окно WPF, которое имеет WindowStyle="None", AllowTransparency="True" а также ShowInTaskbar="False" из меню задач (Alt+Tab).

Я уже исследовал это, но все результаты, как представляется, для WinForms или не имеют ответа. Вот некоторые источники, которые я уже изучил:

  1. Тот же вопрос в сообществе VS БЕЗ ответа
  2. Тот же вопрос о Stackru, но для WinForms
  3. Тот же вопрос, но для WinForms на общем сайте
  4. Это не соответствует моим требованиям, потому что я все еще хочу, чтобы окно WPF было видимым, просто не видимым в меню Alt + Tab

Вот мой код XAML:

<Window x:Class="DesktopInfo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:DesktopInfo"
        mc:Ignorable="d"
        Title="MainWindow" SizeToContent="WidthAndHeight" WindowStyle="None" AllowsTransparency="True"  Background="Transparent" ShowInTaskbar="False" Loaded="FormLoaded">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <TextBlock Text="Testing" Name="UsernameTextBlock" FontSize="20" FontWeight="Bold" Foreground="White"/>
        <TextBlock Name="ComputernameTextBlock" Grid.Row="1" FontSize="20" FontWeight="Bold" Foreground="White"/>
    </Grid>
</Window>

Вот мой код C#:

using System;
using System.Windows;
using System.Windows.Forms;

namespace DesktopInfo
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    /// 
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

Что бы я ни пытался, я не могу заставить форму WPF не отображаться в меню Alt + Tab. Любая помощь очень ценится:)

ОБНОВЛЕНИЕ ПОСЛЕ ДУБЛИКОВОГО ФЛАГА После просмотра предоставленной ссылки (и ранее просмотренной перед тем, как задавать этот вопрос), я хотел бы заявить, что я действительно нашел ответ здесь и опубликую свой полный код в качестве ответа на этот вопрос:)

1 ответ

Решение

Мой окончательный код после ответа на этот вопрос Stackru можно увидеть ниже:

using System;
using System.Windows;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Windows.Interop;

namespace DesktopInfo
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    /// 
    public partial class MainWindow : Window
    {

        [DllImport("user32.dll", SetLastError = true)]
        static extern int GetWindowLong(IntPtr hWnd, int nIndex);
        [DllImport("user32.dll")]
        static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
        private const int GWL_EX_STYLE = -20;
        private const int WS_EX_APPWINDOW = 0x00040000, WS_EX_TOOLWINDOW = 0x00000080;

        public MainWindow()
        {
            InitializeComponent();
        }
        //Form loaded event handler
        void FormLoaded(object sender, RoutedEventArgs args)
        {
            //Variable to hold the handle for the form
            var helper = new WindowInteropHelper(this).Handle;
            //Performing some magic to hide the form from Alt+Tab
            SetWindowLong(helper, GWL_EX_STYLE, (GetWindowLong(helper, GWL_EX_STYLE) | WS_EX_TOOLWINDOW) & ~WS_EX_APPWINDOW);

        }
    }
}

Моя форма теперь работает как фоновая задача, все еще видима и не видна в меню Alt+Tab. Спасибо всем за вашу помощь:) Мне немного стыдно, я не нашел выигрышную ссылку до публикации вопроса.

Другие вопросы по тегам