如何从命令行自动隐藏任务栏

Posted

技术标签:

【中文标题】如何从命令行自动隐藏任务栏【英文标题】:How to auto-hide the taskbar from the command line 【发布时间】:2015-10-03 16:04:02 【问题描述】:

有谁知道如何通过命令行或其他方法自动隐藏 Windows 7 中的任务栏?

【问题讨论】:

【参考方案1】:

在 cmd 提示符或 .cmd 中自动隐藏任务栏。 bat文件:

Windows 7 (StuckRects2)

powershell -command "&$p='HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StuckRects2';$v=(Get-ItemProperty -Path $p).Settings;$v[8]=3;&Set-ItemProperty -Path $p -Name Settings -Value $v;&Stop-Process -f -ProcessName explorer"

Windows 10 (StuckRects3)

powershell -command "&$p='HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StuckRects3';$v=(Get-ItemProperty -Path $p).Settings;$v[8]=3;&Set-ItemProperty -Path $p -Name Settings -Value $v;&Stop-Process -f -ProcessName explorer"

说明

存储此值的注册表项还存储许多其他设置。由于我们只想更改该注册表设置的位置 9(cmd 中的$v[8]),因此我们需要保留其他设置。

通常在 cmd 中,使用 reg add 命令修改注册表就足够了,但我们使用 powershell,因为它可以很容易地保留存储在同一注册表项下的其他设置。

Explorer 也需要重新启动以获取更改。我们使用 Stop-Process 是因为 Windows 会在资源管理器停止时自动重新启动。

注意:将上述命令中的 $v[8]=3 更改为 $v[8]=2 以撤消此更改(如果您希望任务栏始终可见)。

【讨论】:

regedit.exe 也可以撞值,注意$v[8]在regedit的二进制编辑器中是第1列第2行(八个索引AKA第九项),点击字节并输入03或02 . 杀死 explorer.exe 进程似乎很关键,否则它会正常覆盖我们的 regedit 更改。 多么出色的帖子,具有出色的解释,解决了多个操作系统版本,对撤消它的批判性讨论,以及对 Explorer 停止的说明。这是我为此研究的第 15 个也是最后一个网页,甚至这个页面的顶部也让我有 10 秒的时间放弃。他们让我无助于非手动编辑注册表子字符串,但你救了我(谢谢,prev.commenter)。此外,处理白痴神秘的 StuckRects3 方法的“15 个”中的每一个都宣称要对整个 [二进制] 字符串进行大规模覆盖。那简直是破坏性的。只有你专注于字节 9。 我刚刚做了一个 attaboy,但只是在评论部分希望它能够存活下来,以防它消失。 (编辑它:byte->position)您的 powershell 解决方案相当完美,但我希望它可以保留(即恢复)在调用它之前打开的文件资源管理器窗口(无论是设置为 3 还是设置为 2。)(我做了两个 .最佳可行技术)。我注意到在 Task Man 中执行右键单击/重新启动有时会恢复文件夹窗口,有时会丢失它们。这里的命令(“&Stop-Process -f -ProcessName explorer”)似乎总是丢失它们。不是抱怨这个很棒的解决方案,而是抓住一个不错的调整。 这应该被接受为正确答案,因为它不依赖于外部程序。你也完美地解释了它背后的原因! Windows 7 版本也可以在 Windows 8.1 上正常运行。 这非常有效。我在 Mac 上使用 Bootcamp,并且一直在寻找解决方案几个小时。我只是复制并粘贴到命令中,它就可以工作了。老实说,我对它的信心为零,但它确实有效。当您在底部滚动时,它甚至会弹出。 +1 最佳答案。【参考方案2】:

这是一个小 C 程序,它将切换任务栏窗口的隐藏/显示状态。请注意,当它被隐藏时,它实际上已经完全从屏幕上消失了(它不是处于自动隐藏模式)。

#include <windows.h>

int main() 
    HWND hwnd = FindWindow("Shell_traywnd", "");
    if (IsWindowVisible(hwnd))
        SetWindowPos(hwnd,0,0,0,0,0,SWP_HIDEWINDOW);
    else
        SetWindowPos(hwnd,0,0,0,0,0,SWP_SHOWWINDOW);
    return 0;

使用 SHAppBarMessage。这个切换自动隐藏状态。

#include <windows.h>
#include <shellapi.h>

// This isn't defined for me for some reason.
#ifndef ABM_SETSTATE
#define ABM_SETSTATE 0x0000000A
#endif

int main() 
    APPBARDATA abd = sizeof abd;
    UINT uState = (UINT) SHAppBarMessage(ABM_GETSTATE, &abd);
    LPARAM param = uState & ABS_ALWAYSONTOP;
    if (uState & ABS_AUTOHIDE)
        abd.lParam = param;
    else
        abd.lParam = ABS_AUTOHIDE | param;
    SHAppBarMessage(ABM_SETSTATE, &abd);
    return 0;

【讨论】:

这依赖于未记录的行为,并且不适用于多个监视器。使用 SHAppBarMessage。 为什么不是 ABM_SETSTATE ? ***.com/questions/53367237/…

以上是关于如何从命令行自动隐藏任务栏的主要内容,如果未能解决你的问题,请参考以下文章

如何检测自动隐藏的任务栏是不是可见?

电脑任务栏怎么隐藏

如何在启用自动隐藏的 Windows 中检测任务栏的高度和方向?

使自动隐藏的任务栏在窗口最大化而不取消隐藏

delphi隐藏任务栏

win10添加了虚拟串口后自动隐藏了