【问题标题】:How to tell if Windows Taskbar's "autohide" is enabled?如何判断 Windows 任务栏的“自动隐藏”是否启用?
【发布时间】:2009-06-13 04:48:46
【问题描述】:

如何通过 Delphi 程序判断 Windows 资源管理器任务栏是否设置为自动隐藏?

【问题讨论】:

    标签: delphi winapi taskbar windows-explorer


    【解决方案1】:

    在 Windows XP 及更高版本中,您可以使用ABM_GETSTATE 消息调用SHAppBarMessage API。

    语法:

    SHAppBarMessage(ABM_SETSTATE, pabd);
    

    pabd 是指向APPBARDATA 结构的指针。
    头文件为:shellapi.h。

    如果要获取任务栏的状态,请使用ABM_GETSTATE 消息。 你可以在delphi中调用这个api。

    【讨论】:

      【解决方案2】:

      真正想知道什么?是因为你想知道屏幕的可用区域吗?

      如果是这样,那么我相信您可以使用 Screen.WorkAreaRect 来确定可用的屏幕区域,其中排除了所有(永久)工具栏等。

      【讨论】:

      • 如果任务栏处于自动隐藏模式,则任务栏使用的空间将包含在工作区域中,即使任务栏当前处于可见位置。
      • 是的 - 因此我的“(永久)”评论。当任务栏处于自动隐藏模式时,它不是永久的任务栏,因此可用的屏幕空间包括任务栏出现时将覆盖的区域。
      【解决方案3】:

      使用 Win32 shell api(IsTBAutohide 等)
      请参阅 Google 网上论坛以获取未记录的 API。
      从不阅读注册表(停止删除正确答案,这很愚蠢......)

      【讨论】:

        【解决方案4】:

        您必须处理 Windows 注册表,因为此信息保存在那里。指示“autoohide”的值仅在用户使用其帐户登录/注销时写入(读取)

        负责存储此信息的注册表键位于 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StuckRects2 唯一的东西是 settings,它是第 9 个十六进制值 对于“autohide on”,此值为 03 对于“autohide off”,此值为 02

        【讨论】:

        • 这是一个黑客。应该始终使用 API 而不是访问未记录的注册表信息。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多