Google的快捷按钮之谜
来源:互联网 发布:校园网络诈骗案例 编辑:程序博客网 时间:2024/06/05 22:55
google的快速搜索按钮放在了任务栏上,引来了众多人的兴趣。大家不知道这个是如何实现的。
把程序放在任务栏好像不难实现,但是如果拖动任务栏好像这个按钮仍然能保持好的状态,比较难实现。估计是进入到了
window的内核,截获了消息。
以下为网友的研究结果:
在改变任务栏的位置或者大小的过程中,涉及到几个比较关键的消息:
WM_SIZING
WM_WINDOWPOSCHANGING
WM_NCCALCSIZE
WM_WINDOWPOSCHANGED
WM_MOVE
WM_SIZE
经过测试,发现有以下规律:
1.当通过直接拖动任务栏而使任务栏发生变化时,任务栏会依次收到以上列出的消息;
2.当在另外一个程序里面通过代码改变任务栏时,任务栏收到的消息会缺少WM_MOVE和WM_SIZE消息。
关于WM_WINDOWPOSCHANGED消息,MSDN里有如下解释:
The WM_WINDOWPOSCHANGED message is sent to a window whose size, position, or place in the Z order has changed as a result of a call to the SetWindowPos function or another window-management function.
Parameters
wParam
This parameter is not used.
lParam
Pointer to a WINDOWPOS structure that contains information about the window's new size and position.
Remarks
By default, the DefWindowProc function sends the WM_SIZE and WM_MOVE messages to the window. The WM_SIZE and WM_MOVE messages are not sent if an application handles the WM_WINDOWPOSCHANGED message without calling DefWindowProc. It is more efficient to perform any move or size change processing during the WM_WINDOWPOSCHANGED message without calling DefWindowProc.
根据以上解释,任务栏在收到WM_WINDOWPOSCHANGED消息之后,位置和大小已经改变。lParam参数中包含有新的位置和大小信息。
猜想:
1.直接拖动任务栏的时候,任务栏在收到WM_MOVE和WM_SIZE消息时,分别把任务栏的新位置和新大小记录了下
来;在重启系统后,任务栏还是保持新的大小和位置,那么这些值应该是保存在注文件中的。
2.在外部程序中改变任务栏状态后,任务栏没有收到WM_MOVE和WM_SIZE消息,也就没有把新位置和新大小保存下来;当任务栏再次定时查询任务栏状态时,会将任务栏的状态设置为它保存下来的值;杯具发生了... ...
可能的解决方法:
hook WM_WINDOWPOSCHANGED消息,强制发送WM_MOVE和WM_SIZE消息。
有功夫了试验一下....
- Google的快捷按钮之谜
- Google Chrome体验之快捷操作
- Android4.2 PHONE模式之截屏快捷按钮
- Android4.2 PHONE模式之截屏快捷按钮
- Android4.2 PHONE模式之截屏快捷按钮
- Google主页的登录按钮
- 去掉SecureCRT快捷菜单默认的打印按钮
- 如何为SugarCRM的快捷操作栏增加一个按钮?
- google 对IE7 快捷搜索框的处理
- 展开右上角的快捷菜单按钮后,点击屏幕其他区域按钮没有自动收起
- 菜鸟的myeclipse快捷之路
- 菜鸟的myeclipse快捷之路
- google vr 入门之制作简易的VR播放器及去除界面控制按钮
- android studio 添加快捷按钮.
- ExtJS 按钮分隔快捷符号
- Python没有运行快捷按钮
- 通知栏快捷按钮自定义教程以及快捷面板提取的思路-转自魔趣论坛-lonyii2
- 我的第一个开源组件:一个抹出来的快捷菜单按钮
- 真希望永远用不到这些代码
- 在Eclipse中使用版本控制系统CVS(转)(二)
- 关于在 xmlSPY 出现的错误 DOCTYPE-EXternalID的名称必须既是SYSTEM 又是PUBLIC?
- 网站改灰色了
- JSF MVC 流程
- Google的快捷按钮之谜
- debian安装中文字体
- 中断处理的工作队列机制-原来如此
- Displaytag的使用五
- 有电脑,没宽带,也能上网。
- Symbian 程序隐藏的某些办法
- SQL数据库中用image来存储文件
- Silverlight入门学习(35)
- MPEG-2TS码流编辑的原理及其应用