分享

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

 温柔一哮 2011-03-23

打造自己的一键还原 (支持Win7,附源码) 不指定


最近安装了Win7系统,下了几种一键还原,总觉得有些功能不一定适合自己。

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

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

1.jpg


2.jpg



源码并附上一些代码的解释,让大家更容易理解,下载地址在最下面:
 

XML/HTML 代码复制内容到剪贴板
  1. #RequireAdmin  ;获取管理员权限   
  2. #Region ;**** 参数创建于 ACNWrapper_GUI ****   
  3. #AutoIt3Wrapper_icon=ANGEL.ICO   
  4. #AutoIt3Wrapper_outfile=一键还原.exe   
  5. #AutoIt3Wrapper_UseUpx=n  
  6. #AutoIt3Wrapper_Res_Description=一键还原   
  7. #AutoIt3Wrapper_Res_Fileversion=1.0.0.6   
  8. #AutoIt3Wrapper_Res_LegalCopyright=尘事如影   
  9. #EndRegion ;**** 参数创建于 ACNWrapper_GUI ****   
  10. #Region ;**** 参数创建于 AutoIt3Wrapper_GUI ****   
  11. #include <ButtonConstants.au3>  
  12. #include <EditConstants.au3>  
  13. #include <GUIConstantsEx.au3>  
  14. #include <StaticConstants.au3>  
  15. #include <WindowsConstants.au3>  
  16. #include <Process.au3>  
  17. Global $stp = 1  
  18. Global $Dll   
  19. DirCreate("C:\BOOT") ;创建还原所需要软件的目录   
  20. FileSetAttrib("C:\BOOT", "+H") ;隐藏目录   
  21. FileInstall("E:\SOFT\一键还原\还原附属软件\SkinCrafterDll.dll", "C:\BOOT\SkinCrafterDll.dll", 1)  ;透明皮肤插件,其中的地址为文件实际存放的位置。   
  22. FileInstall("E:\SOFT\一键还原\还原附属软件\vista_style.skf", "C:\BOOT\vista_style.skf", 1) ;透明皮肤插件,不要这种效果可以删这两句   
  23. GUICtrlSetFont(-1, 9, 800, 0, "新宋体")  ;显示的字体   
  24. $Form1 = GUICreate("恢复与备份系统", 450, 221, -1, -1) ;标题名,可以把引号内的名称改成自己喜欢的,打造成自己的专用软件。   
  25. _SkinGUI("C:\BOOT\SkinCrafterDll.dll", "C:\BOOT\vista_style.skf", $Form1) ;透明皮肤效果调用,不需要可删除   
  26. $Label1 = GUICtrlCreateLabel("", 40, 16, 400, 20)   
  27. ;GUICtrlSetFont(-1, 11, 600, 0, "楷体_GB2312")   
  28. GUICtrlSetFont(-1, 11, 800, 0, "新宋体")   
  29. $Label2 = GUICtrlCreateLabel("", 40, 36, 400, 20)   
  30. ;GUICtrlSetFont(-1, 11, 600, 0, "楷体_GB2312")   
  31. GUICtrlSetFont(-1, 11, 800, 0, "新宋体")   
  32. $Edit1 = GUICtrlCreateEdit("", 40, 40, 369, 129, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_READONLY, $ES_WANTRETURN, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL), 0)   
  33. GUICtrlSetData(-1, "Edit1")   
  34. GUICtrlCreateLabel("", 0, 178, 450, 1, $SS_SUNKEN)   
  35.   
  36. $Button1 = GUICtrlCreateButton("< 上一步[&B]", 200, 185, 70, 25, 0)   
  37. $Button2 = GUICtrlCreateButton("下一步[&N] >", 280, 185, 70, 25, 0)   
  38. $Button3 = GUICtrlCreateButton("移动[&M]", 360, 185, 70, 25, 0)   
  39. ;判断硬盘总共有几个分区   
  40. ;$var = DriveGetDrive("FIXED")   
  41. ;$dir = $var[$var[0]] & "\Sowind"   
  42. $dir = "D:\Sowind" ;设定在D盘创建备份文件存放的目录位置,这里要跟IMG里面的批处理配合,可根据实际需要改变。   
  43. GUISetState(@SW_SHOW)   
  44. step1(1)   
  45. While 1   
  46.         $nMsg = GUIGetMsg()   
  47.         Switch $nMsg   
  48.                 Case $GUI_EVENT_CLOSE   
  49.                         Exit   
  50.                 Case $Button1   
  51.                         Call("step" & $stp, 0)   
  52.                         $stp -1  
  53.                         Call("step" & $stp, 1)   
  54.                 Case $Button2   
  55.                         If GUICtrlRead($Button2) = "完成[&F]" Then   
  56.                                 If Not FileExists($dir) Then   
  57.                                         DirCreate($dir) ;创建备份的目录   
  58.                                 EndIf   
  59.                                 If Not FileExists("c:\boot") Then   
  60.                                         DirCreate("c:\boot");创建一键还原软件需要运行程序所在的目录   
  61.                                 EndIf   
  62.                                 If @OSVersion = "WIN_2000" Or @OSVersion = "WIN_2003" Or @OSVersion = "WIN_XP" Then;判断当前操作系统   
  63.                                         FileSetAttrib("c:\boot.ini", "-SHR");取消boot.ini只读跟隐藏属性   
  64.                                         FileCopy("c:\boot.ini", "c:\BOOT\boot.bak");备份boot.ini文件,以便出错时可以恢复   
  65.                                         IniWrite("c:\boot.ini", "boot loader", "timeout", "4");把菜单停留时间改为4秒   
  66.                                         ;IniWrite("c:\boot.ini", "boot loader", "default", "C:\grldr")   
  67.                                         IniWrite("c:\boot.ini", "operating systems", "C: \wrldr", '"恢复与备份系统"');加入“恢复与备份系统”菜单,wrldr为GRUB的引导程序,默认的应该是grldr,为了不跟其它的备 份软件冲突,所以改变了文件名,文件名的改变不是单纯的改一下名字就行,具体改变的方法请自己搜索。如果嫌麻烦,可以直接用附件所附带的。   
  68.                                         If Not FileExists($dir & "\我的文档") Then   
  69.                                                 RunWait(@ComSpec & " /c " & "IPCONFIG.EXE" & " > " & "本机IP.TXT", $dir, @SW_HIDE);备份本机的IP地址到备份目录,个人需要,可删除。   
  70.                                         EndIf   
  71.                                         ;目录及文件属性改回隐藏   
  72.                                         FileSetAttrib("c:\boot", "+RSH")   
  73.                                         FileSetAttrib("c:\boot.ini", "+RSH")   
  74.                                 EndIf   
  75.                                 If @OSVersion = "WIN_VISTA" Or @OSVersion = "WIN_7" Then;判断是否是vista及win7系统   
  76.                     FileInstall("E:\SOFT\一键还原\还原附属软件\mboot.cmd", "c:\boot\", 1);添加vista及win7系统专用的添加菜单批处理到c:\boot,附件里面附带。   
  77.                     _RunDos("c:\boot\mboot.cmd");运行vista及win7系统专用的添加菜单批处理   
  78.                                         If FileExists("C:\grldr.mbr") Then   
  79.                                                 FileSetAttrib("C:\grldr.mbr", "-RSH")   
  80.                                                 FileCopy("C:\grldr.mbr", "C:\boot\grldrmbr.bak")   
  81.                                         EndIf   
  82.                                         FileInstall("E:\SOFT\一键还原\还原附属软件\grldr.mbr", "C:\", 1);添加一键还原所需要的引导文件。   
  83.                                         FileSetAttrib("C:\grldr.mbr", "+RSH");文件属性隐藏   
  84.                                 EndIf   
  85.                                 FileInstall("E:\SOFT\一键还原\还原附属软件\wrldr", "c:\", 1);添加GRUB的引导程序到C盘根目录   
  86.                                 FileSetAttrib("c:\wrldr", "+RSH");文件属性隐藏   
  87.                                 FileInstall("E:\SOFT \一键还原\还原附属软件\BOOT\WTool.lst", "c:\BOOT\", 1);添加GRUB的菜单,GRUB的默认菜单名为 menu.lst,为不跟其它使用GRUB的软件冲突,这里改名为WTOOL.LST   
  88.                                 FileInstall("E:\SOFT\一键还原 \还原附属软件\BOOT\Backup.img", "c:\BOOT\", 1);一键还原调用的IMG镜像,就是调用里面的批处理执行备份或恢复, 想研究请自己用WINIMAGE工具打开。   
  89.                                 FileInstall("E:\SOFT\一键还原\还原附属软件\BOOT\rstmem.img", "c:\BOOT\", 1);DOS下的内存测试工具,个人需要,可删除   
  90.                                 FileInstall("E:\SOFT\一键还原 \还原附属软件\BOOT\Sowind.img", "c:\BOOT\", 1);DOS工具箱,个人整理的一些经常要用到的DOS小工具,可用自己 的替换掉   
  91.                                 FileInstall("E:\SOFT\一键还原\还原附属软件\BOOT\message", "c:\BOOT\", 1);菜单图形界面处理程序。   
  92.                                 Terminate();调用退出进程   
  93.                         EndIf   
  94.   
  95.                         Call("step" & $stp, 0)   
  96.                         $stp += 1   
  97.                         Call("step" & $stp, 1)   
  98.                 Case $Button3   
  99.                                                 ;移动桌面收藏夹我的文档这三个目录及文件到备份的目录,以便恢复的时候不会损伤到里面的数据,个人需要,可删除。   
  100.                         If GUICtrlRead($Button3) = "移动[&M]" Then   
  101.                                 DirCreate($dir) ;创建Sowind目录   
  102.                                 DirCreate($dir & "\桌面")   
  103.                                 DirCreate($dir & "\收藏夹")   
  104.                                 DirCreate($dir & "\我的文档")   
  105.                                 $d1 = @MyDocumentsDir   
  106.                                 $d2 = @FavoritesDir   
  107.                                 $d3 = @DesktopDir   
  108.                                 DirCopy($d1, $dir & "\我的文档", 1)   
  109.                                 DirCopy($d2, $dir & "\收藏夹", 1)   
  110.                                 DirCopy($d3, $dir & "\桌面", 1)   
  111.                                 ;注册表写入   
  112.                                 $r1 = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"  
  113.                                 $r2 = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"                                           
  114.                                 RegWrite($r1, "Desktop", "REG_SZ", $dir & "\桌面")   
  115.                                 RegWrite($r1, "Favorites", "REG_SZ", $dir & "\收藏夹")   
  116.                                 RegWrite($r1, "Personal", "REG_SZ", $dir & "\我的文档")   
  117.                                 RegWrite($r1, "My Pictures", "REG_SZ", $dir & "\我的文档\图片收藏")   
  118.                                 RegWrite($r1, "My Music", "REG_SZ", $dir & "\我的文档\我的音乐")   
  119.                                 RegWrite($r1, "My Video", "REG_SZ", $dir & "\我的文档\我的视频")   
  120.                                 RegWrite($r2, "Desktop", "REG_SZ", $dir & "\桌面")   
  121.                                 RegWrite($r2, "Favorites", "REG_SZ", $dir & "\收藏夹")   
  122.                                 RegWrite($r2, "Personal", "REG_SZ", $dir & "\我的文档")   
  123.                                 RegWrite($r2, "My Pictures", "REG_SZ", $dir & "\我的文档\图片收藏")   
  124.                                 RegWrite($r2, "My Music", "REG_SZ", $dir & "\我的文档\我的音乐")   
  125.                                 RegWrite($r2, "My Video", "REG_SZ", $dir & "\我的文档\我的视频")   
  126.                                 RunWait(@ComSpec & " /c " & "IPCONFIG.EXE" & " > " & "本机IP.TXT", $dir & "\我的文档", @SW_HIDE)   
  127.                                 MsgBox(0, " ", "所有文件已经转移完成,请重启!")   
  128.                         EndIf   
  129.   
  130.                         Call("step" & $stp, 0)   
  131.                         $stp += 1   
  132.                         Call("step" & $stp, 1)   
  133.   
  134.         EndSwitch   
  135. WEnd   
  136. Func step1($x)   
  137.         If $x = 1 Then   
  138.                 GUICtrlSetState($Button3, $gui_hide)   
  139.                 GUICtrlSetState($Button1, $gui_disable)   
  140.                 GUICtrlSetData($Label1, "欢迎安装恢复与备份系统程序,退出请直接关闭窗口")   
  141.                 GUICtrlSetData($Edit1, @CRLF & "软件说明:" & @CRLF & _   
  142.                                 @CRLF & "程序会自动判断系统类型,并在系统的启动项添加选择菜单。设定菜" & @CRLF & _   
  143.                                 @CRLF & "单停留时间为4秒,4秒内无选择,默认正常进入系统。第一次安装完" & @CRLF & _   
  144.                                 @CRLF & "请先备份系统,以后系统出问题了才能恢复。请不要删除备份的.WZS" & @CRLF & _   
  145.                                 @CRLF & "后缀的文件,否则会导致恢复系统失败。")   
  146.         Else   
  147.                 GUICtrlSetState($Button1, $gui_enable)   
  148.         EndIf   
  149. EndFunc   ;==>step1   
  150.   
  151. Func Step2($x)   
  152.         If $x = 1 Then   
  153.                 GUICtrlSetState($Button3, $gui_hide)   
  154.                 GUICtrlSetData($Label1, "欢迎安装恢复与备份系统程序,退出请直接关闭窗口")   
  155.                 GUICtrlSetData($Edit1, @CRLF & "以下是您的电脑配置信息:" & @CRLF & _   
  156.                                 @CRLF & "操作系 统:" & @OSVersion & "  " & @OSServicePack & "  内部版本 号: " & @OSBuild & @CRLF & _   
  157.                                 @CRLF & "计算机名称:" & @ComputerName & @CRLF & _   
  158.                                 @CRLF & "当前用户名:" & @UserName & @CRLF & _   
  159.                                 @CRLF & "第一块网卡的IP地址:" & @IPAddress1)   
  160.         Else   
  161.   
  162.         EndIf   
  163. EndFunc   ;==>Step2   
  164. Func step3($x)   
  165.         If $x = 1 Then   
  166.                 GUICtrlSetState($Button3, $gui_show)   
  167.                 GUICtrlSetData($Button3, "移动[&M]")   
  168.                 GUICtrlSetData($Label1, "是否移动<桌面、我的文档、收藏夹>到D盘")   
  169.                 GUICtrlSetData($Edit1, @CRLF & "如果选移动,则会自动复制<桌面、我的文档、收藏夹>目录下的文件" & @CRLF & _   
  170.                                 @CRLF & "到D盘,否则请选下一步跳过移动。如果选择移动,请根据文件大小" & @CRLF & _   
  171.                                 @CRLF & "的不同,来确定复制文件需要的时间,期间请不要重启或关机,否则" & @CRLF & _   
  172.                                 @CRLF & "可能造成数据丢失。请耐心等待程序操作完成,如果文件转移成功程" & @CRLF & _   
  173.                                 @CRLF & "序会提示转移完成,请注销或重启即可生效。")   
  174.         Else   
  175.                 GUICtrlSetState($Edit1, $gui_show)   
  176.                 GUICtrlSetState($Button3, $gui_hide)   
  177.         EndIf   
  178. EndFunc   ;==>step3   
  179. Func step4($x)   
  180.         If $x = 1 Then   
  181.                 GUICtrlSetState($Button1, $gui_hide)   
  182.                 GUICtrlSetState($Button3, $gui_hide)   
  183.                 GUICtrlSetData($Button2, "完成[&F]")   
  184.                 GUICtrlSetData($Label1, "程序安装结束,谢谢使用!")   
  185.                 GUICtrlSetData($Edit1, @CRLF & "版本:5.0" & _   
  186.                                 @CRLF & @CRLF & "作者: 尘事如影" & _   
  187.                                 @CRLF & @CRLF & "Mail:shadow0219@126.com" & _   
  188.                                 @CRLF & @CRLF & "日期:2009-08-21")   
  189.         Else   
  190.                 GUICtrlSetData($Button2, "下一步[&N] >")   
  191.         EndIf   
  192. EndFunc   ;==>step4   
  193. ;皮肤函数   
  194. Func _SkinGUI($SkincrafterDll, $SkincrafterSkin, $Handle)   
  195.         $Dll = DllOpen($SkincrafterDll)   
  196.         DllCall($Dll, "int:cdecl", "InitLicenKeys", "wstr", "1", "wstr", "", "wstr", "1@1.com", "wstr", "1")   
  197.         DllCall($Dll, "int:cdecl", "InitDecoration", "int", 1)   
  198.         DllCall($Dll, "int:cdecl", "LoadSkinFromFile", "wstr", $SkincrafterSkin)   
  199.         DllCall($Dll, "int:cdecl", "DecorateAs", "int", $Handle, "int", 25)   
  200.         DllCall($Dll, "int:cdecl", "ApplySkin")   
  201. EndFunc   ;==>_SkinGUI   
  202. ;退出   
  203. Func Terminate()   
  204.         GUISetState(@SW_HIDE)   
  205.         DllCall($Dll, "int:cdecl", "DeInitDecoration")   
  206.         DllCall($Dll, "int:cdecl", "RemoveSkin")   
  207.         DllClose($Dll)   
  208.         SplashOff()   
  209.         DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $Form1, "int", 700, "long", 0x00010010)   
  210.         FileDelete("C:\BOOT\vista_style.skf")   
  211.         FileDelete("C:\BOOT\SkinCrafterDll.dll")   
  212.         Exit   
  213. EndFunc   ;==>Terminate  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约