首页
社区
课程
招聘
[原创]BDS2007任务栏空白图标修复
发表于: 2009-11-30 13:52 6258

[原创]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直播授课

收藏
免费 7
支持
分享
最新回复 (1)
雪    币: 291
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
刚好碰到类似问题,参考了
2009-12-30 10:54
0
游客
登录 | 注册 方可回帖
返回
//