3

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

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

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

4 回答 4

2

通过WS_EX_APPWINDOW而不是WS_EX_TOOLWINDOW. 从文档

WS_EX_APPWINDOW:当窗口可见时,强制在任务栏上显示一个顶级窗口。

WS_EX_TOOLWINDOW: ...工具窗口不会出现在任务栏或用户按 ALT+TAB 时出现的对话框中...

于 2009-09-22T21:28:04.493 回答
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);      
}
于 2009-09-22T21:44:32.020 回答
0

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

于 2009-09-22T20:53:01.407 回答
-1

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

于 2009-09-22T20:55:36.853 回答