[函式] UninstallDir (徹底刪除資料夾) 2008-06-30 00:05:09 這是在移除過程最常用到的 AutoIt 函式。 MoveFileEx 是 Windows 的一個 API,可將無法刪除的檔案記錄在登錄檔中的 PendingFileRenameOperations 鍵,等待重新開機後清除。但此 API 只在 Windows NT 支援,所以 Win98 只好土法練鋼,透過編輯 wininit.ini 檔來達到開機時清除。 UninstallDir 就是用遞迴來刪除資料夾中的每個檔案。 Func MoveFileEx($Path) If @OSType = "WIN32_NT" Then DllCall("kernel32.dll", "int", "MoveFileEx", "str", $Path, "int", 0, "int", 4) Else $Path = FileGetShortName($Path) $NULStr = "NUL=" If StringInStr(FileGetAttrib($Path), "D") Then $NULStr = "DIRNUL=" Local $IniFile = @WindowsDir & "\wininit.ini" Local $Wininit = FileRead($IniFile) & " " If @Error Then FileWrite($IniFile, "[rename]" & @CRLF & $NULStr & $Path & @CRLF) Else Local $Pos, $E $Pos = StringInStr($Wininit, "[rename]") If $Pos = 0 Then FileWrite($IniFile, @CRLF & "[rename]" & @CRLF & $NULStr & $Path & @CRLF) Else $Pos = StringRegExp($Wininit, "(?i)\[rename\].*?\#(\r\n)+(\[| )", 1) $E = @Extended FileDelete($IniFile) If $E Then FileWrite($IniFile, StringTrimRight(StringLeft($Wininit, $Pos[0]) & @CRLF & $NULStr & $Path & StringTrimLeft($Wininit, $Pos[0]), 1)) Else FileWrite($IniFile, StringReplace($Wininit, "[rename]", "[rename]" & @CRLF & $NULStr & $Path & @CRLF, 1)) EndIf EndIf EndIf EndIf EndFunc Func UninstallDir($Dir) Local $Find = FileFindFirstFile($Dir & "\*.*") If $Find <> -1 Then While 1 Local $File = FileFindNextFile($Find) If @Error Then ExitLoop Local $Path = $Dir & "\" & $File FileSetAttrib($Path, "-RSH") If StringInStr(FileGetAttrib($Path), "D") Then UninstallDir($Path) Else If FileDelete($Path) = 0 Then MoveFileEx($Path) EndIf WEnd EndIf FileClose($Find) If DirRemove($Dir, 1) = 0 Then MoveFileEx($Dir) EndFunc http://space.uwants.com/index.php/uid-3338933-action-spacelist-type-blog-itemtypeid-22351 回 · 發現好東西 autoit 這一篇文章封面 |
本站公告:〔您越需要我們,我們就越有創意〕 | 本站說明書:〔發現故鄉還有改進的地方,請來信告訴原丁們〕 |
觀察應用學習點數 :〔咱的故鄉有您的參與,會使我們有更大的發揮空間,展現更豐富精彩的學習畫面〕 | 〔期待藉由無障礙網頁設計,能讓視障小朋友更愛看書、更愛寫作且更愛學習〕:盲用電腦「心得分享」 |