找回密码
 加入
搜索
查看: 3986|回复: 6

[系统综合] AU3 能否實現 備份硬碟MBR 跟還原 硬碟的MBR ??

  [复制链接]
发表于 2010-6-21 13:26:10 | 显示全部楼层 |阅读模式
在網上找不到合適簡單的方法  可以備份硬碟的MBR 跟 還原硬碟的MBR..........

所以來這求救  各位前輩.....看看 AU3  可不可以寫出這個功能.......主要是想  備份 EAZ-FIX 所修改過的 MBR 資料.............打算做為還原系統使用....
发表于 2010-6-21 16:04:01 | 显示全部楼层
纯AU3读写硬盘扇区好象还没有什么好办法,调用外部程序吧,比如:dsptw,很好的命令行程序。
 楼主| 发表于 2010-6-22 00:23:27 | 显示全部楼层
回复 2# C.L

感謝提供方向  我研究看看嚕.....^^

對了 題外話....C.L 兄.....可否請教..... 怎麼讀取 二進制檔案  最後幾個字元??

會請教這個原因是..... 在一篇  限定安裝程式運行三次  就不準執行中....您提到  可以把次數回寫到本身程式裡面.....

然後 這也跟您最近發的UDF 檔  有點關係.....

我測試過  直接在DOS下  @echo 1 >> TEST.exe   就可以把這個小資訊 寫入到二進制後面。。。。不影響 程式執行。。。。如果用這個方法。。。。怎樣可以讀到最後的字元呢??
发表于 2010-6-22 08:35:37 | 显示全部楼层
本帖最后由 C.L 于 2010-6-22 08:37 编辑

回复 3# kk_lee69

要读取二进制文件最后的字元,有不同的方法,比如,1、你读取整个文件,而且从读取的数据中截取最后的字符,2、用fileread读取指定的字符,3、调用WinAPI的二进制方式读取

用echo 1 >> test.exe这个DOS命令,写入文件的不单是1的ASCII码,还有其他的不可见字符,如果你要读取1这个变量,提取后要经过字符处理才能使用。

给你写个例子用fileread ()方式读取echo 1 >> test.exe 写入文件的二进制数据
$filename = "test.exe"
RunWait(@ComSpec & ' /c echo 1 >> "'&$filename&'"', @ScriptDir, @SW_HIDE)
FileRead ($filename,FileGetSize($filename)-4);不返回数据,相当于设置文件指针
$fdata=FileRead ($filename,4);读取最后4个二进制字符

If $fdata == "1" Or $fdata == 1 Then 
        MsgBox (0,"","["&$fdata&"]")
Else
        MsgBox (0,"","$fdata 不等于1"&@CRLF& _
        "$fdata = ["&$fdata&"]"&@CRLF & _
        "echo 1 >> test.exe 写入文件的二制式是:"&StringToBinary ($fdata))
EndIf
 楼主| 发表于 2010-6-22 08:58:15 | 显示全部楼层
本帖最后由 kk_lee69 于 2010-6-22 09:58 编辑

回复 4# C.L

文件指針的部份 我大概了解意思  又學到一招....不過實際測試  好像 無法作用...

老是讀到開頭的四個字元.......而不是 最後的四個字元??

是我程式版本的問題嗎??

是不是 需要加上 FILEOPEN 函數呢??

另外 在請教....既然已經可以讀到.....那麼可以殺掉嗎??

是需要 利用 FileWrite  寫到另外的暫存檔... 然後再寫回來嗎??

還是有方法 可以直接寫入.....
发表于 2010-6-22 10:24:08 | 显示全部楼层
回复 5# kk_lee69

对不起,是我大意了,没说清楚,是需要先fileopen才行,设置指针要用到同一个文件的句柄

删除,用AU3我没找到可以直接删除的方法,我也是利用暂存文件再写回来的。

更改一下4#的代码吧
$filename = "test.exe"
RunWait(@ComSpec & ' /c echo 1 >> "'&$filename&'"', @ScriptDir, @SW_HIDE)
$file = FileOpen ($filename)
FileRead ($file,FileGetSize($filename)-4);不返回数据,相当于设置文件指针
$fdata=FileRead ($file,4);读取最后4个二进制字符
FileClose ($file)
If $fdata == "1" Or $fdata == 1 Then 
        MsgBox (0,"","["&$fdata&"]")
Else
        MsgBox (0,"","$fdata 不等于1"&@CRLF& _
        "$fdata = ["&$fdata&"]"&@CRLF & _
        "echo 1 >> test.exe 写入文件的二制式是:"&StringToBinary ($fdata))
EndIf
 楼主| 发表于 2010-6-22 11:04:52 | 显示全部楼层
回复 6# C.L

    感謝幫忙....學習了...C.L  真是個熱心人^^
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-20 17:10 , Processed in 0.098196 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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