|
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 编辑 ] |
|