我浏览了很多不同的论坛,但我找不到办法。我想从任务栏隐藏外部应用程序图标,但没有最小化应用程序。我不知道从哪里开始,或者怎么做。任何帮助将不胜感激。
注意隐藏外部应用程序图标,而不是我的表单图标。
答案 0 :(得分:5)
您可以使用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();
}
}
答案 1 :(得分:2)
没有非常简单的方法可以做到这一点。使顶层窗口不显示在任务栏中的方法是:
WS_EX_TOOLWINDOW
扩展窗口样式。你可以这样做,但它会改变窗口的外观。ITaskbarList::DeleteTab
传递窗口句柄。虽然这会起作用,但我相信在某些情况下,任务栏按钮会返回。基本上,你试图做的是违反规则。如果系统不易使您篡改其他应用程序,请不要感到惊讶。
答案 2 :(得分:1)
Form类提供ShowInTaskbar属性。将其设置为false,最好在InitializeComponent之后的构造函数中,winform应用程序将不会显示在Windows任务栏中。
public MyForm()
{
InitializeComponent();
this.ShowInTaskbar = false;
}