Vista和Windows 7中隐藏任务栏和开始按钮的简化解决方案






4.50/5 (8投票s)
本文介绍了一个简单的解决方案,用于隐藏在Vista和Windows 7中都能工作的任务栏和开始球。
引言
文章 在Windows Vista中隐藏任务栏和开始菜单(开始球) 描述了一种隐藏Vista开始球的方法。不幸的是,它相当复杂。我发现了一种在Vista和Windows 7上隐藏开始球的替代方案,我在互联网上找不到任何关于它的文档。本文介绍了这种简化的方法。
方法
总体策略是使用P/Invoke调用Win32函数`FindWindowEx`和`ShowWindow`。诀窍是用稍微非标准的方式声明`FindWindowEx`函数,然后传递一个特殊的未公开参数。这将允许我们隐藏讨厌的Vista开始球。
第一步是声明`FindWindowEx`如下。这个声明中重要的部分是第三个参数。大多数这个函数的P/Invoke声明都使用字符串作为这个参数。我们将使用`IntPtr`。
[DllImport("user32.dll")]
private static extern IntPtr FindWindowEx(IntPtr parentHwnd,
IntPtr childAfterHwnd, IntPtr className, string windowText);
一旦我们声明了这个函数,我们就可以通过传入未公开的十六进制值0xC017并将其转换为`IntPtr`来访问开始球的窗口句柄。虽然可能有一种很好的国际化方法来检索此字符串,但对于英语以外的语言,最终参数可能会发生变化。
IntPtr hwndOrb = FindWindowEx(IntPtr.Zero, IntPtr.Zero, (IntPtr)0xC017, null);
获得窗口句柄后,我们可以通过简单的`ShowWindow`函数调用来隐藏窗口。
ShowWindow(hwndOrb, SW_HIDE);
这个函数的P/Invoke声明很简单,不需要任何花哨的修改。
[DllImport("user32.dll")]
private static extern int ShowWindow(IntPtr hwnd, int command);
private const int SW_HIDE = 0;
private const int SW_SHOW = 1;
结论
要使此方法有效有两个关键。第一个是我们声明`FindWindowEx`函数的方式。我们对类名变量使用`IntPtr`类型而不是字符串。另一个关键在于我们传递给此函数的参数。我们将十六进制代码0xC017作为`IntPtr`传递给类名。这会导致此函数将此变量视为`ATOM`而不是类名,而此特定`ATOM`似乎对应于开始球。此外,我们还为国际化目的传递空窗口标题。这些因素共同允许我们检索开始球的窗口句柄。此解决方案的灵感来自此线程末尾的一些相当神秘的帖子:隐藏Vista开始球。
我希望这种简化的方法能够更容易更愉快地完成您的编程任务,从而在Vista和Windows 7上隐藏开始球。