2013-12-08 8 views
3

Я просмотрел множество разных форумов, и я не могу найти способ. Я хочу скрыть внешние значки приложений на панели задач, но не минимизировать приложение. Я не знаю, с чего начать, или как это сделать. Любая помощь будет принята с благодарностью.Скрыть внешнее приложение с панели задач

ПРИМЕЧАНИЕ Скрыть значок внешнего приложения, а не значок моей формы.

+0

Какое приложение является внешним приложением. Консоль или окно? Также как вы начинаете внешнее приложение, пожалуйста, [отредактируйте свой вопрос] (http://stackoverflow.com/posts/20458191/edit) и включите код, который это делает. –

+0

Это шутка? Я скопировал ваш заголовок в google как есть, и есть ** HEAPS ** полезных результатов – zerkms

+0

Приложение оконно. – user3053347

ответ

4

Вы можете сделать это с помощью функции ShowWindow. Вот небольшой образец, который скроет запущенный «calc.exe» из вашей панели задач.

using Newtonsoft.Json; 
using System; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.IO; 
using System.Net; 
using System.Net.Sockets; 
using System.Numerics; 
using System.Runtime.CompilerServices; 
using System.Runtime.InteropServices; 
using System.Text; 
using System.Threading; 
using System.Threading.Tasks; 

internal class Program 
{ 
    /// <summary>Shows a Window</summary> 
    /// <remarks> 
    /// <para>To perform certain special effects when showing or hiding a 
    /// window, use AnimateWindow.</para> 
    ///<para>The first time an application calls ShowWindow, it should use 
    ///the WinMain function's nCmdShow parameter as its nCmdShow parameter. 
    ///Subsequent calls to ShowWindow must use one of the values in the 
    ///given list, instead of the one specified by the WinMain function's 
    ///nCmdShow parameter.</para> 
    ///<para>As noted in the discussion of the nCmdShow parameter, the 
    ///nCmdShow value is ignored in the first call to ShowWindow if the 
    ///program that launched the application specifies startup information 
    ///in the structure. In this case, ShowWindow uses the information 
    ///specified in the STARTUPINFO structure to show the window. On 
    ///subsequent calls, the application must call ShowWindow with nCmdShow 
    ///set to SW_SHOWDEFAULT to use the startup information provided by the 
    ///program that launched the application. This behavior is designed for 
    ///the following situations: </para> 
    ///<list type=""> 
    /// <item>Applications create their main window by calling CreateWindow 
    /// with the WS_VISIBLE flag set. </item> 
    /// <item>Applications create their main window by calling CreateWindow 
    /// with the WS_VISIBLE flag cleared, and later call ShowWindow with the 
    /// SW_SHOW flag set to make it visible.</item> 
    ///</list></remarks> 
    /// <param name="hWnd">Handle to the window.</param> 
    /// <param name="nCmdShow">Specifies how the window is to be shown. 
    /// This parameter is ignored the first time an application calls 
    /// ShowWindow, if the program that launched the application provides a 
    /// STARTUPINFO structure. Otherwise, the first time ShowWindow is called, 
    /// the value should be the value obtained by the WinMain function in its 
    /// nCmdShow parameter. In subsequent calls, this parameter can be one of 
    /// the WindowShowStyle members.</param> 
    /// <returns> 
    /// If the window was previously visible, the return value is nonzero. 
    /// If the window was previously hidden, the return value is zero. 
    /// </returns> 
    [DllImport("user32.dll")] 
    private static extern bool ShowWindow(IntPtr hWnd, WindowShowStyle nCmdShow); 

    /// <summary>Enumeration of the different ways of showing a window using 
    /// ShowWindow</summary> 
    private enum WindowShowStyle : uint 
    { 
     /// <summary>Hides the window and activates another window.</summary> 
     /// <remarks>See SW_HIDE</remarks> 
     Hide = 0, 
     /// <summary>Activates and displays a window. If the window is minimized 
     /// or maximized, the system restores it to its original size and 
     /// position. An application should specify this flag when displaying 
     /// the window for the first time.</summary> 
     /// <remarks>See SW_SHOWNORMAL</remarks> 
     ShowNormal = 1, 
     /// <summary>Activates the window and displays it as a minimized window.</summary> 
     /// <remarks>See SW_SHOWMINIMIZED</remarks> 
     ShowMinimized = 2, 
     /// <summary>Activates the window and displays it as a maximized window.</summary> 
     /// <remarks>See SW_SHOWMAXIMIZED</remarks> 
     ShowMaximized = 3, 
     /// <summary>Maximizes the specified window.</summary> 
     /// <remarks>See SW_MAXIMIZE</remarks> 
     Maximize = 3, 
     /// <summary>Displays a window in its most recent size and position. 
     /// This value is similar to "ShowNormal", except the window is not 
     /// actived.</summary> 
     /// <remarks>See SW_SHOWNOACTIVATE</remarks> 
     ShowNormalNoActivate = 4, 
     /// <summary>Activates the window and displays it in its current size 
     /// and position.</summary> 
     /// <remarks>See SW_SHOW</remarks> 
     Show = 5, 
     /// <summary>Minimizes the specified window and activates the next 
     /// top-level window in the Z order.</summary> 
     /// <remarks>See SW_MINIMIZE</remarks> 
     Minimize = 6, 
     /// <summary>Displays the window as a minimized window. This value is 
     /// similar to "ShowMinimized", except the window is not activated.</summary> 
     /// <remarks>See SW_SHOWMINNOACTIVE</remarks> 
     ShowMinNoActivate = 7, 
     /// <summary>Displays the window in its current size and position. This 
     /// value is similar to "Show", except the window is not activated.</summary> 
     /// <remarks>See SW_SHOWNA</remarks> 
     ShowNoActivate = 8, 
     /// <summary>Activates and displays the window. If the window is 
     /// minimized or maximized, the system restores it to its original size 
     /// and position. An application should specify this flag when restoring 
     /// a minimized window.</summary> 
     /// <remarks>See SW_RESTORE</remarks> 
     Restore = 9, 
     /// <summary>Sets the show state based on the SW_ value specified in the 
     /// STARTUPINFO structure passed to the CreateProcess function by the 
     /// program that started the application.</summary> 
     /// <remarks>See SW_SHOWDEFAULT</remarks> 
     ShowDefault = 10, 
     /// <summary>Windows 2000/XP: Minimizes a window, even if the thread 
     /// that owns the window is hung. This flag should only be used when 
     /// minimizing windows from a different thread.</summary> 
     /// <remarks>See SW_FORCEMINIMIZE</remarks> 
     ForceMinimized = 11 
    } 


    private static void Main(string[] args) 
    { 
     Process[] p = Process.GetProcessesByName("calc"); 

     if(p.Length > 0) 
     { 
      IntPtr hWnd = p[0].MainWindowHandle; 

      ShowWindow(hWnd, WindowShowStyle.Hide); 
     } 

     Console.ReadLine(); 
    } 
} 
+0

она скрывает, но я не могу восстановить его обратно :( – MonsterMMORPG

+0

процесс [] р = Process.GetProcessesByName ("известково"); , если (p.Length> 0) { IntPtr HWND = р [0] .MainWindowHandle; ShowWindow (hWnd, WindowShowStyle.ShowNoActivate); } Console.ReadLine(); – MonsterMMORPG

2

Нет действительно простого способа сделать это. Способы появления окна верхнего уровня не отображаются на панели задач:

  1. Сделать его принадлежащим другому окну. Вы не можете этого сделать, потому что владелец определяется во время создания окна.
  2. Придайте WS_EX_TOOLWINDOW расширенный стиль окна. Вы можете это сделать, но это изменит внешний вид окна.
  3. Звонок ITaskbarList::DeleteTab Передача оконного ручка. Хотя это будет работать, я считаю, что в некоторых сценариях кнопка панели задач вернется.

По существу, то, что вы пытаетесь сделать, противоречит правилам. Не удивляйтесь, если система не облегчит вам работу с другими приложениями.

0

Класс Form предлагает свойство ShowInTaskbar. Установите значение false, желательно в конструкторе после InitializeComponent, и приложение winform не будет отображаться на панели задач Windows.

public MyForm() 
{ 
    InitializeComponent(); 
    this.ShowInTaskbar = false; 
} 
Смежные вопросы