顺便贴一下这些结果中一些信息的解释: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.
google的这个按钮不是在快速启动的那个组里面,他是单独的一个按钮,紧挨着“开始”按钮的。
有图为证:
http://download.csdn.net/source/1922421
他是在一个定时器里面定时检测任务栏的大小和状态(是水平的还是垂直的),然后更改他自己在任务栏添加的那个控件的位置。
上面的那个程序会改变任务栏的某一部分的大小;但是Windows似乎也会定时地去更新任务栏的状态,改变任务栏的大小,这时候自定义添加的那个空间就会出现闪烁的情况。但是,google的那个按钮没有这种情况。
不知道Windows定时更改任务栏的大小是通过什么方式实现的,是定时器还是什么特殊的消息?不管是通过什么方式实现的,google肯定是搞明白了,因为google在开始菜单旁边添加的那个按钮不会出现闪烁的情况。
他提供了一个工具,可以替换掉开始菜单及按钮
对,google的那个按钮其实也应该只是一个普通的按钮。事实上可以在任务栏上创建任何类型的窗口,只要把他的位置调整正确就可以做到。困难的是,当任务栏尺寸或者位置发生变化时,怎么让自己创建的窗口的位置和尺寸也随着同步地变化。另外,你说的那个按钮会飘到远程的那个桌面上去的现象,我测试了一下,没有这种情况 -_-!
Hook任务栏窗口的WM_WINDOWPOSCHANGED消息应该就OK了。
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:00000001case 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
VC里面自带了一个工具:spy++
惭愧...
如果这二者没有附属关系,看Shell_TrayWnd的窗口消息根本就没意义。
Google按钮的父窗口是桌面;现在的现象是:Windows似乎会定时地检测任务栏的状态;在另外一个程序中改变任务栏的大小和后,Windows自己会恢复任务栏的大小;要解决的问题是:阻止这种情况发生;思路:在改变任务栏的大小和位置后,查看任务栏收到了什么消息,然后hook其中的某些消息。
如果是用定时器定时检测的话,你这个时候就可以spy这个Google窗口的消息看看有没有WM_TIMER消息。
圣诞节了,祝福所有CSDN的朋友们看开心快乐!