приложение c # от l ++ без кнопки на панели задач - PullRequest
0 голосов
/ 08 февраля 2012

Я ищу способ запустить приложение c # из приложения c ++, не показывая кнопку панели задач для приложения c #, пока я не решу показать его.

У меня есть класс, который может скрывать и отображать кнопку панели задач, однако кнопка панели задач очень быстро появляется при запуске приложения c #.

Есть ли способ запустить приложение c # без ОС, создающего кнопку панели задач, но в то же время позволяющего мне показывать кнопку панели задач позже?

Вот код, который я сейчас использую, чтобы скрыть и показать кнопку панели задач.

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

class Program
{
    static void Main()
    {
        var tb = new Taskbar();
        tb.DeleteTab();
        bool hidden = true;

        while (true)
        {
            Console.WriteLine("Press any key to toggle taskbar button");
            Console.ReadKey();
            Console.Clear();

            if (hidden)
                tb.AddTab();
            else
                tb.DeleteTab();

            hidden = !hidden;
        }
    }
}

class Taskbar
{
    public void AddTab()
    {
        GetTaskbarList().AddTab(GetMainWindowHandle());
    }

    public void DeleteTab()
    {
        GetTaskbarList().DeleteTab(GetMainWindowHandle());
    }

    ITaskbarList GetTaskbarList()
    {
        var taskbarList = (ITaskbarList)new CoTaskbarList();
        taskbarList.HrInit();
        return taskbarList;
    }

    IntPtr GetMainWindowHandle()
    {
        return Process.GetCurrentProcess().MainWindowHandle;
    }

    [ComImport]
    [Guid("56fdf344-fd6d-11d0-958a-006097c9a090")]
    class CoTaskbarList
    {
    }

    [ComImport,
    Guid("56fdf342-fd6d-11d0-958a-006097c9a090"),
    InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    interface ITaskbarList
    {
        /// <summary>
        /// Initializes the taskbar list object. This method must be called before any other ITaskbarList methods can be called.
        /// </summary>
        void HrInit();

        /// <summary>
        /// Adds an item to the taskbar.
        /// </summary>
        /// <param name="hWnd">A handle to the window to be added to the taskbar.</param>
        void AddTab([In] IntPtr hWnd);

        /// <summary>
        /// Deletes an item from the taskbar.
        /// </summary>
        /// <param name="hWnd">A handle to the window to be deleted from the taskbar.</param>
        void DeleteTab([In] IntPtr hWnd);

        /// <summary>
        /// Activates an item on the taskbar. The window is not actually activated; the window's item on the taskbar is merely displayed as active.
        /// </summary>
        /// <param name="hWnd">A handle to the window on the taskbar to be displayed as active.</param>
        void ActivateTab([In] IntPtr hWnd);

        /// <summary>
        /// Marks a taskbar item as active but does not visually activate it.
        /// </summary>
        /// <param name="hWnd">A handle to the window to be marked as active.</param>
        void SetActiveAlt([In] IntPtr hWnd);
    }
}

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Установите свойство ShowInTaskbar ( WinForms или WPF ).

Изначально установите false, и приложение не появится.

Установите его на true, если вы хотите, чтобы приложение отображалось на панели задач.

0 голосов
/ 08 февраля 2012

Использование:

this.ShowInTaskbar = false;

в конструкторе Form (или установка его в конструкторе, если это возможно) должно гарантировать, что кнопка панели задач изначально не создается.Я предполагаю, что вы все равно сможете создать его, когда это необходимо.

...