« 五一·武汉江滩 | 网是没得上了 »

程序资源自动调整工具

bruce | 四月 29,2005 08:30

V2 date05.08.09 增加SQL光标替换

程序资源自动调整工具 V1 date05.04.28

Update Resource
UpRes.exe


增加SQL等待光标替换。

UpRes.gif, 9 KB

下载:http://oldsoft.com/mysoft/2005.08.09.UpRes2/UpRes.v1.05.08.09.rar
源码:http://oldsoft.com/mysoft/2005.08.09.UpRes/UpRes2.v1.05.08.09.src.rar

------------------

UpRes.gif, 9 KB

下载:http://oldsoft.com/mysoft/2005.04.28.UpRes/UpRes.v1.05.04.28.rar
源码:http://oldsoft.com/mysoft/2005.04.28.UpRes/UpRes.v1.05.04.28.src.rar

以我的观点,易用性的一个体现在于一致性,应用软件界面再花哨也有腻的时候,唯有和操作系统保持风格一致,严格遵循OS的GUI风格和规范才能算做到易用、易理解、耐看。

Windows下的应用程序自然跟着微软不会有错。自从XP以后,新的Theme机制给Windows增添了更多外观定制性,应用程序要适应他自然要做手脚。
新的开发工具有快速的方法让应用程序支持,而一些传统的工具如VC6、Delphi、BCB等创建的程序默认是不支持的,必须我们添加manifest描述到资源里面。程序里面每回手动添加这些资源确实有些令人厌倦。还有一些已经有的不适应theme的应用程序,虽然加个program.exe.manifest的xml文件也同样起作用,但也够烦人。
这个工具有这个功能,直接往一个pe格式文件(*.exe,*.dll,*.bpl,*.ocx等)中加入manifest资源,快速让程序自适应XP Theme,在程序发布的时候做这种手脚,应该很方便。
代码上,使用了Resource操作往pe文件中的一些SDK,updateresource写Type="#24" Name="#1"的manifest.xml资源。

另外一个功能,也是我花一下午一晚上时间写这个工具的主要目的。
就是自动修改delphi/bcb编出程序的手形光标。作为完美主义,眼里容不下一颗沙子,3年前用BCB写应用时,就琢磨着摆平他,但苦于当时学识浅薄没折腾明白。3年后再次用BCB写应用,看到那个带手套的手就呕,极其影响工作,虽然程序里面可以使用LoadCursor(IDC_HAND)来改用系统光标,但确实麻烦,专门就写这么个程序自动替换手形光标。一般使用静态连接的exe会有32761光标资源附加到目标程序中。选择程序就可以自动替换资源。如果使用动态连接,那得替换vcl50.bpl/vcl60.bpl等动态库的相应资源。

这里有一个技术点:
以前没注意的。
对于RT_CURSOR,RT_ICON类型资源的替换比较麻烦。
因为一般得不到他们的资源名,开发环境中对应的MAKEINTRESOURCE(资源ID)并不是他的名字,而是相应的RT_GROUP_CURSOR,RT_GROUP_ICON的名字,因此和其他资源替换方式不一样,首先要作的事情就是得到相应RT_CURSOR,RT_ICON的资源名。
这里用到int LookupIconIdFromDirectory(PBYTE presbits/*GROUP资源数据指针*/,BOOL fIcon/*ICON或CURSOR标识*/);
取出相应的资源ID,再就可以进行操作了。DELPHI/BCB中#32761就是对应手形光标的RT_GROUP_CURSOR资源名。
总体说来算是解决了,想深究PE资源的可以关注一下Hardware-dependent和Hardware-independent的区别。

还有一点资源操作的知识就是updateresource操作都要直接操作资源原始数据,而不是LoadIcon等Load以后的数据。

注意,使用了PE压缩、加密的程序可能操作无效。

使用说明
命令行操作:
upres.exe [/nb] [/nh] [/nx] destination
  /nb      不备份
  /nh      不改变手形光标
  /nx      不让其自适应XP Theme
 destination 目标PE文件

2005.04.28 Bruce@Wuhan www.goodui.com

你的BLOG友情链接,我已加在我的BLOG上面了! [回复]

有空的时候,加一下我的了!呵呵!

我的BLOG地址:http://www.blandboy.net

blandboy | 2005-04-29, 08:51

小布好棒 [回复]

竟然支持命令好,太合我意了

fireseed | 2005-04-29, 10:01

哥们有求于你,我遇到问题了! [回复]

我把D:的NTFS分区用PartitionMagic 8.0转成FAT32,结果都是问号,我多年的文档全用不了,知道你在这方面有办法,求你帮帮我,谢谢了!
我的联系方式:13901286771.我叫李智
E-MAIL:LZ0275@HOTMAILE.COM
QQ:78972860

麻烦你了,一定要帮我呀!

李智 | 2005-05-05, 23:29

fsa [回复]

fsafsaf

fsaf | 2005-05-13, 11:22

另一個方法 [回复]

我用的方法是修改Delphilibcontrols.res中的cursors, 把我的project recompile後就可以. 對此後的所有projects都有效.

歸木淡 | 2005-10-09, 14:15