本人的发贴,特别感谢关注并帮助过我的热心人。为了不让后来人像我这样研究好些天。所以整理一下并把自己如何成功添加的过程一一描述。
本人想在开始菜单中添加关机/重启两个菜单项:开发工具VS2005英文版。
系统已经定制为中文,相应字库:
Project=>Property=>Locale=>Default locale 选择“中文/中国”
Catalog, 选择“Core OS”/International/Locale Specific Support/ Chinese[Simplified]
Monotype Imaging Ac3 Font Compression 选上
GB18030 Data Converter 选上
Fonts/SimSun & NSimSun (Subset 2_50) 选上
查找并修改了:PUBLIC/SHELL/OAK/LIB/ARMV4I/RETAIL/0804/explorerbase.res
explorerbase.res 文件直接用VS2005打开,选中行“网络和拨号连接(&N)”点右键添加。为了程序可读性即ID连续.
网络和拨号连接(&N)的ID:35340,关机_ID:35341,重启_ID:35342。
Rebuild Shell=>Sysgen
发现:关机/重启两个菜单项都出来了。但开始菜单中所有菜单项都带一个方框。
如:
程序(P)口文档
收藏(A)口控制
文档(D)口设置
设置(S)口查找
帮助(H)口运行
运行(R)...
挂起(U)口收藏
关机(U)口收藏
重启(U)口收藏
不知何解,又重新还原资源文件。全部用“挂起”来替代:结果正常
程序(P)
收藏(A)
文档(D)
设置(S)
帮助(H)
运行(R)...
挂起(U)
挂起(U)
挂起(U)
再试:“挂起”去掉一个“起”字:结果又不正常,真无语了。
程序(P)口文档
收藏(A)口控制
文档(D)口设置
设置(S)口查找
帮助(H)口运行
运行(R)...
挂(U)口收藏
挂(U)口收藏
挂(U)口收藏
问题补充:系统本地化为英文。即Default locale 选择“英文”则显示没有问题。菜单全显示为英文:关机=>ShutDown 重启=>Restart。
TO:FLandY1982
你的回复确实给我了很大的帮助。我下载了resHacker并打开了资源文件。发现中文跟英文件的资源文件在resHacker里确实前后的引号符有所不同。看起来英文的是:""而中文件的是"”.但不幸的告诉你。这并没有解决问题。不过。我在继续。。。
查看resHacker的官方网站的介绍时,发现了网站提到了XN Resource Editor工具。
没有办法继续下载下来试。发现。用XN Resource Editor打开res文件时。既然每个字段后面都自带一个“口”。由此而想是不是MS自定义的结束符。
小心翼翼的把“挂起(&P)口”去掉一个“起”字。结果让人大喜。既然成功的显示出:挂(P)。
然而得出结论是:“VS2005编辑RES文件的时候确实破坏了文件的格式”。
但又不幸的是。我不知道如何添加这个方框不清楚他是何方神圣[通过复制粘贴原有项,他死活不出来。不知道是不是要直接修改二进制啦]。继续努力中......
本人用UltraEdit打开分析:
7A0B 5E8F 0028 0026 0050 0029 程序(&P)
6587 6863 0028 0026 0044 0029 文档(&D)
8BBE 7F6E 0028 0026 0053 0029 设置(&S)
67E5 627E 0028 0026 0046 0029 查找(&F)
5E2E 52A9 0028 0026 0048 0029 帮助(&H)
8FD0 884C 0028 0026 0052 0029 002E 002E 002E 运行(&R)...
6302 8D77 0028 0026 0055 0029 挂起(&U)
6536 85CF 0028 0026 0041 0029 收藏(&A)
未修改前:
0001c6dah: 07 00 87 65 63 68 28 00 26 00 44 00 29 00 00 00 ; ..噀ch(.&.D.)...
0001c6eah: 07 00 BE 8B 6E 7F 28 00 26 00 53 00 29 00 00 00 ; ..緥n(.&.S.)...
0001c6fah: 07 00 E5 67 7E 62 28 00 26 00 46 00 29 00 00 00 ; ..錱~b(.&.F.)...
0001c70ah: 07 00 2E 5E A9 52 28 00 26 00 48 00 29 00 00 00 ; ...^㏑(.&.H.)...
0001c71ah: 0A 00 D0 8F 4C 88 28 00 26 00 52 00 29 00 2E 00 ; ..袕L?.&.R.)...
0001c72ah: 2E 00 2E 00 00 00 00 00 07 00 02 63 77 8D 28 00 ; ...........cw?.
0001c73ah: 26 00 55 00 29 00 00 00 07 00 36 65 CF 85 28 00 ; &.U.).....6e蠀(.
0001c74ah: 26 00 41 00 29 ; &.A.)
成功显示“挂(P)”用XN Resource Editor修改后的结果:
0001beb6h: 07 00 0B 7A 8F 5E 28 00 26 00 50 00 29 00 00 00 ; ...z廭(.&.P.)...
0001bec6h: 07 00 87 65 63 68 28 00 26 00 44 00 29 00 00 00 ; ..噀ch(.&.D.)...
0001bed6h: 07 00 BE 8B 6E 7F 28 00 26 00 53 00 29 00 00 00 ; ..緥n(.&.S.)...
0001bee6h: 07 00 E5 67 7E 62 28 00 26 00 46 00 29 00 00 00 ; ..錱~b(.&.F.)...
0001bef6h: 07 00 2E 5E A9 52 28 00 26 00 48 00 29 00 00 00 ; ...^㏑(.&.H.)...
0001bf06h: 0A 00 D0 8F 4C 88 28 00 26 00 52 00 29 00 2E 00 ; ..袕L?.&.R.)...
0001bf16h: 2E 00 2E 00 00 00 00 00 06 00 02 63 28 00 26 00 ; ...........c(.&.
0001bf26h: 55 00 29 00 00 00 07 00 36 65 CF 85 28 00 26 00 ; U.).....6e蠀(.&.
0001bf36h: 41 00 29 00 ; A.)..
用VS2005修改后的结果:长度全比原来的小1.
00007492h: 06 00 0B 7A 8F 5E 28 00 26 00 50 00 29 00 06 00 ; ...z廭(.&.P.)...
000074a2h: 87 65 63 68 28 00 26 00 44 00 29 00 06 00 BE 8B ; 噀ch(.&.D.)...緥
000074b2h: 6E 7F 28 00 26 00 53 00 29 00 06 00 E5 67 7E 62 ; n(.&.S.)...錱~b
000074c2h: 28 00 26 00 46 00 29 00 06 00 2E 5E A9 52 28 00 ; (.&.F.)....^㏑(.
000074d2h: 26 00 48 00 29 00 09 00 D0 8F 4C 88 28 00 26 00 ; &.H.)...袕L?.&.
000074e2h: 52 00 29 00 2E 00 2E 00 2E 00 00 00 06 00 02 63 ; R.)............c
000074f2h: 77 8D 28 00 26 00 55 00 29 00 06 00 36 65 CF 85 ; w?.&.U.)...6e蠀
00007502h: 28 00 26 00 41 00 29 ; (.&.A.)
心得发现:发现用VS2005修改长度全原来的小1,而用XN Resource Editor修改后。不会影响其他项。由此想到MS是不是以00 00<=>NULL 来作结束标识。难道就像字符串是为NULL或/0为结束符?后来证明确实有这么一回事啦。先卖个乖。其实分析到目前。我已经把关键的问题已经找到了,并且用我上面的方式可以实现了。动一下脑,想想。我是怎么做出来的。。。
其实后来,我还是用了30分钟左右才把问题搞明白。发现VS2005或VC++6.0等工具来编译资源都不会自动添加NULL结束。Why?。答案来于细心:
0001beb6h: 07 00 0B 7A 8F 5E 28 00 26 00 50 00 29 00 00 00 ; ...z廭(.&.P.)...
00007492h: 06 00 0B 7A 8F 5E 28 00 26 00 50 00 29 00 ; ...z廭(.&.P.)...
分析上面两行。应该很清楚了吧。07 00 代表长度 7A0B=>程 5E8F=>序 0028=>( 0026=>& 0050=>P 0029=>) 00 00=>NULL。
所以我选择了用XN Resource Editor添加我要的字符串,用UltraEdit来查看修改Hex值.
哈哈。大功告成啦。正在我得意的时候。不知道谁给我扔了个板砖。说那有成功。关机显示为"关口重启".重启正常。其他的显示也正常。啊~有这么回事吗?我瞧瞧说。哦。当时。由于心急与期待成功。所以把“关机”写成了“关机啊” “重启”写成了“重启啊”。再用UltraEdit找到相应的Hex值把“啊”对于的Hex值:“4A 55”修改成了“00 00”。别扔了。我也是不是估意的。只是使了点小聪明。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/riccdw421/archive/2010/01/08/5156268.aspx