找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: lxl1638

[2026年01月23日教程更新]WimTool - v2.0.2026.0103 Wim文件的图形视窗处理...

   火... [复制链接]
发表于 2008-2-12 13:49:27 | 显示全部楼层
原帖由 lxl1638 于 2008-2-12 01:30 PM 发表

可以做到,记得以前本人在论坛发过WIM文件结构的资料,看看微软是如何定义WIM文件(头)的,找到XMLINFO的位置,直接将其读取出来处理。

但本人硬盘找不到这些资料,论坛的也找不到。

从兼容性看还是通过 ...


在论坛这里.
WIM文件结构资料
回复

使用道具 举报

发表于 2008-2-12 13:56:55 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2008-2-12 14:06:08 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2008-2-12 14:08:54 | 显示全部楼层
系统为 Windows XP 媒体中心版 SP3

可能开始没有说清楚, Wimtool 如果双击带图标扩展的wim文件就会蓝屏(旧版也如此)
                    WinNT 则双击PE的公用设置模块会蓝屏

再者,此两工具并未要求只能在PE中使用吧?
回复

使用道具 举报

 楼主| 发表于 2008-2-12 14:20:03 | 显示全部楼层
SP3?或者这里有问题?
你将出现蓝屏的WIM解开到NTFS分区,再打包成WIM试试,或者你原来的WIM来源于FAT分区。

另外,你将WimTool.DLL和WimShExt.DLL放在什么位置?(如果不作任何设置,不能放在光区上,要放在NTFS分区中)。
系统的临时目录又在什么位置?不能用RAMDISK作临时文作夹。

