如何使窗口出现在任务栏中?

时间:2009-09-22 20:46:54

标签: c# .net taskbar

任务栏中未显示窗口,仅显示在系统托盘中。我怎样才能让它显示在任务栏中?

我尝试了以下代码,但它没有效果:

int windowStyle = GetWindowLong(pMainWindow, GWL_EXSTYLE);
SetWindowLong(pMainWindow, GWL_EXSTYLE, windowStyle & WS_EX_TOOLWINDOW);

而且,这不是我的形式!我从Process.GetProcessesByName获取句柄,我不知道如何访问Form类的属性:

Process[] processes = Process.GetProcessesByName("somename");
someProcess = processes[0];

pMainWindow = someProcess.MainWindowHandle;

4 个答案:

答案 0 :(得分:2)

通过WS_EX_APPWINDOW代替WS_EX_TOOLWINDOW。来自the docs

WS_EX_APPWINDOW:当窗口可见时,强制顶层窗口进入任务栏。

WS_EX_TOOLWINDOW:...当用户按下ALT + TAB时,工具窗口不会显示在任务栏或对话框中...

答案 1 :(得分:2)

以下似乎可以解决问题。如果你隐藏&调用SetWindowLong后重新显示窗口,然后在任务栏中显示。

一旦窗口最小化,我就很难找到从任务栏中删除它的方法......

[DllImport("User32.Dll")]                
public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);

[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

private const int SW_HIDE = 0x00;
private const int SW_SHOW = 0x05;

private const int WS_EX_APPWINDOW = 0x40000;
private const int GWL_EXSTYLE = -0x14;

private void ShowWindowInTaskbar(IntPtr pMainWindow)
{                       
    SetWindowLong(pMainWindow, GWL_EXSTYLE, WS_EX_APPWINDOW);

    ShowWindow(pMainWindow, SW_HIDE);
    ShowWindow(pMainWindow, SW_SHOW);      
}

答案 2 :(得分:0)

将表单的.ShowInTaskbar属性设置为true。

答案 3 :(得分:-1)

您可以将对象返回Process.GetProcessesByName()作为表单,然后设置其.ShowInTaskbar属性吗?