从任务栏隐藏外部应用程序

我看过很多不同的论坛,但我找不到办法。 我想隐藏任务栏中的外部应用程序图标,但没有最小化应用程序。 我不知道从哪里开始,或者怎么做。 任何帮助将不胜感激。

注意隐藏外部应用程序图标,而不是我的表单图标。

您可以使用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 { /// Shows a Window ///  /// To perform certain special effects when showing or hiding a /// window, use AnimateWindow. ///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. ///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:  /// /// Applications create their main window by calling CreateWindow /// with the WS_VISIBLE flag set.  /// 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. /// /// Handle to the window. /// 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. ///  /// If the window was previously visible, the return value is nonzero. /// If the window was previously hidden, the return value is zero. ///  [DllImport("user32.dll")] private static extern bool ShowWindow(IntPtr hWnd, WindowShowStyle nCmdShow); /// Enumeration of the different ways of showing a window using /// ShowWindow private enum WindowShowStyle : uint { /// Hides the window and activates another window. /// See SW_HIDE Hide = 0, /// 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. /// See SW_SHOWNORMAL ShowNormal = 1, /// Activates the window and displays it as a minimized window. /// See SW_SHOWMINIMIZED ShowMinimized = 2, /// Activates the window and displays it as a maximized window. /// See SW_SHOWMAXIMIZED ShowMaximized = 3, /// Maximizes the specified window. /// See SW_MAXIMIZE Maximize = 3, /// Displays a window in its most recent size and position. /// This value is similar to "ShowNormal", except the window is not /// actived. /// See SW_SHOWNOACTIVATE ShowNormalNoActivate = 4, /// Activates the window and displays it in its current size /// and position. /// See SW_SHOW Show = 5, /// Minimizes the specified window and activates the next /// top-level window in the Z order. /// See SW_MINIMIZE Minimize = 6, /// Displays the window as a minimized window. This value is /// similar to "ShowMinimized", except the window is not activated. /// See SW_SHOWMINNOACTIVE ShowMinNoActivate = 7, /// Displays the window in its current size and position. This /// value is similar to "Show", except the window is not activated. /// See SW_SHOWNA ShowNoActivate = 8, /// 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. /// See SW_RESTORE Restore = 9, /// 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. /// See SW_SHOWDEFAULT ShowDefault = 10, /// 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. /// See SW_FORCEMINIMIZE 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(); } } 

没有非常简单的方法可以做到这一点。 使顶层窗口未显示在任务栏中的方法有:

  1. 让它由另一个窗口拥有。 您无法执行此操作,因为所有者是在窗口创建时确定的。
  2. 为它提供WS_EX_TOOLWINDOW扩展窗口样式。 你可以这样做,但它会改变窗口的外观。
  3. 调用ITaskbarList::DeleteTab传递窗口句柄。 虽然这会起作用,但我相信在某些情况下,任务栏按钮会返回。

从本质上讲,你试图做的是违反规则。 如果系统不易使您篡改其他应用程序,请不要感到惊讶。

Form类提供ShowInTaskbar属性。 将其设置为false,最好在InitializeComponent之后的构造函数中,并且winform应用程序将不会显示在Windows任务栏中。

 public MyForm() { InitializeComponent(); this.ShowInTaskbar = false; }