bao423 发表于 2010-5-11 14:02:20

打造自己的一键还原 (支持Win7,附源码)[转贴]

1月24号利用时空C大的Ghostid功能新做了一个一键还原,支持最前面分区是隐藏分区,可选择备份文件存放的分区,可限制只能恢复不能备份,大家有兴趣玩玩。

最近安装了Win7系统,闲着无聊,做了一个一键还原,用着还觉得凑和,至少可以根据自己的要求来调整所需要的功能。

特此把源码发出来给大家参考一下,让人人都可以打造一个适合自己的一键还原工具。好了说了那么多废话,下面是 AU3 源码。

http://sky123.org/images/default/attachimg.gif http://sky123.org/attachments/month_0910/0910181228f3f8b699efd55e11.jpg

http://sky123.org/attachments/month_0910/0910181228e27c4fec15b38f6c.jpg


[*]#RequireAdmin;获取管理员权限
[*]#Region ;**** 参数创建于 ACNWrapper_GUI ****
[*]#AutoIt3Wrapper_icon=ANGEL.ICO
[*]#AutoIt3Wrapper_outfile=一键还原.exe
[*]#AutoIt3Wrapper_UseUpx=n
[*]#AutoIt3Wrapper_Res_Description=一键还原
[*]#AutoIt3Wrapper_Res_Fileversion=1.0.0.6
[*]#AutoIt3Wrapper_Res_LegalCopyright=尘事如影
[*]#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
[*]#Region ;**** 参数创建于 AutoIt3Wrapper_GUI ****
[*]#include <ButtonConstants.au3>
[*]#include <EditConstants.au3>
[*]#include <GUIConstantsEx.au3>
[*]#include <StaticConstants.au3>
[*]#include <WindowsConstants.au3>
[*]#include <Process.au3>
[*]Global $stp = 1
[*]Global $Dll
[*]DirCreate("C:\BOOT") ;创建还原所需要软件的目录
[*]FileSetAttrib("C:\BOOT", "+H") ;隐藏目录
[*]FileInstall("E:\SOFT\一键还原\还原附属软件\SkinCrafterDll.dll", "C:\BOOT\SkinCrafterDll.dll", 1);透明皮肤插件,其中的地址为文件实际存放的位置。
[*]FileInstall("E:\SOFT\一键还原\还原附属软件\vista_style.skf", "C:\BOOT\vista_style.skf", 1) ;透明皮肤插件,不要这种效果可以删这两句
[*]GUICtrlSetFont(-1, 9, 800, 0, "新宋体");显示的字体
[*]$Form1 = GUICreate("恢复与备份系统", 450, 221, -1, -1) ;标题名,可以把引号内的名称改成自己喜欢的,打造成自己的专用软件。
[*]_SkinGUI("C:\BOOT\SkinCrafterDll.dll", "C:\BOOT\vista_style.skf", $Form1) ;透明皮肤效果调用,不需要可删除
[*]$Label1 = GUICtrlCreateLabel("", 40, 16, 400, 20)
[*];GUICtrlSetFont(-1, 11, 600, 0, "楷体_GB2312")
[*]GUICtrlSetFont(-1, 11, 800, 0, "新宋体")
[*]$Label2 = GUICtrlCreateLabel("", 40, 36, 400, 20)
[*];GUICtrlSetFont(-1, 11, 600, 0, "楷体_GB2312")
[*]GUICtrlSetFont(-1, 11, 800, 0, "新宋体")
[*]$Edit1 = GUICtrlCreateEdit("", 40, 40, 369, 129, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_READONLY, $ES_WANTRETURN, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL), 0)
[*]GUICtrlSetData(-1, "Edit1")
[*]GUICtrlCreateLabel("", 0, 178, 450, 1, $SS_SUNKEN)
[*]
[*]$Button1 = GUICtrlCreateButton("< 上一步[&B]", 200, 185, 70, 25, 0)
[*]$Button2 = GUICtrlCreateButton("下一步[&N] >", 280, 185, 70, 25, 0)
[*]$Button3 = GUICtrlCreateButton("移动[&M]", 360, 185, 70, 25, 0)
[*];判断硬盘总共有几个分区
[*];$var = DriveGetDrive("FIXED")
[*];$dir = $var[$var] & "\Sowind"
[*]$dir = "D:\Sowind" ;设定在D盘创建备份文件存放的目录位置,这里要跟IMG里面的批处理配合,可根据实际需要改变。
[*]GUISetState(@SW_SHOW)
[*]step1(1)
[*]While 1
[*]      $nMsg = GUIGetMsg()
[*]      Switch $nMsg
[*]                Case $GUI_EVENT_CLOSE
[*]                        Exit
[*]                Case $Button1
[*]                        Call("step" & $stp, 0)
[*]                        $stp -= 1
[*]                        Call("step" & $stp, 1)
[*]                Case $Button2
[*]                        If GUICtrlRead($Button2) = "完成[&F]" Then
[*]                              If Not FileExists($dir) Then
[*]                                        DirCreate($dir) ;创建备份的目录
[*]                              EndIf
[*]                              If Not FileExists("c:\boot") Then
[*]                                        DirCreate("c:\boot");创建一键还原软件需要运行程序所在的目录
[*]                              EndIf
[*]                              If @OSVersion = "WIN_2000" Or @OSVersion = "WIN_2003" Or @OSVersion = "WIN_XP" Then;判断当前操作系统
[*]                                        FileSetAttrib("c:\boot.ini", "-SHR");取消boot.ini只读跟隐藏属性
[*]                                        FileCopy("c:\boot.ini", "c:\BOOT\boot.bak");备份boot.ini文件,以便出错时可以恢复
[*]                                        IniWrite("c:\boot.ini", "boot loader", "timeout", "4");把菜单停留时间改为4秒
[*]                                        ;IniWrite("c:\boot.ini", "boot loader", "default", "C:\grldr")
[*]                                        IniWrite("c:\boot.ini", "operating systems", "C:\wrldr", '"恢复与备份系统"');加入“恢复与备份系统”菜单,wrldr为GRUB的引导程序,默认的应该是grldr,为了不跟其它的备份软件冲突,所以改变了文件名,文件名的改变不是单纯的改一下名字就行,具体改变的方法请自己搜索。如果嫌麻烦,可以直接用附件所附带的。
[*]                                        If Not FileExists($dir & "\我的文档") Then
[*]                                                RunWait(@ComSpec & " /c " & "IPCONFIG.EXE" & " > " & "本机IP.TXT", $dir, @SW_HIDE);备份本机的IP地址到备份目录,个人需要,可删除。
[*]                                        EndIf
[*]                                        ;目录及文件属性改回隐藏
[*]                                        FileSetAttrib("c:\boot", "+RSH")
[*]                                        FileSetAttrib("c:\boot.ini", "+RSH")
[*]                              EndIf
[*]                              If @OSVersion = "WIN_VISTA" Or @OSVersion = "WIN_7" Then;判断是否是vista及win7系统
[*]                  FileInstall("E:\SOFT\一键还原\还原附属软件\mboot.cmd", "c:\boot\", 1);添加vista及win7系统专用的添加菜单批处理到c:\boot,附件里面附带。
[*]                  _RunDos("c:\boot\mboot.cmd");运行vista及win7系统专用的添加菜单批处理
[*]                                        If FileExists("C:\grldr.mbr") Then
[*]                                                FileSetAttrib("C:\grldr.mbr", "-RSH")
[*]                                                FileCopy("C:\grldr.mbr", "C:\boot\grldrmbr.bak")
[*]                                        EndIf
[*]                                        FileInstall("E:\SOFT\一键还原\还原附属软件\grldr.mbr", "C:\", 1);添加一键还原所需要的引导文件。
[*]                                        FileSetAttrib("C:\grldr.mbr", "+RSH");文件属性隐藏
[*]                              EndIf
[*]                              FileInstall("E:\SOFT\一键还原\还原附属软件\wrldr", "c:\", 1);添加GRUB的引导程序到C盘根目录
[*]                              FileSetAttrib("c:\wrldr", "+RSH");文件属性隐藏
[*]                              FileInstall("E:\SOFT\一键还原\还原附属软件\BOOT\WTool.lst", "c:\BOOT\", 1);添加GRUB的菜单,GRUB的默认菜单名为menu.lst,为不跟其它使用GRUB的软件冲突,这里改名为WTOOL.LST
[*]                              FileInstall("E:\SOFT\一键还原\还原附属软件\BOOT\Backup.img", "c:\BOOT\", 1);一键还原调用的IMG镜像,就是调用里面的批处理执行备份或恢复,想研究请自己用WINIMAGE工具打开。
[*]                              FileInstall("E:\SOFT\一键还原\还原附属软件\BOOT\rstmem.img", "c:\BOOT\", 1);DOS下的内存测试工具,个人需要,可删除
[*]                              FileInstall("E:\SOFT\一键还原\还原附属软件\BOOT\Sowind.img", "c:\BOOT\", 1);DOS工具箱,个人整理的一些经常要用到的DOS小工具,可用自己的替换掉
[*]                              FileInstall("E:\SOFT\一键还原\还原附属软件\BOOT\message", "c:\BOOT\", 1);菜单图形界面处理程序。
[*]                              Terminate();调用退出进程
[*]                        EndIf
[*]
[*]                        Call("step" & $stp, 0)
[*]                        $stp += 1
[*]                        Call("step" & $stp, 1)
[*]                Case $Button3
[*]                                                ;移动桌面收藏夹我的文档这三个目录及文件到备份的目录,以便恢复的时候不会损伤到里面的数据,个人需要,可删除。
[*]                        If GUICtrlRead($Button3) = "移动[&M]" Then
[*]                              DirCreate($dir) ;创建Sowind目录
[*]                              DirCreate($dir & "\桌面")
[*]                              DirCreate($dir & "\收藏夹")
[*]                              DirCreate($dir & "\我的文档")
[*]                              $d1 = @MyDocumentsDir
[*]                              $d2 = @FavoritesDir
[*]                              $d3 = @DesktopDir
[*]                              DirCopy($d1, $dir & "\我的文档", 1)
[*]                              DirCopy($d2, $dir & "\收藏夹", 1)
[*]                              DirCopy($d3, $dir & "\桌面", 1)
[*]                              ;注册表写入
[*]                              $r1 = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
[*]                              $r2 = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"                                       
[*]                              RegWrite($r1, "Desktop", "REG_SZ", $dir & "\桌面")
[*]                              RegWrite($r1, "Favorites", "REG_SZ", $dir & "\收藏夹")
[*]                              RegWrite($r1, "Personal", "REG_SZ", $dir & "\我的文档")
[*]                              RegWrite($r1, "My Pictures", "REG_SZ", $dir & "\我的文档\图片收藏")
[*]                              RegWrite($r1, "My Music", "REG_SZ", $dir & "\我的文档\我的音乐")
[*]                              RegWrite($r1, "My Video", "REG_SZ", $dir & "\我的文档\我的视频")
[*]                              RegWrite($r2, "Desktop", "REG_SZ", $dir & "\桌面")
[*]                              RegWrite($r2, "Favorites", "REG_SZ", $dir & "\收藏夹")
[*]                              RegWrite($r2, "Personal", "REG_SZ", $dir & "\我的文档")
[*]                              RegWrite($r2, "My Pictures", "REG_SZ", $dir & "\我的文档\图片收藏")
[*]                              RegWrite($r2, "My Music", "REG_SZ", $dir & "\我的文档\我的音乐")
[*]                              RegWrite($r2, "My Video", "REG_SZ", $dir & "\我的文档\我的视频")
[*]                              RunWait(@ComSpec & " /c " & "IPCONFIG.EXE" & " > " & "本机IP.TXT", $dir & "\我的文档", @SW_HIDE)
[*]                              MsgBox(0, " ", "所有文件已经转移完成,请重启!")
[*]                        EndIf
[*]
[*]                        Call("step" & $stp, 0)
[*]                        $stp += 1
[*]                        Call("step" & $stp, 1)
[*]
[*]      EndSwitch
[*]WEnd
[*]Func step1($x)
[*]      If $x = 1 Then
[*]                GUICtrlSetState($Button3, $gui_hide)
[*]                GUICtrlSetState($Button1, $gui_disable)
[*]                GUICtrlSetData($Label1, "欢迎安装恢复与备份系统程序,退出请直接关闭窗口")
[*]                GUICtrlSetData($Edit1, @CRLF & "软件说明:" & @CRLF & _
[*]                              @CRLF & "程序会自动判断系统类型,并在系统的启动项添加选择菜单。设定菜" & @CRLF & _
[*]                              @CRLF & "单停留时间为4秒,4秒内无选择,默认正常进入系统。第一次安装完" & @CRLF & _
[*]                              @CRLF & "请先备份系统,以后系统出问题了才能恢复。请不要删除备份的.WZS" & @CRLF & _
[*]                              @CRLF & "后缀的文件,否则会导致恢复系统失败。")
[*]      Else
[*]                GUICtrlSetState($Button1, $gui_enable)
[*]      EndIf
[*]EndFunc   ;==>step1
[*]
[*]Func Step2($x)
[*]      If $x = 1 Then
[*]                GUICtrlSetState($Button3, $gui_hide)
[*]                GUICtrlSetData($Label1, "欢迎安装恢复与备份系统程序,退出请直接关闭窗口")
[*]                GUICtrlSetData($Edit1, @CRLF & "以下是您的电脑配置信息:" & @CRLF & _
[*]                              @CRLF & "操作系统:" & @OSVersion & "" & @OSServicePack & "内部版本号: " & @OSBuild & @CRLF & _
[*]                              @CRLF & "计算机名称:" & @ComputerName & @CRLF & _
[*]                              @CRLF & "当前用户名:" & @UserName & @CRLF & _
[*]                              @CRLF & "第一块网卡的IP地址:" & @IPAddress1)
[*]      Else
[*]
[*]      EndIf
[*]EndFunc   ;==>Step2
[*]Func step3($x)
[*]      If $x = 1 Then
[*]                GUICtrlSetState($Button3, $gui_show)
[*]                GUICtrlSetData($Button3, "移动[&M]")
[*]                GUICtrlSetData($Label1, "是否移动<桌面、我的文档、收藏夹>到D盘")
[*]                GUICtrlSetData($Edit1, @CRLF & "如果选移动,则会自动复制<桌面、我的文档、收藏夹>目录下的文件" & @CRLF & _
[*]                              @CRLF & "到D盘,否则请选下一步跳过移动。如果选择移动,请根据文件大小" & @CRLF & _
[*]                              @CRLF & "的不同,来确定复制文件需要的时间,期间请不要重启或关机,否则" & @CRLF & _
[*]                              @CRLF & "可能造成数据丢失。请耐心等待程序操作完成,如果文件转移成功程" & @CRLF & _
[*]                              @CRLF & "序会提示转移完成,请注销或重启即可生效。")
[*]      Else
[*]                GUICtrlSetState($Edit1, $gui_show)
[*]                GUICtrlSetState($Button3, $gui_hide)
[*]      EndIf
[*]EndFunc   ;==>step3
[*]Func step4($x)
[*]      If $x = 1 Then
[*]                GUICtrlSetState($Button1, $gui_hide)
[*]                GUICtrlSetState($Button3, $gui_hide)
[*]                GUICtrlSetData($Button2, "完成[&F]")
[*]                GUICtrlSetData($Label1, "程序安装结束,谢谢使用!")
[*]                GUICtrlSetData($Edit1, @CRLF & "版本:5.0" & _
[*]                              @CRLF & @CRLF & "作者: 尘事如影" & _
[*]                              @CRLF & @CRLF & "Mail:shadow0219@126.com" & _
[*]                              @CRLF & @CRLF & "日期:2009-08-21")
[*]      Else
[*]                GUICtrlSetData($Button2, "下一步[&N] >")
[*]      EndIf
[*]EndFunc   ;==>step4
[*];皮肤函数
[*]Func _SkinGUI($SkincrafterDll, $SkincrafterSkin, $Handle)
[*]      $Dll = DllOpen($SkincrafterDll)
[*]      DllCall($Dll, "int:cdecl", "InitLicenKeys", "wstr", "1", "wstr", "", "wstr", "1@1.com", "wstr", "1")
[*]      DllCall($Dll, "int:cdecl", "InitDecoration", "int", 1)
[*]      DllCall($Dll, "int:cdecl", "LoadSkinFromFile", "wstr", $SkincrafterSkin)
[*]      DllCall($Dll, "int:cdecl", "DecorateAs", "int", $Handle, "int", 25)
[*]      DllCall($Dll, "int:cdecl", "ApplySkin")
[*]EndFunc   ;==>_SkinGUI
[*];退出
[*]Func Terminate()
[*]      GUISetState(@SW_HIDE)
[*]      DllCall($Dll, "int:cdecl", "DeInitDecoration")
[*]      DllCall($Dll, "int:cdecl", "RemoveSkin")
[*]      DllClose($Dll)
[*]      SplashOff()
[*]      DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $Form1, "int", 700, "long", 0x00010010)
[*]      FileDelete("C:\BOOT\vista_style.skf")
[*]      FileDelete("C:\BOOT\SkinCrafterDll.dll")
[*]      Exit
[*]EndFunc   ;==>Terminate
源码需要的附带文件:
http://www.rayfile.com/zh-cn/files/de9ad9f8-bb9f-11de-8165-0014221b798a/
利用时空C大的Ghostid功能新做了一个一键还原,支持前面有隐藏分区,可选择备份文件存放的分区,可限制只能恢复不能备份:
http://u.115.com/file/f1e8177f85
一键还原PE版.rar

http://u.115.com/file/f1dc9fbc26
一键还原6.0.rar

http://sky123.org/images/attachicons/rar.gif 一键还原源码带PE版本.rar (6.42 KB)

[ 本帖最后由 bao423 于 2010-5-17 10:34 编辑 ]

假大空 发表于 2010-5-11 18:42:01

楼主厉害啊。支持下。稳定始终是第一位的

chuchangfeng 发表于 2010-5-11 21:38:54

支持 尽管我还看不懂

yang162 发表于 2010-5-12 10:08:51

楼主厉害啊。支持下。稳定始终是第一位的
希望是如此

jszforms 发表于 2010-5-12 12:57:19

支持开放源代码,这样的人越来越少了

langzicong 发表于 2010-5-14 22:45:07

支持楼主这种无私奉献的精神
现在楼主这样的好人已经不常见了

chenbaker 发表于 2010-5-16 00:06:37

挣天空的钱,挣到这里来了,有创意,学习一下

小松鼠 发表于 2010-5-16 14:41:20

一键还原PE版.rar
一键还原PE版.rar
这两个个有什么区别?

huisheng 发表于 2010-5-16 22:14:16

兄弟,你改过的源码和附件能提供一下吗,谢谢

bao423 发表于 2010-5-17 10:37:38

回复 #10 huisheng 的帖子

先声明一下,这并非本人作品,源码我传到附件了,请查看!

bao423 发表于 2010-5-17 10:40:40

回复 #8 chenbaker 的帖子

我已说明了转贴,转发到无忧只是希望大家多多交流,传播一下好的作品,并无它意!

bao423 发表于 2010-5-17 10:44:58

回复 #9 小松鼠 的帖子

两者的区别在于,前者可以备份恢复,后者限制只能恢复不能备份。

左卿候 发表于 2010-5-17 16:15:10

这个顶一下,必须的,学习。

huisheng 发表于 2010-5-17 22:38:09

原帖由 bao423 于 2010-5-17 10:37 发表 http://bbs.wuyou.net/images/common/back.gif
先声明一下,这并非本人作品,源码我传到附件了,请查看!
我知道兄弟这不是你的作品,改进的不错,但你改的源码和附件能提供一下吗,(支持前隐藏分区和可选择备份分区的源码和附件)

huisheng 发表于 2010-5-17 22:43:49

不好意思兄弟,好久不去天空转了,原来是天空更新了,谢谢

yulechow 发表于 2010-5-19 12:02:33

虽然是转的 不过也还是很好的

cartoonsky 发表于 2010-5-24 15:11:42

工具不错,但做个卸载选项比较好,不然不方便~~~~~~

wangyihuan 发表于 2011-3-8 18:47:54

楼主的奉献精神可嘉啊,这样的帖子太难得了,尽管像这样的小白看不懂,但能见到这样的帖子有无比的高兴。谢谢分享

woo88 发表于 2011-3-12 21:14:55

支持,下载个研究研究

dawnstar 发表于 2015-2-27 10:22:12

谢谢

chenkangwei 发表于 2015-3-5 11:29:01

{:soso_e143:}支持就是看不懂

qufuxiaozi 发表于 2015-10-15 20:46:10

顶一个
页: [1]
查看完整版本: 打造自己的一键还原 (支持Win7,附源码)[转贴]