google快速搜索框在开始菜单旁放了一个按钮,是怎么实现的,大家来烟酒一下。

解决方案 »

  1.   

    放到这里就可以了。C:\Documents and Settings\administrator\Application Data\Microsoft\Internet Explorer\Quick Launch
      

  2.   


    google的这个按钮不是在快速启动的那个组里面,他是单独的一个按钮,紧挨着“开始”按钮的。
    有图为证:
      

  3.   

    太强悍了,这就不知道是咋搞地了,似乎是没有啥api可调用的。
      

  4.   

    这里有我搜到的一个类似源码,但是有缺陷。大家可以一起烟酒一下:
    http://download.csdn.net/source/1922421
      

  5.   

    这个源码是在任务栏显示,那个google图标似乎不是在任务栏,效果不一样。
      

  6.   

    缺陷是:
      他是在一个定时器里面定时检测任务栏的大小和状态(是水平的还是垂直的),然后更改他自己在任务栏添加的那个控件的位置。
      上面的那个程序会改变任务栏的某一部分的大小;但是Windows似乎也会定时地去更新任务栏的状态,改变任务栏的大小,这时候自定义添加的那个空间就会出现闪烁的情况。但是,google的那个按钮没有这种情况。
      不知道Windows定时更改任务栏的大小是通过什么方式实现的,是定时器还是什么特殊的消息?不管是通过什么方式实现的,google肯定是搞明白了,因为google在开始菜单旁边添加的那个按钮不会出现闪烁的情况。
      
      

  7.   

    你用过visual style这个主题么?
    他提供了一个工具,可以替换掉开始菜单及按钮
      

  8.   


    对,google的那个按钮其实也应该只是一个普通的按钮。事实上可以在任务栏上创建任何类型的窗口,只要把他的位置调整正确就可以做到。困难的是,当任务栏尺寸或者位置发生变化时,怎么让自己创建的窗口的位置和尺寸也随着同步地变化。另外,你说的那个按钮会飘到远程的那个桌面上去的现象,我测试了一下,没有这种情况 -_-!
      

  9.   

    第一次才知道,可能调用了某个native api,猜测而已,希望有强人可以逆向出来研究一下
      

  10.   

    定时太土了。
    Hook任务栏窗口的WM_WINDOWPOSCHANGED消息应该就OK了。
      

  11.   

    mei yan jiu guo a 
      

  12.   

    各位不用试了,这是在浪费时间。Google有很多类似这种“深不可测”的功能,可能让人眼红,但最好不要尝试模仿,因为它走的是旁门左道,不是正规路线。除了楼主说的这个例子,还有Google桌面搜索软件,在任务栏中放入搜索框工具栏,一旦安装完,搜索框就直接出现在任务栏上,在正常情况下这是不可能实现的,正常情况下安装程序只能安装工具栏,但激活工具栏必须由用户用鼠标进行手工激活。还有IE的Google工具栏,能把一个LOGO图标做得很大,正常情况下图标尺寸都是受限制的。想知道怎么实现的?行,我问你们,微软有多少人跳槽到谷歌了?
      

  13.   

    我觉得是劫持了windows的dll吧。可能涉及windows内部的东西,不一定有api的。
      

  14.   

    两种情况的spy++消息结果对比;测试系统:WinXP。第一种情况是将任务栏设置为不锁定,然后将语言栏往左拉宽;第二种情况是在一个单独的程序中强制改变任务栏中的结果。两种情况下,任务栏收到的消息有区别。
    case 1:
    <00035> 00020070 S ....WM_ERASEBKGND hdc:C70116A2
    <00036> 00020070 R ....WM_ERASEBKGND fErased:True
    <00037> 00020070 S ....WM_PRINTCLIENT hdc:C70116A2 uFlags:PRF_CLIENT
    <00038> 00020070 R ....WM_PRINTCLIENT
    <00039> 00020070 S ....message:0x041C [User-defined:WM_USER+28] wParam:00000001 lParam:0177F8E0
    <00040> 00020070 R ....message:0x041C [User-defined:WM_USER+28] lResult:00000001
    <00041> 00020070 S ....message:0x041C [User-defined:WM_USER+28] wParam:00000001 lParam:0177F8B4
    <00042> 00020070 R ....message:0x041C [User-defined:WM_USER+28] lResult:00000001
    <00043> 00020070 S ....message:0x041C [User-defined:WM_USER+28] wParam:00000001 lParam:0177F864
    <00044> 00020070 R ....message:0x041C [User-defined:WM_USER+28] lResult:00000001
    <00045> 00020070 S ...message:0x041C [User-defined:WM_USER+28] wParam:00000001 lParam:0177FC48
    <00046> 00020070 R ...message:0x041C [User-defined:WM_USER+28] lResult:00000001
    <00047> 00020070 S ...message:0x041C [User-defined:WM_USER+28] wParam:00000001 lParam:0177FBF8
    <00048> 00020070 R ...message:0x041C [User-defined:WM_USER+28] lResult:00000001
    <00049> 00020070 S ...WM_CAPTURECHANGED hwndNewCapture:00020070
    <00050> 00020070 R ...WM_CAPTURECHANGED
    <00051> 00020070 S ...message:0x041C [User-defined:WM_USER+28] wParam:00000001 lParam:0177FBCC
    <00052> 00020070 R ...message:0x041C [User-defined:WM_USER+28] lResult:00000001

    <00055> 00020070 S ....WM_PAINT hdc:00000000
    <00058> 00020070 R ....WM_PAINT
    <00071> 00020070 S ...message:0x041C [User-defined:WM_USER+28] wParam:00000001 lParam:0177FBCC
    <00072> 00020070 R ...message:0x041C [User-defined:WM_USER+28] lResult:00000001
    <00073> 00020070 S ....WM_ERASEBKGND hdc:640108DE
    <00084> 00020070 R .....WM_ERASEBKGND fErased:True
    <00085> 00020070 S .....WM_PRINTCLIENT hdc:0F010669 uFlags:PRF_CLIENT
    <00086> 00020070 R .....WM_PRINTCLIENT
    <00087> 00020070 S ......WM_ERASEBKGND hdc:120116A2
    <00088> 00020070 R ......WM_ERASEBKGND fErased:True
    <00089> 00020070 S ......WM_PRINTCLIENT hdc:120116A2 uFlags:PRF_CLIENT
    <00090> 00020070 R ......WM_PRINTCLIENT
    <00091> 00020070 S ...message:0x041C [User-defined:WM_USER+28] wParam:00000001 lParam:0177FBCC
    <00092> 00020070 R ...message:0x041C [User-defined:WM_USER+28] lResult:00000001
    <00101> 00020070 S .....WM_PRINTCLIENT hdc:13011E8A uFlags:PRF_CLIENT
    <00102> 00020070 R .....WM_PRINTCLIENT
    <00103> 00020070 S .....WM_ERASEBKGND hdc:2F01065F
    <00104> 00020070 R .....WM_ERASEBKGND fErased:True
    <00105> 00020070 S .....WM_PRINTCLIENT hdc:2F01065F uFlags:PRF_CLIENT
    <00106> 00020070 R .....WM_PRINTCLIENT
    <00107> 00020070 S ......WM_ERASEBKGND hdc:22011C6D
    <00108> 00020070 R ......WM_ERASEBKGND fErased:True
    <00109> 00020070 S ......WM_PRINTCLIENT hdc:22011C6D uFlags:PRF_CLIENT
    <00110> 00020070 R ......WM_PRINTCLIENT
    <00111> 00020070 S ...message:0x041C [User-defined:WM_USER+28] wParam:00000001 lParam:0177FBCC
    <00112> 00020070 R ...message:0x041C [User-defined:WM_USER+28] lResult:00000001
    <00113> 00020070 S ....WM_ERASEBKGND hdc:2F01065F
    <00114> 00020070 R ....WM_ERASEBKGND fErased:True
    <00115> 00020070 S ....WM_PAINT hdc:00000000
    <00123> 00020070 S .....WM_ERASEBKGND hdc:0F010669
    <00124> 00020070 R .....WM_ERASEBKGND fErased:True
    <00131> 00020070 S ...message:0x041C [User-defined:WM_USER+28] wParam:00000001 lParam:0177FBCC
    <00132> 00020070 R ...message:0x041C [User-defined:WM_USER+28] lResult:00000001
    <00133> 00020070 S ....WM_ERASEBKGND hdc:2F01065F
    <00141> 00020070 S .....WM_PRINTCLIENT hdc:43011C6D uFlags:PRF_CLIENT
    <00142> 00020070 R .....WM_PRINTCLIENT
    <00148> 00020070 R ......WM_ERASEBKGND fErased:True
    <00149> 00020070 S ......WM_PRINTCLIENT hdc:45011C6D uFlags:PRF_CLIENT
    <00150> 00020070 R ......WM_PRINTCLIENT
    <00151> 00020070 S ....WM_WINDOWPOSCHANGING lpwp:0177F44C
    <00152> 00020070 R ....WM_WINDOWPOSCHANGING

    <00153> 00020070 S ....WM_PAINT hdc:00000000
    <00154> 00020070 R ....WM_PAINT
    <00155> 00020070 S ...message:0x041C [User-defined:WM_USER+28] wParam:00000001 lParam:0177FBCC
    <00156> 00020070 R ...message:0x041C [User-defined:WM_USER+28] lResult:00000001
    <00157> 00020070 S ...message:0x041C [User-defined:WM_USER+28] wParam:00000001 lParam:0177FBCC
    <00158> 00020070 R ...message:0x041C [User-defined:WM_USER+28] lResult:00000001
    <00159> 00020070 S ...WM_CAPTURECHANGED hwndNewCapture:00000000
    <00160> 00020070 R ...WM_CAPTURECHANGED
    <00161> 00020070 S ...message:0x041C [User-defined:WM_USER+28] wParam:00000001 lParam:0177FBCC
    <00162> 00020070 R ...message:0x041C [User-defined:WM_USER+28] lResult:00000001
    <00163> 00020070 S ...message:0x041C [User-defined:WM_USER+28] wParam:00000001 lParam:0177FB90
    <00164> 00020070 R ...message:0x041C [User-defined:WM_USER+28] lResult:00000001
    case 2:
    <00001> 00020070 S ....WM_ERASEBKGND hdc:860118F9
    <00002> 00020070 R ....WM_ERASEBKGND fErased:True
    <00003> 00020070 S ....WM_PRINTCLIENT hdc:860118F9 uFlags:PRF_CLIENT
    <00004> 00020070 R ....WM_PRINTCLIENT
    <00005> 00020070 S ...WM_WINDOWPOSCHANGING lpwp:0177FE88
    <00006> 00020070 R ...WM_WINDOWPOSCHANGING
    <00007> 00020070 S ...WM_NCCALCSIZE fCalcValidRects:True lpncsp:0177FE5C
    <00008> 00020070 R ...WM_NCCALCSIZE fuValidRect:0000 lpncsp:0177FE5C
    <00009> 00020070 S ...WM_WINDOWPOSCHANGED lpwp:0177FE88
    <00010> 00020070 S ....WM_MOVE xPos:144 yPos:0
    <00011> 00020070 R ....WM_MOVE
    <00012> 00020070 S ....WM_SIZE fwSizeType:SIZE_RESTORED nWidth:1014 nHeight:90

    <00013> 00020070 S .....WM_ERASEBKGND hdc:0A01071C
    <00014> 00020070 R .....WM_ERASEBKGND fErased:True
    <00015> 00020070 S ......WM_ERASEBKGND hdc:4901082F
    <00016> 00020070 R ......WM_ERASEBKGND fErased:True
    <00017> 00020070 R ....WM_SIZE
    <00018> 00020070 R ...WM_WINDOWPOSCHANGED
    <00019> 00020070 P WM_PAINT hdc:00000000
    <00020> 00020070 S ...WM_ERASEBKGND hdc:A50118F9
    <00021> 00020070 R ...WM_ERASEBKGND fErased:True
    <00022> 00020070 S ...WM_PRINTCLIENT hdc:A50118F9 uFlags:PRF_CLIENT
    <00023> 00020070 R ...WM_PRINTCLIENT
    <00024> 00020070 S ...WM_ERASEBKGND hdc:0F010669
    <00025> 00020070 R ...WM_ERASEBKGND fErased:True
    <00026> 00020070 S ...WM_PRINTCLIENT hdc:0F010669 uFlags:PRF_CLIENT
    <00027> 00020070 R ...WM_PRINTCLIENT
    <00028> 00020070 S ....WM_ERASEBKGND hdc:A301180E
    <00029> 00020070 R ....WM_ERASEBKGND fErased:True
    <00030> 00020070 S ....WM_PRINTCLIENT hdc:A301180E uFlags:PRF_CLIENT
    <00031> 00020070 R ....WM_PRINTCLIENT
    <00032> 00020070 S ...WM_ERASEBKGND hdc:D4011C5A
    <00033> 00020070 R ...WM_ERASEBKGND fErased:True
    <00034> 00020070 S ...WM_PRINTCLIENT hdc:D4011C5A uFlags:PRF_CLIENT
    <00035> 00020070 R ...WM_PRINTCLIENT
    <00036> 00020070 S ....WM_WINDOWPOSCHANGING lpwp:0177F714
    <00037> 00020070 R ....WM_WINDOWPOSCHANGING
    <00038> 00020070 S ....WM_NCCALCSIZE fCalcValidRects:True lpncsp:0177F6E8
    <00039> 00020070 R ....WM_NCCALCSIZE fuValidRect:0000 lpncsp:0177F6E8
    <00040> 00020070 S ....WM_NCPAINT hrgn:00000001
    <00041> 00020070 R ....WM_NCPAINT

    <00042> 00020070 S ....WM_ERASEBKGND hdc:4901082F
    <00043> 00020070 R ....WM_ERASEBKGND fErased:True
    <00044> 00020070 S ....WM_WINDOWPOSCHANGED lpwp:0177F714
    <00045> 00020070 S .....WM_MOVE xPos:104 yPos:0
    <00046> 00020070 R .....WM_MOVE
    <00047> 00020070 S .....WM_SIZE fwSizeType:SIZE_RESTORED nWidth:1054 nHeight:90
    <00048> 00020070 S .......WM_NCPAINT hrgn:00000001
    <00049> 00020070 R .......WM_NCPAINT
    <00050> 00020070 S .......WM_ERASEBKGND hdc:480105B5
    <00051> 00020070 R .......WM_ERASEBKGND fErased:True
    <00052> 00020070 R .....WM_SIZE
    <00053> 00020070 R ....WM_WINDOWPOSCHANGED
    <00054> 00020070 S ....WM_PAINT hdc:00000000
    <00055> 00020070 R ....WM_PAINT
    <00056> 00020070 S .....WM_ERASEBKGND hdc:37011833
    <00057> 00020070 R .....WM_ERASEBKGND fErased:True
    <00058> 00020070 S .....WM_PRINTCLIENT hdc:37011833 uFlags:PRF_CLIENT
    <00059> 00020070 R .....WM_PRINTCLIENT
    <00060> 00020070 S .....WM_ERASEBKGND hdc:63010833
    <00061> 00020070 R .....WM_ERASEBKGND fErased:True
    <00062> 00020070 S .....WM_PRINTCLIENT hdc:63010833 uFlags:PRF_CLIENT
    <00063> 00020070 R .....WM_PRINTCLIENT
    <00064> 00020070 S ......WM_ERASEBKGND hdc:68010905
    <00065> 00020070 R ......WM_ERASEBKGND fErased:True
    <00066> 00020070 S ......WM_PRINTCLIENT hdc:68010905 uFlags:PRF_CLIENT
    <00067> 00020070 R ......WM_PRINTCLIENT
    <00068> 00020070 S ....WM_ERASEBKGND hdc:F7011D7F
    <00069> 00020070 R ....WM_ERASEBKGND fErased:True
    <00070> 00020070 S ....WM_PRINTCLIENT hdc:F7011D7F uFlags:PRF_CLIENT
    <00071> 00020070 R ....WM_PRINTCLIENT
    <00072> 00020070 S ...WM_ERASEBKGND hdc:7F0119A2
    <00073> 00020070 R ...WM_ERASEBKGND fErased:True
    <00074> 00020070 S ...WM_PRINTCLIENT hdc:7F0119A2 uFlags:PRF_CLIENT
    <00075> 00020070 R ...WM_PRINTCLIENT
      

  15.   


    VC里面自带了一个工具:spy++
      

  16.   

    一直没有发现spy++原来有这个功能....
    惭愧...
      

  17.   

    [怎么我都不懂img=http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/3.gif][/img]
      

  18.   

    顺便贴一下这些结果中一些信息的解释:P The message was posted to the queue with the PostMessage function. No information is    available concerning the ultimate disposition of the message. S The message was sent with the SendMessage function. This means that the sender doesn抰 regain control until the receiver processes and returns the message. The receiver can, therefore, pass a return value back to the sender. s The message was sent, but security prevents access to the return value.R Each "S" line has a corresponding "R"(return) line that lists the message return value. Sometimes message calls are nested, which means that one message handler sends another message. 
      

  19.   

    倒,为啥不看那个Google按钮和Shell_TrayWnd窗口的关系呢?
    如果这二者没有附属关系,看Shell_TrayWnd的窗口消息根本就没意义。
      

  20.   

    先用spy看下他的parentwindow是谁
      

  21.   


    Google按钮的父窗口是桌面;现在的现象是:Windows似乎会定时地检测任务栏的状态;在另外一个程序中改变任务栏的大小和后,Windows自己会恢复任务栏的大小;要解决的问题是:阻止这种情况发生;思路:在改变任务栏的大小和位置后,查看任务栏收到了什么消息,然后hook其中的某些消息。
      

  22.   

    定时应该是用不着的。
    如果是用定时器定时检测的话,你这个时候就可以spy这个Google窗口的消息看看有没有WM_TIMER消息。
      

  23.   

    Google要是连这点都不能搞出来还搞什么系统啊!现在微软的对手很多啊!
      

  24.   

    继续啊 等你能研究出来也可以进微软 google了
      

  25.   

    呵呵……又学到一些东西!
    圣诞节了,祝福所有CSDN的朋友们看开心快乐!