-
-
[原创]BDS2007任务栏空白图标修复
-
发表于:
2009-11-30 13:52
6258
-
使用BDS2007的时候常常会出现闪屏结束后任务栏上的对应的按钮不消失的情况,白白占据了一个任务栏格子,唯一的办法就是重复启动它,运气好就不会出了。所以我决定解决掉它。
首先观察一下这个闪屏是怎么做才不会在任务栏显示的。
运行BDS,用Spy看下窗口样式,发现是WS_POPUP,且没有WS_EX_TOOLWINDOW。看起来是用隐藏父窗口的做法来实现的,如果隐藏父窗口失败,就可能会显示出来。我们就直接为他加上WS_EX_TOOLWINDOW样式,使它永远不显示就行了。开工——
载入BDS.exe,bp SetWindowLongA。运行后观察堆栈,直到看到SplashScreen的窗口。断在这里:
2015ED8D E8 5645FEFF CALL vcl100.@Controls@TWinControl@GetHandle$qqrv
2015ED92 50 PUSH EAX
2015ED93 FF15 B4E11E20 CALL DWORD PTR DS:[@Forms@SetLayeredWindowAttributes] ; user32.SetLayeredWindowAttributes
2015ED99 EB 2C JMP SHORT vcl100.2015EDC7
2015ED9B 81E6 FFFFF7FF AND ESI,FFF7FFFF
2015EDA1 56 PUSH ESI
2015EDA2 6A EC PUSH -14
2015EDA4 8BC3 MOV EAX,EBX
2015EDA6 E8 3D45FEFF CALL vcl100.@Controls@TWinControl@GetHandle$qqrv
2015EDAB 50 PUSH EAX
2015EDAC E8 FB3DF8FF CALL <JMP.&user32.SetWindowLongA> <--这里
2015EDB1 68 85040000 PUSH 485
2015EDB6 6A 00 PUSH 0
2015EDB8 6A 00 PUSH 0
2015EDBA 8BC3 MOV EAX,EBX
2015EDBC E8 2745FEFF CALL vcl100.@Controls@TWinControl@GetHandle$qqrv
2015EDC1 50 PUSH EAX
2015EDC2 E8 CD3CF8FF CALL <JMP.&user32.RedrawWindow>
2015EDC7 5E POP ESI
2015EDC8 5B POP EBX
2015EDC9 C3 RETN
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课