WinPE 3.1制作指南
前言
这是一个写给PE初学者的教程。高手请飘过。。。。。
本教程是本人制作WinPE 3.1的亲身经历,这些知识主要来源于本人制作WinPE的一些积累、微软WAIK的帮助文件,当然肯定会参考网上其他人制作的PE,很多问题也是通过百度、Google解决。PE制作需要的计算机知识并不难,但是涉及面非常广,本人的水平也有限,一本教程不可能包罗万象,也难免会有错漏;我只是尽我所能,希望给PE入门者提供一个PE制作的详细解说,使入门者能尽快制作出属于自己的PE。
第1章 制作源生WinPE 3.1
1.1 准备工作
WinPE基础知识请大家自行百度。
1.1.1下载Windows AIK
要制作源生WinPE 3.1,需要从微软官网下载如下软件:
自动安装工具包:Windows Automated Installation Kit(简称WAIK),我们需要下载的是WAIK 3.0(KB3AIK_CN.iso)以及3.1的补充包(waik_supplement_zh-cn.iso)。
PS:WAIK 3.0可以制作WinPE 3.0,补充包就可以做3.1了。
请自行在微软官网下载并安装,软件很大。
1.1.2工具软件的准备
① 虚拟机软件
VMware。制作过程中需要反复测试系统,所以这个是必须的。
② UltraISO
用来制作ISO文件的利器。
③Win7 SP1中文版安装镜像
cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso,网上很多类似版本。
④ 7-Zip压缩软件
7-Zip的优点是可以直接处理wim文件
1.2 预备知识
要制作WinPE 3.1,了解以下知识很重要。下面这些资料复制于WAIK的帮助文件,请仔细阅读体会。
1.2.1 WinPE 3.1的启动过程
① 加载特定媒体上的启动扇区(MBR)。将控制传递给 Bootmgr。Bootmgr 从启动配置数据 (BCD) 中提取基本的启动信息,并将控制权传递给 Boot.wim 中包含的 Winload.exe 文件。然后 Winload.exe 加载相应的硬件抽象层 (HAL),并加载系统注册表配置单元和必需的启动驱动程序。完成加载后,将会准备执行内核 Ntoskrnl.exe 的环境。
② 执行 Ntoskrnl.exe,完成环境设置。将控制权传递给会话管理器 (SMSS)。
③ SMSS 加载注册表的剩余部分,配置运行 Win32 子系统 (Win32k.sys) 的环境及其各种进程。SMSS 加载用于创建用户会话的 Winlogon 进程,然后启动服务和剩余的非必要设备驱动程序及安全子系统 (LSASS)。
④Winlogon.exe 根据注册表值 HKLM\SYSTEM\Setup\CmdLine 来运行设置。如果存在 %SYSTEMDRIVE%\sources\setup.exe,Winpeshl.exe 将启动它,否则 Winpeshl.exe 将查找在 %SYSTEMROOT%\system32\winpeshl.ini 中指定的应用程序。如果未指定任何应用程序,则 Winpeshl.exe 将执行 cmd /k %SYSTEMROOT%\system32\startnet.cmd。默认情况下,Windows PE 包含一个将启动 Wpeinit.exe 的 Startnet.cmd 文件。Wpeinit.exe 加载网络资源,并与网络组件(如 DHCP)进行协调。
⑤ Wpeinit.exe 完成后,将显示命令提示符窗口。此时,WinPE 3.1的启动过程完成。
1.2.2 WinPE 3.1的启动目录结构
├─bootmgr
│
├─boot
│ │─bcd
│ │─boot.sdi
│ │
│ └─fonts
│ └─chs_boot.ttf
│ └─wgl4_boot.ttf
└─Sources
└─boot.wim
以上就是微软默认的WinPE3.1启动目录结构。
1.3 制作源生WinPE3.1
根据1.2小节中的知识,如果不修改任何启动配置文件,严格按照1.2.2的目录结构安排文件,我们就可以得到一个winPE3.1了;当然,我们还需要一个MBR,这个可以从Win7安装光盘映像中提取。以下就是按照这个思路制作winPE3.1的具体步骤:
1.3.1 按照1.2.2中的目录内容从waik_supplement_zh-cn.iso中提取相应的文件,提取的文件先保存在一个临时目录中,结构应该与1.2.1所示一样。
waik_supplement_zh-cn.iso中的winpe.wim文件对应1.2.2中的boot.wim文件,请提取后改名。
注:制作32位版本的PE请从X86文件夹中提取文件,64位请从AMD64文件夹中提取文件。
1.3.2使用UltraISO加载Win7SP1安装镜像,提取启动文件,也保存在临时目录中。
1.3.3UltraISO新建“启动光盘映像”,启动文件使用1.3.2中保存的启动文件,并将1.3.1中提取的文件目录等放入这个映像,并保存
1.3.4 可以使用VMware测试了。效果如图:
1.4 小结
本章所制作的源生WinPE3.1只有一个命令行窗口,并不具备使用价值。但是通过制作,可以学习一些WinPE的基本知识并熟悉工具软件的用法,为以后的制作打好基础。并且我们在本章中安装了WAIK,我们以后要用到WAIK提供的许多工具软件(如Dism、ImageX等等),并且WAIK的帮助文件对初学PE者来说是宝典类的读物,希望大家有机会通读一遍。
第2章 使用WinBuilder制作WinPE3.1
对于第1章制作的源生PE,如果要达到能使用的地步,需要手工增加explorer图形界面等很多功能模块,工作量很大很繁琐而且容易出错,对初学者来说更是困难。当然,有许多工具软件能实现我们需要的功能,WinBuilder就是其中之一。本章就介绍使用WinBuilder制作WinPE3.1的详细步骤,我的目标是制作一个带explorer的、以系统维护为目的并且尽量精简的WinPE3.1。
PS: WinBuilder的Bug与其优点一样多,所以务必严格按照以下步骤操作!
2.1 准备工作
2.1.1 WinBuilder的下载安装
我将本章使用的WinBuilder及其所需的项目文件、必要的工具打包,可以在以下地址下载:http://u.115.com/file/clnqo55q#
下载后直接解压至自定目录即可,本文使用F:\Winbuilder目录,以下皆以此目录为例。
2.1.2 Win7SP1安装镜像的处理
① 解压Win7SP1安装镜像至硬盘,本文以F:\Win7SP1目录为例。当然,你也可以使用虚拟光驱挂载安装镜像。
② 使用7-zip解压F:\Win7SP1\sources目录下的boot.wim和install.wim文件。
Boot.wim中有两个文件夹。目录2带有setup.exe,解压目录2至G:\2目录下。使用目录1可能造成WinBuilder设置系统路径错误。
Install.wim文件中有5个文件夹,对应不同版本的Win7。解压目录5至G:\5目录下。这个可以随便解压一个目录。
PS: 从理论上讲,只要第①步给WinBuilder提供Win7SP1源盘即可。但是在实际制作过程中,WinBuilder提示找不到源盘。因此第②步不能省略。
2.2 WinBuilder的详细设置
WinBuilder的设置项目多如牛毛,本章的主要目的是制作一个简洁的带explore的WinPE3.1,所以只讲解已经选择的设置项目。有关WinBuilder的教程网上很多,其他设置请自行搜索。
运行F:\Winbuilder\Win7PESE_Builder.exe。如图:
① 设置选项
② 运行,也就是设置完成后制作WinPE
③ 下载,如果项目文件有更新,可以点此下载
2.2.1 Source
选择Win7SP1安装镜像的路径
① 首先点击Source标签
② 在这里选择你的Win7SP1安装镜像解压后的目录
下面两个选项是目标目录以及制作的ISO文件的保存路径,使用默认值。
2.2.2 Main configuration
① 设置
Build model:winpe的运行模式,一般都选择ram盘运行
Screen resolution:屏幕分辨率,这个根据自己电脑的配置情况设置
Boot manager:选择启动管理器,standard意为使用WinPE本身的启动
Boot manager skin:选择启动管理器皮肤。
Wpeinit run mode:wpeinit.exe的运行模式。
System local:系统语言选项,选auto即可。
总之,我选择这些选项的原则是简单为主。
② 保存选项
③Winbuilder的每个选项都有这个绿色小箭头,点此运行,可以检查一下有无错误。
2.2.3 Images configuration
① 选择处理Wim文件的工具软件,Auto即可
② 检测并选择install.wim文件中包含的映像,默认即可。
③ 指定boot.wim和install.wim中已解压映像的位置。强烈建议指定位置!
④ 保存
PS:所有的文件路径最好使用纯英文路径,否则可能会出现错误!!
2.2.4 Build
2.2.4.1 Retrieve Tools
指定Wim工具所在的位置,由于前面我们已经安装了WAIK,选择Installed WAIK
2.2.4.2 0-Preconfig
这个可以不管
2.2.4.3 1-Copy Files
① 文件拷贝模式,Full模式我没有测试过,应该是全部拷贝,体积不好控制
② 文件拷贝选项
Clear Target Folder:拷贝前清除目标文件夹
Other Language Files(All Nls):是否拷贝所有的Nls文件。不选WinPE启动时会提示缺少Nls文件,估计做英文版的可以不用选。
Add All keyboards/Additional Fonts:拷贝所有的键盘模式/附加字体。这个根据需要选择吧。
Local Folder Names(desktop.ini):使用本地文件夹名称
③ Windows RE配置
出于体积的考虑,本项可以不选择。
2.2.4.4 2-Shell &Config
① FBWF cache size
选择WinPE RAM盘使用的内存。根据自己的电脑配置选择。
2.2.4.55-WoW64 Basic
64位WinPE支持32位程序的配置选项。制作32位PE不需要设置。
2.2.4.6 6-Common Files
VB5、VB6运行库。以后给PE添加绿色软件可能会用到它们。
2.2.5 Shell
2.2.5.1 0-Shell Swapper TimeOut
在启动时是否显示WinBuilder的Shell选择界面
2.2.5.2 1-Explorer Shell
Explorer正是我们需要的图形界面,其设置选项也非常多,我也没有一一测试这些选项,因此只能解说个大概。其实大部分都可以采用默认设置。
① 设置explorer为默认shell
② 采用新式的开始菜单。这个我没有选用,还是使用Windows默认的比较好吧
③ 桌面图标的样式
④ explorer的快捷方式设置。这个可以不做选择。
⑤ 任务栏按钮设置,默认即可。
⑥ 是否将命令提示符放入开始菜单
⑦ 任务栏设置,默认即可
⑧ 是否显示关机按钮。对于32位PE应该是必选项。
2.2.6 Components
WinPE可安装的组件选择,从PE的用途及体积考虑,我只选择了有限的几项,并且都取消了其在开始菜单中的显示。毕竟看到英文菜单很不舒服,在WinPE后期设置中,这些都可以使用PECMD进行进一步的设置。
① HwPnP
即插即用硬件检测。
② MMC
经测试,不选此项打不开设备管理器。
③ MSI Install
如果以系统维护为PE的使用用途,此项有选择的必要。
④ PENetwork
即使不选择安装IE,对局域网的支持也很有必要。
⑤ MS Visual C++ Runtimes(2005/2008)
运行库,以后添加绿色软件可能用到。
以上所有组件的设置均未选择,仅仅是将其添加进PE。
2.2.7 Tweaks
还是以精简为目的,只选择了两项:Wallpaper和Control Panel & Aero,这两项的设置都可以自定,没啥说的。
PS:不选择Control Panel & Aero则打不开显示属性。
2.2.8 Apps
只选择了7-zip一项,毕竟程序可以在后期设置中自行添加绿色版的。
① 语言选择简体中文
② 不选择建立快捷方式,以后在PECMD中建立
③ 关联相应的文件
④ 增加7-zip至explorer的右键菜单
2.2.9 Drivers
对于以系统维护为目的的PE来说,别的驱动都是浮云,只有SRS驱动比较重要。对Win7PE而言,目前不添加任何驱动也可以很好的适应大多数电脑,因此本项可以不选择。我是选择了USB 3.0 Support这一项。
2.2.10 Finalize
这是最后的选项了。
2.2.10.1 Optimization
① 这个没搞清楚是啥意思,就是按默认选择了
② PE中计算机名称,这个自己取名
③ 防火墙的设置,默认关闭防火墙,并且不在开始菜单中显示防火墙的设置
④ 其余都按默认选择吧
2.2.10.2 TrimdownPE
选择是否减小PE注册表、源文件的体积,以及是否移除dism工具。如果对PE体积敏感的话,可以都选上。
2.2.10.3 3-PostConfig
选择压缩比例,自定吧。我选择的是最大压缩。
2.2.10.4 4-Creat ISO
建立ISO文件的选项,没啥说的了。给即将要创建的ISO文件起个名字即可。本文以Win7PE_x86.iso为例。
2.3 制作WinPE3.1
所有设置完成后,点击2.2 ②所示的蓝色大箭头,WinBuilder即开始创建PE,中途可能会有假死现象,耐心等待。
完成后,可以在F:\WinBuilder\ISO文件夹下找到Win7PE_X86.iso文件,虚拟机加载后如图所示:
2.4 小结
本章我们使用WinBuilder制作了一个带有explorer的WinPE3.1,基本上具有了Windows系统的模样与功能。当然,要达到正常使用的地步,还有很多工作要做。我们将在下章讨论WinPE3.1的后期设置与美化。
第3章 WinPE3.1后期设置
在制作了一个基本成型的WinPE3.1的基础上,我们将陆续为其添加功能部件、常用软件,以及添加个性化信息,使WinPE3.1能更好的为我所用。
3.1 准备工作
3.1.1准备系统文件
① 由于要修改PE的系统文件、注册表等内容,需要处理2.3步骤中制作的ISO文件。请将F:\WinBuilder\ISO\Win7PE_X86.iso复制一份到F:\TEMP目录下(目录自定),并使用UltraISO提取Win7PE_X86.iso文件中的boot.wim文件到此目录下。
② 使用GimageX工具或者WAIK提供的DISM命令将boot.wim文件释放至F:\TEMP\BOOT文件夹下。
③ 参考2.1.2 ②,我们使用的Win7SP1的文件均来自G:\5目录下。
3.1.2准备工具软件
① PECMD
② 需要添加至PE的绿色软件
③ 需要添加至PE的驱动
3.2 PECMD的引入
3.2.1拷贝文件
将pecmd.exe文件拷贝至F:\temp\boot\windows\system32目录下,并在此目录下新建pecmd.ini文件。
3.2.2修改PE注册表
PE启动时默认使用winpeshl.exe进行设置,我们要将其修改为使用PECMD。
① 运行注册表编辑器,定位至HKEY_LOCAL_MACHINE项。
② “文件”→“加载配置单元”,找到F:\temp\BOOT\Windows\system32\config目录下的system文件,确定加载,随便起个名称,比如“111”。
③ 注册表编辑器中定位至HKEY_LOCAL_MACHINE\111\Setup\CmdLine项,双击,将数值数据中的“winpeshl.exe”改为“PECMD.EXE MAIN %WinDir%\System32\PECMD.INI”,确定
④ 卸载配置单元
3.2.3 PECMD.INI文件的简单解说
PECMD.INI文件是PECMD.EXE运行时的重要配置文件,具体命令的用法可以仔细阅读PECMD的帮助。以下是一个PECMD.INI文件的简单例子及简单解说,仅供参考(其实我使用的也基本是从网上PE系统抄来的)。
//////////////////////////////////////////
_SUB OSD
DISP W1024 H768 B32 F60
SCRN ScrW,ScrH
ENVI TextLeft=20
CALC #TextTop=%ScrH%-60
CALC #TextRight=%TextLeft% + 400
CALC #TextBoom=%TextTop%+40
_END
//////////////////////////////////////////////////
//////////////////////////////////////////
_SUB OSInit
TEXT 鱼非子Win7PE正在初始化系统...#0xFFDDDD L%TextLeft% T%TextTop% R%TextRight% B%TextBoom% $20
EXEC !%WS%\winpeshl.exe
EXEC !=%WS%\Ux.exe
EXEC !=%WS%\regsvr32.exe /s x:\windows\system32\msi.dll
_END
//////////////////////////////////////////
//////////////////////////////////////////
_SUB CreateMemu
TEXT 创建内置程序菜单...
LINK %Programs%\附件\命令提示符,%WS%\cmd.exe
PINT %Programs%\附件\命令提示符.lnk,附到「开始」菜单
_END
//////////////////////////////////////////
//////////////////////////////////////////
_SUB LoadShell
TEXT 设定休眠键重启/电源键关机……
HOTK #95,PECMD.EXE SHUT R //休眠键重启
HOTK #255,PECMD.EXE SHUT //电源键关机
TEXT 鱼非子Win7PE启动完成.稍候可去除启动盘 ...
SHEL %W%\explorer.exe
//////////////////////////////////////////////////////
////////////////////////主体执行流程/////////////////////////////////////////////
TEAM ENVI W=%WinDir%|ENVI $WS=%WinDir%\SYSTEM32|ENVI WSD=%WS%\Drivers
CALL OSD
CALL OSInit
CALL CreateMemu
CALL LoadShell
////////////////////////////主体执行流程结束////////////////////////////////////
① 以“_SUB”开头的类似于编程中的子程序,直接在主体执行时调用。
② SUB OSD段主要设定了PE的屏幕分辨率以及启动文本的显示位置。
③ SUB OSInit段设定了PE启动时执行的程序
④ SUB CreateMemu建立PE的开始菜单、程序快捷方式等。
⑤ SUB LoadShell段主要是为了启动explorer,以后输入法也将在此段添加。
⑥ 主体执行流程设定环境变量,调用上述子程序。
3.2.4重建WIM文件
修改了F:\temp\boot中的文件后,需要重建wim文件以保存修改,步骤如下:
①启动GimageX,选项如图
② 点击直接创建按钮,GimageX开始创建boot.wim文件
③ UltraISO,将上一步创建的boot.wim文件添加到Win7PE_X86.iso文件中,替换以前的boot.wim文件。
④ 可以运行虚拟机测试了
PS:3.2.4的步骤是每次修改后都必须要做的,当然对wim文件的处理也可以用其他工具软件完成。
3.3 语言栏的显示及输入法的集成
3.3.1显示语言栏所需要的文件
\Windows\System32\input.dll
\Windows\System32\zh-cn\input.dll.mui
\Windows\System32\ctfmon.exe
\Windows\System32\zh-cn\ctfmon.exe.mui
\Windows\System32\msctf.dll
\Windows\System32\zh-cn\msctf.dll.mui
\Windows\System32\MsCtfMonitor.dll
\Windows\System32\msctfp.dll
\Windows\System32\msctfui.dll
\Windows\System32\zh-cn\msctfui.dll.mui
\Windows\System32\msutb.dll
\Windows\System32\zh-cn\msutb.dll.mui
请在Win7SP1安装映像中找到上述文件并拷贝至PE系统中。
3.3.2注册表的修改
经过与正常运行的Win7对比,需要在PE注册表中添加如下项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CTF\TIP\{0000897b-83df-4b96-be07-0fb58b01c4a4}\LanguageProfile\0x00000000\{0001bea3-ed56-483d-a2e2-aeae25577436}\Enable 值:1
请按照3.2.2中修改注册表的步骤,加载F:\temp\BOOT\Windows\system32\software文件进行修改
3.3.3集成智能ABC输入法
智能ABC输入法需要以下文件:winabc.cwd、winabc.ime和winabc.ovl,这些文件可以在网上下载的智能ABC安装文件中提取。按下列步骤安装:
① 将上述文件拷贝至PE系统windows\system32目录下。
② 在PECMD.INI文件“_SUB LoadShell”段添加如下内容:
EXEC !%WS%\ctfmon.exe
CALL $imm32,ImmInstallIMEW,%WS%\winabc.ime,智能ABC
3.4 应用软件的添加
从PE的用途、体积等方面考虑,没有给本PE外置大型软件,而只是添加了少许绿色软件,并全部内置。
3.4.1添加Windows自带程序
在PE的制作过程中,没有集成一些Windows自带的小工具,如记事本、写字板、画图等,如果需要,可以对比正常运行的Win7系统,自行拷贝这些小工具到PE系统的System32目录下即可。
PS:如果只拷贝exe文件无法执行,看提示缺什么文件就添加什么文件。
3.4.2添加系统维护用绿色软件
本PE系统添加的软件均放入PE系统ISO文件的programfiles目录下,也就是全内置方式。
3.4.3给添加的软件建立快捷方式
修改PECMD.INI文件,在“_SUB CreateMemu”段添加建立快捷方式的内容。如:
LINK %DeskTop%\网络支持,%ProgramFiles%\PENetwork\PENetwork.EXE
LINK %Programs%\附件\命令提示符,%WS%\cmd.exe
PINT %Programs%\附件\命令提示符.lnk,附到「开始」菜单
以上只是举例说明,可根据自己的实际情况进行修改。
3.5 驱动程序的添加
对于以维护系统为目的的PE而言,SRS驱动是最应该引起注意的。虽然Win7SP1已经是很新的操作系统了,但是随着时间的推移,难免会出现不能识别的硬件,所以还是应该添加最新版本的驱动以备不时之需。
3.5.1 SRS驱动的添加
现在以自由天空的SRS驱动为例,将其加入PE。
3.5.1.1 将下载的天空SRS驱动解压,目录应该如图所示
3.5.1.2 打开“SRS.Win7.x86.AMD”目录
① 将其中“drivers”目录下的3个文件ahcix86s.sys、amd_sata.sys、amd_xata.sys拷贝至“F:\temp\BOOT\Windows\system32\drivers”下
② 修改SRS.Win7.x86.AMD.reg文件
“SRS.Win7.x86.AMD”目录下的SRS.Win7.x86.AMD.reg文件需要添加进PE的注册表,但在添加之前需要修改。
使用记事本等软件打开SRS.Win7.x86.AMD.reg文件,如图:
查找字符串“[HKEY_LOCAL_MACHINE\SYSTEM“,并替换为”[HKEY_LOCAL_MACHINE\111“,保存文件。
运行注册表编辑器,参照3.2.2中修改注册表的步骤,加载F:\temp\BOOT\Windows\system32\system文件,并起名为“111”,双击修改后的SRS.Win7.x86.AMD.reg,将其合并到注册表。
3.5.1.3 对自由天空SRS驱动中的“SRS.Win7.x86.Intel”、“SRS.Win7.x86.Marvell”、“SRS.Win7.x86.nVIDIA”目录重复以上步骤,将其都添加至PE中。
3.5.2其它驱动程序的添加
对于其它驱动程序,基本都带有inf文件,可以参照WAIK帮助文件,直接使用drvload工具添加。
第4章 WinPE3.1的美化
所谓美化,主要是指为WinPE3.1添加个性化信息,并对WinPE3.1的外观(如壁纸、开始菜单等)做一些修改工作。顺便解释下,在写这章时,32位版本的PE已经制作完毕,正好在制作64位版本的PE,所以使用的图像是修改64位版PE的。但是两个版本的修改方法基本一样。
4.1 壁纸与用户头像
壁纸文件:F:\temp\boot\Windows\system32\winpe.bmp
用户头像文件:F:\temp\BOOT\ProgramData\Microsoft\User Account Pictures\user.bmp
可以使用相同格式的文件替换之。
PS:使用其他格式的图形文件会造成壁纸无法显示,原因不明。
4.2 开始菜单和桌面
控制开始菜单的显示项目:
\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced
桌面图标的显示:
\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons
可以根据3.22的步骤修改default文件来设置开始菜单和桌面。
4.3 OEM信息的修改
Win7pe的OEM信息无法按照正常方法修改,需要修改文件。使用ResHacker_3.5修改Windows\System32\zh-CN下的systemcpl.dll.mui文件,如下图
可以按照自己的信息修改,但是注意修改的行号。修改后在PE中应该如图显示:
4.4 计算机名称的修改
加载system文件,修改如下键值:
Controlset001\Control\ComputerName\ActiveComputerName\ComputerName
Controlset001\Control\ComputerName\ComputerName\ComputerName
Controlset001\Control\Session Manager\Environment\COMPUTERNAME
Controlset001\Services\Tcpip\Parameters\Hostname
Controlset001\Services\Tcpip\Parameters \NV Hostname
4.5 杂项修改
其它一些杂项的修改基本和修改win7注册表一样,网上有很多教程,就不多说了。
结语
磕磕绊绊的终于写完了这个教程,其实里面写的东西都是些基本知识,也肯定有许多不准确的地方。总体来说,制作PE并不需要具备多么高深的计算机知识,但是就我个人感受而言,耐心是必不可少的,甚至可以说耐心也是PE制作技术的一个重要组成。希望大家都能制作出自己满意的PE,毕竟别人的东西再好,也不见得适合自己,自己动手也是有无穷乐趣的。