无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 13291|回复: 21
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2010-5-11 14:02:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1月24号利用时空C大的Ghostid功能新做了一个一键还原,支持最前面分区是隐藏分区,可选择备份文件存放的分区,可限制只能恢复不能备份,大家有兴趣玩玩。

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

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






  • #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[0]] & "\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

一键还原源码带PE版本.rar (6.42 KB)


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

一键还原源码带PE版本.rar

6.42 KB, 下载次数: 715, 下载积分: 无忧币 -2

2#
发表于 2010-5-11 18:42:01 | 只看该作者
楼主厉害啊。支持下。稳定始终是第一位的
回复

使用道具 举报

3#
发表于 2010-5-11 21:38:54 | 只看该作者
支持 尽管我还看不懂
回复

使用道具 举报

4#
发表于 2010-5-12 10:08:51 | 只看该作者
楼主厉害啊。支持下。稳定始终是第一位的
希望是如此
回复

使用道具 举报

5#
发表于 2010-5-12 12:57:19 | 只看该作者
支持开放源代码,这样的人越来越少了
回复

使用道具 举报

6#
发表于 2010-5-14 22:45:07 | 只看该作者
支持楼主这种无私奉献的精神
现在楼主这样的好人已经不常见了
回复

使用道具 举报

7#
发表于 2010-5-16 00:06:37 | 只看该作者
挣天空的钱,挣到这里来了,有创意,学习一下
回复

使用道具 举报

8#
发表于 2010-5-16 14:41:20 | 只看该作者
一键还原PE版.rar
一键还原PE版.rar
这两个个有什么区别?
回复

使用道具 举报

9#
发表于 2010-5-16 22:14:16 | 只看该作者
兄弟,你改过的源码和附件能提供一下吗,谢谢
回复

使用道具 举报

10#
 楼主| 发表于 2010-5-17 10:37:38 | 只看该作者

回复 #10 huisheng 的帖子

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

使用道具 举报

11#
 楼主| 发表于 2010-5-17 10:40:40 | 只看该作者

回复 #8 chenbaker 的帖子

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

使用道具 举报

12#
 楼主| 发表于 2010-5-17 10:44:58 | 只看该作者

回复 #9 小松鼠 的帖子

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

使用道具 举报

13#
发表于 2010-5-17 16:15:10 | 只看该作者
这个顶一下,必须的,学习。
回复

使用道具 举报

14#
发表于 2010-5-17 22:38:09 | 只看该作者
原帖由 bao423 于 2010-5-17 10:37 发表
先声明一下,这并非本人作品,源码我传到附件了,请查看!

我知道兄弟这不是你的作品,改进的不错,但你改的源码和附件能提供一下吗,(支持前隐藏分区和可选择备份分区的源码和附件)
回复

使用道具 举报

15#
发表于 2010-5-17 22:43:49 | 只看该作者
不好意思兄弟,好久不去天空转了,原来是天空更新了,谢谢
回复

使用道具 举报

16#
发表于 2010-5-19 12:02:33 | 只看该作者
虽然是转的 不过也还是很好的
回复

使用道具 举报

17#
发表于 2010-5-24 15:11:42 | 只看该作者
工具不错,但做个卸载选项比较好,不然不方便~~~~~~
回复

使用道具 举报

18#
发表于 2011-3-8 18:47:54 | 只看该作者
楼主的奉献精神可嘉啊,这样的帖子太难得了,尽管像这样的小白看不懂,但能见到这样的帖子有无比的高兴。谢谢分享
回复

使用道具 举报

19#
发表于 2011-3-12 21:14:55 | 只看该作者
支持,下载个研究研究
回复

使用道具 举报

20#
发表于 2015-2-27 10:22:12 来自手机 | 只看该作者
谢谢
回复

使用道具 举报

21#
发表于 2015-3-5 11:29:01 | 只看该作者
{:soso_e143:}支持  就是看不懂
回复

使用道具 举报

22#
发表于 2015-10-15 20:46:10 | 只看该作者
顶一个
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-29 16:29

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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