admin管理员组文章数量:1516870
众所周知, Windows 的任务栏可以设定成自动隐藏,这样任务栏将只在需要的时候显示出来,而其它时间则隐藏起来,通常这样做可以为我们提供更大一点的工作空间。那么任务栏的隐藏是如何实现的呢?是否与我们通常情况隐藏窗口时采用不显示窗口的手法一致呢?
其实之所以提出以上问题,是由于在尝试识别当前任务栏状态的时候碰到了问题。按照通常的想法,如果想要识别任务栏是否处于显示状态,可以通过 FindWindow 先取得任务栏的窗口句柄,然后根据窗口句柄调用函数 IsWindowVisible 就可以取得当前任务栏的状态了。
根据上述思路识别任务栏当前是否显示的代码如下:
HWND hWnd = ::FindWindow("Shell_TrayWnd", NULL);
BOOL bSheTraVis = ::IsWindowVisible(hWnd);
注意 : FindWindow 的第一个参数是类名或窗口名,这里的“ Shell_TrayWnd” 表明要查找的窗口是任务栏。
然而运行上述代码并跟踪 IsWindowVisible 的返回值 bSheTraVis ,可以发现无论任务栏是处于显示状态还是隐藏状态,其值均为 1( 即真 ) 。这个测试结果证明任务栏的隐藏与普通窗口的隐藏并不太一样。那么除了不在屏幕上显示窗口以外还有什么方法可以实现窗口的隐藏呢?我能够想到的只有一种办法,那就是窗口虽然显示了,但是它却显示在屏幕之外!为了验证这个猜想,可以尝试取得隐藏之后的任务栏的位置,相关代码如下:
CRect rcShellTray;
HWND hWnd = ::FindWindow("Shell_TrayWnd", NULL);
::GetWindowRect(hWnd,&rcShellTray);
在屏幕分辨率为 1024*768 的机器上运行上述测试代码并跟踪取得的 rcShellTray 值,可以发现 rcShellTray 中的数据如下:
top: 766 bottom: 800 left: 0 right: 1024
bottom 值为 800 说明任务栏的底端在屏幕之外,而 top 值为 766 说明任务栏在隐藏时任务栏的顶边其实还是在屏幕范围之内的。之所以没有将 top 值也设定到屏幕之外,我猜想是因为当我们将鼠标移到屏幕底端时任务栏需要监测到鼠标到达底端以便显示任务栏。
所以,任务栏的隐藏其实并不是真正隐藏了窗口,而只是将任务栏显示在了屏幕之外而已。知道了这些以后,就可以利用它实现一些需要的功能。例如,将以下代码置于窗口的 OnInitDialog 函数中,就可以在屏幕右下角显示该窗口,但是如果任务栏处于正常显示状态时,它将显示于任务栏之上,而不会与任务栏之间产生遮盖现象。
欢迎访问梦断洒醒的博客
版权声明:本文标题:深入探究:如何在Adobe Flash Player中找到被隐藏的Flash文件? 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.betaflare.com/biancheng/1773244426a3277236.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论