====== Löschroutine ====== \\ Ist ein Skript in FixFoto aktiviert, will man dieses möglicherweise wieder entfernen, z.B. wenn man ein Skript nur mal testen will.\\ Skriptarchive können sehr unterschiedlich benannt werden und beim Entpacken des Archivs oder bei Anwendung des Skripts werden möglicherweise zusätzliche Dateien und Ordner im FF-Skriptverzeichnis abgelegt. Außerdem legt ein Skript eventuell Daten in der Registry des Betriebssystems ab. Was genau geschieht, weiß nur der Skriptautor und der sollte daher in seinem Skript eine Löschroutine einbauen, mit der auf Wunsch alle Komponenten des Skripts restlos entfernt werden können.\\ \\ ===== VBS-Beispiel für eine Löschroutine (grün > individuelle Anpassung erforderlich) ===== ==== Definitionen (jeweils prüfen ob evtl. schon vorhanden) ==== Der Skriptname muss abgelegt werden,\\ **const SkriptName = "Beispiel.vbs"**\\ die folgenden Objekte sind anzulegen,\\ **Dim objFS**\\ **Set objFS = CreateObject("Scripting.FileSystemObject")**\\ **Dim WshShell**\\ **Set WshShell = CreateObject("WScript.Shell")**\\ die Lese-Konstante ist erforderlich,\\ **const ForReading = 1**\\ drei Variable sind notwendig\\ **Dim Antwort, Abbruch, TempFile**\\ **Abbruch = false**\\ und eine Konstante wird definiert, die beim Aufruf der Löschroutine auf true gesetzt wird\\ **Dim SkriptKill**\\ **SkriptKill = false**\\ \\ ==== Aufruf und Durchführung ==== Als erstes muss festgelegt werden, wie die Löschroutine vom Anwender aufgerufen werden soll. Da der Aufruf möglichst versteckt und nicht unbeabsichtigt erfolgen soll, wurde hier die Tastenkombination **Alt** + **d** festgelegt. Realisierbar ist dieser Aufruf aber nur, wenn das Skript bei Aufruf einen Dialog anzeigt. In diesem Dialog wird ein BUTTON-Steuerfeld integriert mit der Benennung **&d**. Das vorgestellte **&** bewirkt, dass der Button mit der genannten Tastenkombination aktiviert werden kann. Damit das Steuerfeld unsichtbar ist, wird ihm die Größe 1 x 1 zugewiesen.\\ **FF_AddControl Dialog,"&d","BUTTON",40,170,1,1**\\ Um sicher zu stellen, dass der Aufruf direkt erfolgen kann, wird außerdem der Fokus auf den Button gesetzt mit dem Befehl\\ **FF_ActivateControl Dialog,"&d"**\\ In der Abrufschleife erfolgt bei Erkennung von **&d** eine Sicherheitsabfrage. Wird diese bejaht, wird die Löschroutine aufgerufen.\\ \\ '### Definitionen ( siehe oben) '### Dialog mit &d-Schaltfläche call main '--------------------------------------------------------------- Sub main do Select Case FF_ShowDialog (Dialog) Case "&d" Antwort = msgbox("Soll das Skript " & SkriptName & vbNewline & _ " mit allen dazugehörigen Komponenten wirklich gelöscht werden?", _ vbYesNo + vbQuestion,"Sicherheitsabfrage") if Antwort = vbYes then SkriptKill = true exit do end if Case "CANCEL" exit do Case Else End Select loop FF_CloseDialog (Dialog) if SkriptKill then call KillSkript 'ggf. Skript komplett entfernen End Sub '--------------------------------------------------------------- Sub KillSkript 'Skript mit allen Komponenten entfernen Dim Spfad const RegSchluessel = "\FF_Beispiel\" '### FixFotoScript.ini bereinigen TempFile = FF_GetFFPathEx(1) & "\FixFotoScript.ini" if objFS.FileExists(TempFile) then call IniBereinigung if Abbruch then exit sub else msgbox "Die Datei FixFotoScript.ini konnte nicht gefunden werden." & vbNewLine & _ "Der Löschvorgang wird abgebrochen!",vbExclamation,"Hinweis" exit sub end if '### zip-Archiv auf Wunsch sichern, dann löschen TempFile = FF_GetScriptPath & "\" & objFS.GetBaseName(Skriptname) & ".zip" 'wenn das Archiv einen anderen Namen als das Skript hat, muss das hier berücksichtigt werden!!! if objFS.FileExists(TempFile) then Antwort = msgbox("Soll das Archiv " & objFS.GetBaseName(Skriptname) & ".zip" & _ " gesichert werden?",vbYesNo + vbQuestion,"Sicherheitskopie") if Antwort = vbYes then SPfad = FF_EnterPath(true,"Wo soll die Sicherheitskopie angelegt werden?") if SPfad = "" then msgbox "Das Löschen des Skripts wird abgebrochen!",vbExclamation,"Hinweis" exit sub end if SPfad = SPfad & "\" & objFS.GetBaseName(Skriptname) & ".zip" objFS.CopyFile Tempfile, SPfad, true end if objFS.DeleteFile TempFile,true end if '### Skriptdatei löschen TempFile = FF_GetScriptPath & "\" & Skriptname objFS.DeleteFile TempFile,true '### evtl. beigepackte bzw. erzeugte Dateien und Ordner löschen TempFile = FF_GetScriptPath & "\Beipack.txt" 'Dateibeispiel if objFS.FileExists(TempFile) then objFS.DeleteFile TempFile,true TempFile = FF_GetScriptPath & "\BeipackSammlung" 'Ordnerbeispiel if objFS. FolderExists (TempFile) then objFS. DeleteFolder TempFile,true '### Registry-Daten löschen TempFile = "HKEY_CURRENT_USER\Software\Joachim Koopmann Software\FixFoto\Script" & RegSchluessel WshShell.RegDelete(TempFile) '### Fertigmeldung msgbox "Nach Durchführung der 'Automatischen Skriptkonfiguration' ist das Skript" & vbNewLine & _ Skriptname & " mit allen Komponenten gelöscht!",vbExclamation,"Hinweis" End Sub '--------------------------------------------------------------- Sub IniBereinigung 'FixFotoScript.ini - Bereinigung Dim Zeile, zNr,Anfang, Ende, DateiTmp, ZielZeile, tmpString DateiTmp = FF_GetFFPathEx(1) & "\FixFotoScript.tmp" '### Wo befindet sich der Eintrag zum Skript? Set Zeile = objFS.OpenTextFile(TempFile, ForReading) zNr = 0 do Until Zeile.AtEndOfStream tmpString = Zeile.ReadLine zNr = zNr + 1 if tmpString = "[Script]" then Anfang = zNr if tmpString = "File=.\" & Skriptname then Ende = zNr exit do end if loop Zeile.Close if Ende <= Anfang then msgbox "Die Datei FixFotoScript.ini konnte nicht bereinigt werden." & vbNewLine & _ "Der Löschvorgang wird abgebrochen!",vbExclamation,"Hinweis" Abbruch = true exit sub end if '### Zeilen ohne skriptbezogene Zeilen in DateiTmp übertragen Set Zeile = objFS.OpenTextFile(TempFile, ForReading) Set ZielZeile = objFS.CreateTextFile(DateiTmp, True) zNr = 0 do Until Zeile.AtEndOfStream tmpString = Zeile.ReadLine zNr = zNr + 1 if zNr < Anfang or zNr > Ende then ZielZeile.WriteLine tmpString end if loop Zeile.Close ZielZeile.Close '### Umkopieren von DateiTmp nach FixFotoScript.ini (TempFile) objFS.CopyFile DateiTmp, TempFile, True objFS.DeleteFile (DateiTmp) End Sub '--------------------------------------------------------------- \\ Bevor man diese Routine testet muss natürlich das Skript gesichert werden um es nachher wieder importieren zu können.