6

到目前为止,我能够使用以下 C# 代码来隐藏 Windows 任务栏:

[DllImport("user32.dll")]
private static extern int FindWindow(string className, string windowText);
[DllImport("user32.dll")]
private static extern int ShowWindow(int hwnd, int command);

private const int SW_HIDE = 0;
private const int SW_SHOW = 1;

...

int hwnd = FindWindow("Shell_TrayWnd", "");
ShowWindow(hwnd, SW_SHOW);

但是在使用 Windows 8 时,此代码仅在主监视器上隐藏任务栏,而不是在任务栏也可见的第二个监视器上。

如何仅在显示我的窗口的屏幕上隐藏任务栏?

4

3 回答 3

9

不要隐藏任务栏;这是做这样的事情的错误方法。取而代之的是,只需制作一个全屏窗口,任务栏就足够智能,不会妨碍您。

您可以在他的博客上阅读 Microsoft 的 Raymond Chen 的精彩解释和评论。

于 2013-08-15T16:35:51.743 回答
4

使用FindWindowEx。这也允许您传入一个窗口以按 Z 顺序进行搜索。

尔格:

DllImport("user32.dll")]
private static extern int FindWindowEx(int parent, int afterWindow, string className, string windowText);

// Start with the first child, then continue with windows of the same class after it
int hWnd = 0;
while (hWnd = FindWindowEx(0, hWnd, "Shell_TrayWnd", ""))
    ShowWindow(hWnd, SW_SHOW);

如果您只想在特定屏幕上隐藏任务栏,请使用GetWindowRect并检查窗口所在屏幕的边界,并仅在当前屏幕上的窗口上调用 ShowWindow。

于 2013-08-15T16:31:38.787 回答
0

我遇到了同样的问题。

1) 在多个监视器上运行应用程序

2)在第一个监视器上没问题,应用程序保持在顶部

3) 但如果单击第二个窗口,则会出现任务栏,反之亦然

使用 FindWindowEx 只能找到一个 Shell_TrayWnd。它来自第一个屏幕,可以隐藏

于 2015-07-16T06:34:40.670 回答