有时候,有些人需要查询任务栏的属性。
对此,我有些不太明白为什么。你应该继续你的生活,让任务栏也继续它的生活。
毕竟,正如我们上次讨论的那样,操作系统中甚至可能没有任务栏。
如果你真的想这么做的话(可能你只是想收集一些可用性相关的统计信息),下面的代码可以帮你的忙:
在上面的代码中,我们使用了 SHAppBarMesage 函数中的 APM_GETSTATE 消息,来获取任务栏的 “总是在最上面” 和 “自动隐藏” 的属性。
因为我们使用的是 SHAppBarMessage 这个函数,因此,如果 Windows 的未来版本修改了它维护任务栏状态的方式(或者甚至可能将任务栏的名称更改为其他名称),则上面的代码仍将正常工作,因为 SHAppBarMessage 将与任务栏发生的任何修改保持同步。
你还可以使用 ABM_SETSTATE 消息来修改这些状态。请注意,我们不鼓励从程序中执行此操作,因为这些状态位属于用户的首选项,用户应该提供系统的控制面板来进行修改,程序不应该扰乱用户的偏好。(好吧,当然,除非程序的全部意义在于改变用户的偏好。但是我看到这个问题的频率让我怀疑是否真的有那么多设置调整程序。我怀疑人们正在利用这种力量来作恶,而不是为善。)
为了避免后续问题:这些是任务栏中唯一可修改的两个属性。为像任务栏这样高度可见的东西公开可编程接口是一个非常敏感的问题,因为一旦你授予对某些东西的编程访问权,程序就会有一个非常强烈的诱惑开始滥用它。
总结世界并不美好,你得时时刻刻在心中绷紧如下几根弦:
> 是否暴露了不应该暴露的调用接口?
> 输入数据是否可能不是程序预期的,甚至是那些会触发栈溢出的”精心构造”的数据?
> 通信信道是否被监听了?真的只是将数据进行明文传输吗?
> Web服务是否太过高调,以至于引来了那些DDOS和CC攻击者?
诸位,人心不可测,还是小心为上。
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台电脑开发者来说,确实十分有帮助。
本文来自:《How to query properties of the taskbar》