[ 本帖最后由 lxl1638 于 2008-2-12 02:22 PM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2008-2-12 14:25:31 | 显示全部楼层
下载了2000多份,其他人也将测试结果发上来,是否出现蓝屏或者可以正常使用或者有何建议,都说明一下。
回复

使用道具 举报

发表于 2008-2-12 14:30:09 | 显示全部楼层
回ls,WIM文件是随Wimtool附带的文件,另外我没有fat分区,只有ntfs格式
正常的系统,没啥内存盘滴
将WimTool.DLL和WimShExt.DLL都放在系统的system32目录,mountpath在I盘(NTFS分区/160G)
当然,一蓝屏就啥也不知了,因为自己不会开发程序,所以忘了记所谓的蓝屏代码(对我没用哈)
如果要解的话,大概可能也就只能用imagex试试咯
回复

使用道具 举报

发表于 2008-2-12 14:36:03 | 显示全部楼层
再有 Wimtool V1.08.01.06 我已整合到PE内核,没有任何问题,挺爽
新的版本没有在PE中测试过
回复

使用道具 举报

发表于 2008-2-12 14:40:30 | 显示全部楼层
用新版,没有出现蓝屏(XPSP2)
回复

使用道具 举报

发表于 2008-2-12 14:43:23 | 显示全部楼层
刚才有测试了下,用 Wimtool 关联, 双击 LookWimIcon.WIM 和 WinCMD.WIM 都会蓝屏(默认设置,新/旧版本都会蓝屏)

用 WimNT 关联,则很正常
回复

使用道具 举报

发表于 2008-2-12 22:22:55 | 显示全部楼层
下了,支持老九,新年快乐!
回复

使用道具 举报

发表于 2008-2-13 11:40:38 | 显示全部楼层
又更新了!!!!!!!
回复

使用道具 举报

 楼主| 发表于 2008-2-13 12:40:36 | 显示全部楼层
V1.08.02.12F版更新:
1、WimTool.EXE 支持设置真彩色图标;
2、WimShExt.DLL 除支持个性化图标外,还支持注册表中默认图标;
  先个性化图标,若没有设置先个性化图标,再设置注册表中默认图标
3、去掉了 WimShExt.DLL 中的资源图标,WimShExt.DLL 由21K精简到18K;
4、附件中附有DLL的注册方法和两个带有图标的小工具(示例);
回复

使用道具 举报

发表于 2008-2-13 12:46:21 | 显示全部楼层
反馈一点问题

使用最新版WIMTOOL
点击这个浏览会被无故踢出来
就在直接退出程序
并不是每次都会
偶尔会偶尔不会

使用的是深度XP5.9

发个图更清楚一点
www.JPG
回复

使用道具 举报

发表于 2008-2-13 12:46:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2008-2-13 12:49:58 | 显示全部楼层
原帖由 nn2nn 于 2008-2-13 12:46 PM 发表
3、去掉了 WimShExt.DLL 中的资源图标,WimShExt.DLL 由21K精简到18K;

这个好。


有空你做一个专门的工具,将ICON写入WIM的XMLINFO内,或者可以在你原来的工具中加多一个选项,选择不同的方式写入WIM的ICON。
一种是你原来的方式,写到WIM后面;二是写在XML内。
回复

使用道具 举报

发表于 2008-2-13 12:53:12 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2008-2-13 12:54:50 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2008-2-13 12:57:10 | 显示全部楼层
在XML内不能以RES方式写入,XML内只能是字符串数据,所以要将ICON数据转成BASE64编码,以BASE64编码形式写入,WimShExt.DLL内置了BASE64解码功能。BASE64编码的Delphi函数本人已发在论坛中。

[ 本帖最后由 lxl1638 于 2008-2-13 12:58 PM 编辑 ]
回复

使用道具 举报

发表于 2008-2-13 12:59:59 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2008-2-13 13:03:01 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2008-2-13 13:03:16 | 显示全部楼层
原帖由 nn2nn 于 2008-2-13 12:59 PM 发表
这知道,你要将ICON数据转成BASE64编码,还是将RES数据转成BASE64编码?

ICON数据。

{var IconStream: TmemoryStream;}
IconStream := TmemoryStream.Create;
WriteIcon(IconStream, MyIcon{HICON}, false);
Nodes[RootID].WriteWideString('ICON', WideString(BinToBase64(IconStream.Memory, IconStream.Size)));
IconStream.Free;

红色是你提供的。
回复

使用道具 举报

发表于 2008-2-13 13:09:13 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2008-2-13 13:12:22 | 显示全部楼层

  1. const
  2. //BASE64码元表
  3. BaseTable: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

  4. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  5. //BASE64编码函数
  6. function BinToBase64(const PDat: PBYTE; const DatLen: DWORD): string;
  7. var s, s1: string;
  8.   i, p, len, n, Addnum: DWORD;
  9.   PBin: PBYTE;
  10. begin
  11.   result := '';
  12.   S := '';
  13.   addnum := 0;
  14.   PBin := PDat;
  15.   for i := 1 to DatLen do
  16.   begin
  17.     S := S + IntToHex(PBin^, 2);
  18.     PBin := PBYTE(DWORD(PDat) + i);
  19.   end;
  20.   case (length(s) mod 3) of
  21.     0: addnum := 0;
  22.     1: begin
  23.         s := s + '00';
  24.         addnum := 2;
  25.       end;
  26.     2: begin
  27.         s := s + '0';
  28.         addnum := 1;
  29.       end;
  30.   end;
  31.   len := length(s) div 3;
  32.   for i := 1 to len do
  33.   begin
  34.     s1 := midstr(S, i * 3 - 2, 3);
  35.     p := strtoint('$' + s1);
  36.     n := p div 64;
  37.     result := result + basetable[n + 1];
  38.     n := p mod 64;
  39.     result := result + basetable[n + 1];
  40.   end;
  41.   if addnum = 1 then result := result + '==';
  42.   if addnum = 2 then result[length(result)] := '=';
  43. end;
  44. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////


  45. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  46. //BASE64编码函数
  47. function StrtoBase64(const test: string): string;
  48. var s, s1: string;
  49.   i, p, len, n, Addnum: DWORD;
  50. begin
  51.   result := '';
  52.   S := '';
  53.   addnum := 0;
  54.   for i := 1 to length(test) do
  55.     S := S + IntToHex(Ord(test[i]), 2);
  56.   case (length(s) mod 3) of
  57.     0: addnum := 0;
  58.     1: begin
  59.         s := s + '00';
  60.         addnum := 2;
  61.       end;
  62.     2: begin
  63.         s := s + '0';
  64.         addnum := 1;
  65.       end;
  66.   end;
  67.   len := length(s) div 3;
  68.   for i := 1 to len do
  69.   begin
  70.     s1 := midstr(S, i * 3 - 2, 3);
  71.     p := strtoint('$' + s1);
  72.     n := p div 64;
  73.     result := result + basetable[n + 1];
  74.     n := p mod 64;
  75.     result := result + basetable[n + 1];
  76.   end;
  77.   if addnum = 1 then result := result + '==';
  78.   if addnum = 2 then result[length(result)] := '=';
  79. end;
  80. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////


  81. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  82. //BASE64解码函数
  83. function Base64toStr(const test: string): string;
  84. var s, s1, m: string;
  85.   i, len, t: DWORD;
  86. begin
  87.   Result := '';
  88.   if length(test) = 0 then exit;
  89.   s := test;
  90.   for i := 0 to 1 do
  91.     if s[length(s)] = '=' then setlength(s, length(s) - 1);
  92.   len := length(s) div 2;
  93.   for i := 1 to len do
  94.   begin
  95.     s1 := midstr(s, i * 2 - 1, 2);
  96.     t := (Pos(s1[1], BaseTable) - 1) * 64 + (Pos(s1[2], BaseTable) - 1);
  97.     m := m + inttohex(t, 3)
  98.   end;
  99.   if length(s) mod 2 = 1 then
  100.   begin
  101.     t := (Pos(s[length(s)], BaseTable) - 1) * 64;
  102.     m := m + inttohex(t, 3);
  103.     setlength(m, length(m) - 2);
  104.   end;
  105.   len := length(m) div 2;
  106.   for i := 1 to len do
  107.   begin
  108.     s := midstr(m, i * 2 - 1, 2);
  109.     result := result + chr(strtoint('$' + s));
  110.   end;
  111. end;
  112. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
复制代码

[ 本帖最后由 lxl1638 于 2008-2-13 01:17 PM 编辑 ]
回复

使用道具 举报

发表于 2008-2-13 13:21:19 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2008-2-13 13:23:35 | 显示全部楼层
老九你太牛X了,顶死你
回复

使用道具 举报

 楼主| 发表于 2008-2-13 13:25:54 | 显示全部楼层
原帖由 nn2nn 于 2008-2-13 01:21 PM 发表
Base64ToBin我要的是这个。

是BinToBase64
回复

使用道具 举报

发表于 2008-2-13 13:29:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2008-2-13 13:32:13 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2008-2-13 13:32:56 | 显示全部楼层
原帖由 nn2nn 于 2008-2-13 01:21 PM 发表
Base64ToBin我要的是这个。

因为SETICO有查看结果的功能,看看是否写入正确。
所以要解码。

可以用本人做的一个小工具LookWimIcon看看写入的图标。
附上LookWimIcon源码(VC++),去掉RAR改扩展名,因为是WIM
解码函数本人没有写出Delphi的,只写出VC++的(在LookWimIcon.CPP内),你可以看明白。

[ 本帖最后由 lxl1638 于 2008-2-13 01:34 PM 编辑 ]

LookWimIcon.WIM.RAR

58.67 KB, 下载次数: 93, 下载积分: 无忧币 -2

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1|闽公网安备35020302032614号 )

GMT+8, 2026-5-1 21:19

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表