Das Script, das Du mir im letzten Post geschickt hast, arbeitet noch nicht so wie gewünscht. Es wird lediglich die erste Datei geprüft und ggf. korrigiert, alle weiteren werden dann im der Liste "Umbenennen?" eingesammelt und angezeigt - unabhängig davon, ob etwas daran zu korrigieren ist oder nicht. Ich habe es in meinem Code unter dem Befehl
eingefügt.
geschrieben, die prüft, ob das Intranet des Archivs erreichbar ist. Dann wird auf die dort liegenden Dateien zurückgegriffen. So brauche ich nicht jedesmal neu die Pfade zu editieren. Die kann ich hier im Script natürlich nur gekürzt wiedergeben.
2.) Ich werde vorerst auf das animierte Wartesymbol verzichten und habe stattdessen ebenfalls ein Progressfenster mit der Anzeige "Bin gleich fertig" gebastelt. Eigenartigerweise blitzt das aber nur kurz auf und bleibt dann während des restlichen Vorgangs im Hintergrund (oder wird ganz geschlossen?), obwohl ich keine entsprechenden Parameter (großes "A" müßte das sein) hinzugefügt habe.
3.) Ich habe das Umbenennen-Modul jetzt zweigeteilt für Signaturen mit und ohne Index, jetzt können beide durchnummeriert werden.
) von Signaturen ohne Index als Basis genommen, um dort etwas anderes auszuprobieren, was man später übernehmen könnte und habe dazu in die bereits bestehende Abfrage zur Unterscheidung zu Vorlagen mit Index eine Warnmeldung gesetzt.
. Dann würde dieser, falls falsch geschrieben, gleich auch korrigiert werden. Die Variable wird aber nicht richtig übernommen. Womöglich habe ich die Zuordnung an die falschen Stelle gesetzt.
6.) Schön wäre es ebenfalls, wenn man diese Funktion erweitern könnte, daß man damit auch Nummern ganz ohne Bestandsnamen mit diesem ergänzen kann. Damit man also die Bilder welche bereits Nummern haben, die übernommern werden sollen, beim Scannen nur mit dieser zu benennen braucht, und dann später den vollstädigen Namen daraus macht: Aus
. Ich kann nicht beurteilen, ob es einfacher ist, vorliegende Dateinamen mit und ohne Bestandsnamen vornedran zu unterscheiden und das somit in einem Modul zu schreiben, oder ob man das den User unterscheiden läßt und für die "nackten Zahlen" zur Bestandsnamensergänzung einen anderen Befehl wie z.B..
verwendet, der dann nach einer etwas anderen Festlegung der Variablen in dieselbe Routine einsteigt.
7.) Ich bezweifle mittlerweile immer mehr, ob ich eine solche Korrektur- und Trimfunktion wie für die Signaturen ohne Index auch für diejenigen mit Index überhaupt benötige. Punkt 6,) wäre da wohl wichtiger.
Code: Select all
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
#SingleInstance force
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
SetTitleMatchMode, RegEx
SetBatchLines, -1
;------------------------------------------------------------------------
; Shell-Objekt erzeugen
ShellApp := ComObjCreate("Shell.Application")
;------------------------------------------------------------------------
; Gruppe Windows Explorer Fenster definieren
GroupAdd, Explorer, ahk_class ExploreWClass
GroupAdd, Explorer, ahk_class CabinetWClass
;------------------------------------------------------------------------
; Vorlagendateien zum Abspeichern definieren
If FileExist("\\...-Intranet Archiv-...\Arbeitsdateien AHK-Tool StAF\")
{
VorgabenDatei := "\\...-Intranet Archiv-...\Arbeitsdateien AHK-Tool StAF\Bestandsvorgaben.txt"
Anleitung := "\\...-Intranet Archiv-...\Arbeitsdateien AHK-Tool StAF\Erläuterungen AHK-Tool StAF_3.1.pdf"
;Wartesymbol := "\\...-Intranet Archiv-...\Arbeitsdateien AHK-Tool StAF\Farbenscheibe.gif"
}
else
{
AuswahlDatei := A_ScriptDir . "\Arbeitsdateien AHK-Tool StAF\Auswahl.txt" ; zuletzt verwendeter Vorlagenname, lokal gespeichert
VorgabenDatei := A_ScriptDir . "\Arbeitsdateien AHK-Tool StAF\Bestandsvorgaben.txt"
Anleitung := A_ScriptDir . "\Arbeitsdateien AHK-Tool StAF\Erläuterungen AHK-Tool StAF_3.1.pdf"
;Wartesymbol := A_ScriptDir . "\Arbeitsdateien AHK-Tool StAF\Farbenscheibe.gif"
}
^!F8::Run, %VorgabenDatei%
!F8::Run, %Anleitung%
; Vorlagen und Auswahlen aufrufen und einlesen
F8::
Auswahlfenster:
Auswahl := FileExist(AuswahlDatei) ? FileOpen(AuswahlDatei, "r").Read() : ""
If !(File := FileOpen(VorgabenDatei, "r")){
MsgBox, 16, Fehler!, Die Datei %VorgabenDatei% konnte nicht geöffnet werden!
; ExitApp
}
Vorgaben := StrSplit(File.Read(), "`n", "`r")
File.Close()
; Auswahlfenster erstellen und anzeigen
Rows := (L := Vorgaben.Length()) > 10 ? 10 : L
GuiText_1 := "Wählen Sie hier den Standard für das nächste Umbenennungsprojekt aus!"
Gui, Margin, 20, 20
Gui, Font, s10 , Verdana
Gui, Add, Text, xm w350, %GuiText_1%
Gui, Add, ListView, xm wp r%Rows% -Multi vBestandAuswahl Sort, Bestand|Signatur|Index
For Each, Vorgabe In Vorgaben
{
Felder := StrSplit(Vorgabe, "`t")
Option := (Felder[1] = Auswahl) ? "Focus Select" : ""
LV_Add(Option, Felder*)
}
Loop, % LV_GetCount("Column")
LV_ModifyCol(A_Index, "AutoHdr")
Gui, Add, Edit, cblue xm h25 w100 vAktSignEingabe, ;%Auswahl%
Gui, Add, Edit, cblue x137 yp h25 w70 vSignEingabe, ;%SignVorlage%
Gui, Add, Edit, cblue x224 yp h25 w70 vIndexEingabe, ;%IndexVorlage%
Gui, Add, Text, x124 yp+5 h25 w13 , % chr(863)
Gui, Add, Text, x211 yp+4 h25 w13 , % chr(862)
Gui, Add, Button, xm h30 w100 Default gAnwenden, Anwenden
; Button "Neu Erstellen" wird in der Standardversion auskommentiert
Gui, Add, Button, x145 yp h30 w100 gNeuerstellen, Neu Erstellen
Gui, Add, Button, x270 yp h30 w100 gAbbrechen, Abbrechen
Menu, Tray, Icon, , , 1
GuiControl, Focus, BestandAuswahl
Gui, Show, x100 y100, Signierungsvorlagen
Return
;------------------------------------------------------------------------
; Auswahl übernehmen
Anwenden:
If !(Row := LV_GetNext())
{
MsgBox, 16, Fehler!, Bitte wählen Sie einen Bestand aus!
GuiControl, Focus, BestandAuswahl
Return
}
LV_GetText(AktSign, Row, 1)
LV_GetText(SignVorlage, Row, 2)
LV_GetText(IndexVorlage, Row, 3)
StellenSign := StrLen(SignVorlage)
If (IndexVorlage = "-")
{
StellenIndex := 0
}
else
StellenIndex := StrLen(IndexVorlage)
LetzteSign := 0
; hier müßte wohl auch die externe Abspeicherung stattfinden!
If (AktSign <> Auswahl)
{
Auswahl := AktSign
File := FileOpen(AuswahlDatei, "w")
File.Write(Auswahl)
File.Close()
}
Gui, Destroy
Gosub, Anzeige
Menu, Tray, Icon, , , 0
Return
;------------------------------------------------------------------------
; Neue Vorlage abspeichern
Neuerstellen:
Gui, Submit, NoHide ; Speichert die Benutzereingaben für eine neue Vorlage
; AktSignEingabe darf nicht leer sein
AktSignEingabe := Trim(AktSignEingabe)
If (StrLen(AktSignEingabe) = 0)
{
MsgBox, 16, Fehler!, Der Bestandsname darf nicht leer sein!
GuiControl, Focus, AktSignEingabe
Return
}
; AktSignEingabe darf nicht bereits vergeben sein
Loop, % LV_GetCount()
{
LV_GetText(AktSignLV, A_Index)
If (AktSignEingabe = AktSignLV)
{
MsgBox, 16, Fehler!, Der Bestandsname ist bereits vergeben!
GuiControl, Focus, AktSignEingabe
Return
}
}
; SignEingabe darf nicht leer sein
SignEingabe := Trim(SignEingabe)
If (StrLen(SignEingabe) = 0)
{
MsgBox, 16, Fehler!, Die Signaturvorgabe darf nicht leer sein!
GuiControl, Focus, SignEingabe
Return
}
; IndexEingabe darf nicht leer sein
IndexEingabe := Trim(IndexEingabe)
If (StrLen(IndexEingabe) = 0)
{
MsgBox, 16, Fehler!, Die Indexvorgabe darf nicht leer sein!
GuiControl, Focus, IndexEingabe
Return
}
; Alles OK, verarbeiten
AktSignNeu := AktSignEingabe
StellenSignNeu := StrLen(SignEingabe)
SignVorlageNeu := Format("{:0" . StellenSignNeu . "}", 0)
If (IndexEingabe = "-")
{
IndexVorlageNeu := "-"
}
else
{
StellenIndexNeu := StrLen(IndexEingabe)
IndexVorlageNeu := Format("{:0" . StellenIndexNeu . "}", 0)
}
FileAppend , `n%AktSignNeu%`t%SignVorlageNeu%`t%IndexVorlageNeu%, %VorgabenDatei%
; Auswahldatei updaten
If (IndexVorlageNeu = "-")
{
VorschauMsgNeu = %AktSignNeu%_%SignVorlageNeu%
StellenIndex := "-"
LetzteSign := "-"
}
else
{
VorschauMsgNeu = %AktSignNeu%_%SignVorlageNeu%-%IndexVorlageNeu%
StellenIndex := StellenIndexNeu
LetzteSign := 0
}
AktSign := AktSignNeu
StellenSign := StellenSignNeu
If (AktSign <> Auswahl)
{
Auswahl := AktSign
File := FileOpen(AuswahlDatei, "w")
File.Write(Auswahl)
File.Close()
}
; Abschluß-Message
Gui, Destroy
MsgAnzeige =
(
Ihre neu erstellte Vorlage %VorschauMsgNeu% wurde abgespeichert.
Möchten Sie zurück zur Vorlagenauswahl?
)
MsgBox, 68, , %MsgAnzeige%
IfMsgBox Yes
gosub, Auswahlfenster
else
gosub, Anzeige
Return
;------------------------------------------------------------------------
; Auswahl abbrechen -> Programm beenden
Abbrechen:
GuiClose:
Gui, Destroy
return
;------------------------------------------------------------------------
; Vorschau mit Progresselement statt MsgBox, damit Schrift formatierbar ist
^F8::
Anzeige:
If (AktSign = "")
{
LeerAnzeige = Es ist keine Bestandsvorlage ausgewählt!
Progress, m2 fs12 zh0 ct0000ff CWffffff, %LeerAnzeige%, , Vorschau, Verdana
}
else
{
VorschauSign := Format("{:0" . StellenSign . "}", 1)
If (StellenIndex = "0")
{
VorschauMsg = %AktSign%_%VorschauSign%
}
else
{
VorschauIndex := Format("{:0" . StellenIndex . "}", 0)
VorschauMsg = %AktSign%_%VorschauSign%-%VorschauIndex%
}
Progress, m2 fs12 zh0 ct0000ff CWffffff B, %VorschauMsg%, , Vorschau, Verdana
}
SetTimer, ProgressOff, 1500
Return
ProgressOff:
Progress, Off
Return
;------------------------------------------------------------------------
; Bilder umbenennen im Windows Explorer
#IfWinActive ahk_group Explorer
;------------------------------------------------------------------------
; Indexnummerierung auf Eingabebefehl 'Signaturnummer, Startindex' in Inputbox
; nach Auswahl der Dateien mit der Maus
<!LButton::
; Explorerfenster bestimmen
ExplorerID := WinExist()
ShellWin := 0
For Win In ShellApp.Windows {
If (Win.HWND = ExplorerID) {
ShellWin := Win
Break
}
}
If !(ShellWin) ; das aktive Explorerfenster wurde nicht gefunden, Abbruch!
Return
; Auswahl nach unten erweitern
Send, +{LButton}
; Auswahl einlesen und bereinigen. Die erste Datei (mit dem Fokus) kommt ans Ende.
; -> docs.microsoft.com/en-us/windows/desktop/shell/shellfolderview-selecteditems
If !(ShellWin.Document.SelectedItems.Count > 0) { ; keine Auswahl
MsgBox, Sie müssen mindestens eine Datei markieren!
Return
}
SelectedItems := []
For Item In ShellWin.Document.SelectedItems
SelectedItems.Push(Item)
LetzteDatei := SelectedItems.RemoveAt(1) ; erste (bzw. letzte) Datei aus dem Array entfernen ...
SelectedItems.Push(LetzteDatei) ; ... und wieder anhängen
Anzahl := SelectedItems.Length()
; Prüfen, ob die Dateinamenserweiterungen angezeigt werden
; -> docs.microsoft.com/en-us/windows/desktop/shell/shellfolderview-viewoptions
ShowExt := (ShellWin.Document.ViewOptions & 2) ; SFVVO_SHOWEXTENSIONS (0x00000002)
; MsgBox, 0, ShowExt, %ShowExt%
If (StellenIndex = "0") ; fragt, ob Index vorhanden und wählt die Routine aus
Gosub, OhneIndex
Else
Gosub, MitIndex
return
MitIndex: ; zum Umbenennen, wenn Index vorhanden
; Benutzereingaben zum Umbenennen holen
LetzteSign := Format("{:0" . StellenSign . "}", ++LetzteSign) ; Erhöht die letzte Signatur um 1 und setzt sie auf 4 Ziffern
InputBox, BoxSign, Vorschau, Es werden %Anzahl% Bilder umsigniert, , 225, 125, , , , ,%LetzteSign%
If (ErrorLevel) {
LetzteSign--
Return
}
Progress, m2 fs12 zh0 ct0000ff CWffffff B, Bin gleich fertig ..., , Vorschau, Verdana
If !InStr(BoxSign, ",") { ; Prüft, ob ein anderer Startindex durch Komma getrennt eingegeben wurde
LetzteSign := Format("{:0" . StellenSign . "}", BoxSign) ; Setzt neue Signatur auf 4 Ziffern
LetzterIndex := 0 ; Setzt Index auf 0
}
Else {
StringSplit, BoxArray, BoxSign, `,
If (BoxArray1 = "")
LetzteSign := Format("{:0" . StellenSign . "}", LetzteSign) ; Erhöht die letzte Signatur um 1 und setzt sie auf 4 Ziffern
Else
LetzteSign := Format("{:0" . StellenSign . "}", BoxArray1) ; Setzt neue Signatur auf 4 Ziffern
LetzterIndex := BoxArray2
}
; Dateien umbenennen
ShellWin.Document.SelectItem(SelectedItems[1], 4)
For Index, Item In SelectedItems {
ItemPath := Item.Path
SplitPath, ItemPath, DateiName, , Erweiterung
LetzterIndex := Format("{:0" . StellenIndex . "}", LetzterIndex) ; Setzt Index auf 1 in 2 Ziffern
Item.Name := AktSign . "_" . LetzteSign . "-" . LetzterIndex . (ShowExt ? "." . Erweiterung : "")
LetzterIndex++
}
; Fertig
; Letzte Datei selektieren
; -> docs.microsoft.com/en-us/windows/desktop/shell/shellfolderview-selectitem
ShellWin.Document.SelectItem(SelectedItems[Anzahl], 29)
For Index, Item In SelectedItems
Item := ""
ShellWin := ""
Progress, Off
Return
OhneIndex: ; zum Umbenennen, wenn kein Index vorhanden
; Benutzereingaben zum Umbenennen holen
If (LetzteSign = 0)
LetzteSign := Format("{:0" . StellenSign . "}", 1)
else
LetzteSign := Format("{:0" . StellenSign . "}", LetzteSign)
InputBox, BoxSign, Vorschau, Es werden %Anzahl% Bilder umsigniert, , 225, 125, , , , ,%LetzteSign%
If (ErrorLevel) {
LetzteSign--
Return
}
Progress, m2 fs12 zh0 ct0000ff CWffffff B, Bin gleich fertig ..., , Vorschau, Verdana
If !InStr(BoxSign, ",") { ; Prüft, ob ein anderer Startindex durch Komma getrennt eingegeben wurde
LetzteSign := Format("{:0" . StellenSign . "}", BoxSign) ; Setzt neue Signatur auf 4 Ziffern
LetzterIndex := 0 ; Setzt Index auf 0
}
Else {
StringSplit, BoxArray, BoxSign, `,
If (BoxArray1 = "")
LetzteSign := Format("{:0" . StellenSign . "}", LetzteSign) ; Erhöht die letzte Signatur um 1 und setzt sie auf 4 Ziffern
Else
LetzteSign := Format("{:0" . StellenSign . "}", BoxArray1) ; Setzt neue Signatur auf 4 Ziffern
LetzterIndex := BoxArray2
}
; Dateien umbenennen
ShellWin.Document.SelectItem(SelectedItems[1], 4)
For Sign, Item In SelectedItems {
ItemPath := Item.Path
SplitPath, ItemPath, DateiName, , Erweiterung
LetzteSign := Format("{:0" . StellenSign . "}", LetzteSign) ; Setzt Index auf 1 in 2 Ziffern
Item.Name := AktSign . "_" . LetzteSign . (ShowExt ? "." . Erweiterung : "")
LetzteSign++
}
; Fertig
; Letzte Datei selektieren
; -> docs.microsoft.com/en-us/windows/desktop/shell/shellfolderview-selectitem
ShellWin.Document.SelectItem(SelectedItems[Anzahl], 29)
For Sign, Item In SelectedItems
Item := ""
ShellWin := ""
Progress, Off
return
;------------------------------------------------------------------------
; Dateinamen mit F6 auf 6stellige Signaturnummer und optionalen Buchstabenindex trimmen
; Beispiel Pragher: W 134_070936A.tif
F6::
Clipboard := ""
SendInput, ^c
Clipwait, 1
DateienAuslese := Clipboard
SignStellen := StellenSign
IndexStellen := StellenIndex
NewAktname := AktSign
If !(StellenIndex = "0")
{
;Gosub, Trimmen_mI
MsgBox, 16, Fehler!, Sie können keine Signaturen nach Vorlagen mit Indizes prüfen!
return
}
else
Loop, Parse, Dateienauslese, `n, `r
{
SplitPath, A_LoopField, , Verzeichnis, Erweiterung, AlterName
NameArray := StrSplit(AlterName, "_")
; Wenn NameArray[2] mit einer oder mehreren Ziffer(n) beginnt und mit einer oder keiner 'Nichtziffer' endet ...
If RegExMatch(NameArray[2], "^(\d+)(\D?)$", Match)
{
; MsgBox, % StrLen(Match1) . ": " . Match1 . " <> " . Match2
If !(StrLen(Match1) = SignStellen)
{
Match1 += 0 ; führende Nullen entfernen
If !(StrLen(Match1) > SignStellen)
{
NewSign := Format("{:0" . SignStellen . "}", Match1) . Match2
; MsgBox, % StrLen(NewSign) . ": " . NewSign . " <> " . Match2
FileMove, %A_LoopField%, %Verzeichnis%\%NewAktname%_%NewSign%.%Erweiterung%
}
}
}
}
return
;~ Trimmen_mI:
;~ ; Beispiel Landeskommissär: A 95--1_0123-4567.tif
;~ ;MsgBox Sie haben eine Vorlage mit Index gewählt
;~ Loop, Parse, Dateienauslese, `n, `r
;~ {
;~ SplitPath, A_LoopField, , Verzeichnis, Erweiterung, AlterName
;~ NameArray := StrSplit(AlterName, "_")
;~ NewAktname := NameArray[1]
;~ SignArray := StrSplit(NameArray[2], "-")
;~ SignArray[1] += 0
;~ NewSign := Format("{:0" . SignStellen . "}", SignArray[1])
;~ ; Wenn SignArray[2] mit einer oder mehreren Ziffer(n) beginnt und mit einer oder keiner 'Nichtziffer' endet ...
;~ If RegExMatch(SignArray[2], "^(\d+)(\D?)$", Match)
;~ {
;~ If !(StrLen(Match1) = IndexStellen)
;~ {
;~ Match1 += 0 ; führende Nullen entfernen
;~ If !(StrLen(Match1) > IndexStellen)
;~ {
;~ NewIndex := Format("{:0" . IndexStellen . "}", Match1) . Match2
;~ FileMove, %A_LoopField%, %Verzeichnis%\%NewAktname%_%NewSign%-%NewIndex%.%Erweiterung%
;~ }
;~ }
;~ }
;~ }
;~ return
^F6::
If (AktSign = "")
{
MsgBox, 16, Fehler!, Es ist keine Bestandsvorlage ausgewählt!
Return
}
Clipboard := ""
SendInput, ^c
Clipwait, 1
If (ErrorLevel)
{
MsgBox, 16, Fehler!, Es sind keine Dateien ausgewählt!
Return
}
DateienAuslese := Clipboard
SignStellen := StellenSign
IndexStellen := StellenIndex
AktSignLen := StrLen(AktSign)
NamensFehler := []
Umbenennen := []
AnzahlDateien := 0
Loop, Parse, Dateienauslese, `n, `r
{
AnzahlDateien++
SplitPath, A_LoopField, , Verzeichnis, Erweiterung, AlterName
If (SubStr(AlterName, 1, AktSignLen) <> AktSign)
{
NamensFehler.Push(A_LoopField)
Continue
}
Trenner := SubStr(AlterName, AktSignLen + 1, 1)
If Trenner Not In _,-
{
NamensFehler.Push(A_LoopField)
Continue
}
RestName := SubStr(AlterName, AktSignLen + 2)
If !RegExMatch(RestName, "^(\d+)(.*)$", Rest)
{
NamensFehler.Push(A_LoopField)
Continue
}
Signatur := Rest1
If (StrLen(Rest1) <> SignStellen)
{
Signatur += 0
If (StrLen(Signatur) <= SignStellen)
{
Signatur := Format("{:0" . SignStellen . "}", Signatur)
}
Else
{
NamensFehler.Push(A_LoopField)
Continue
}
}
If (IndexStellen = 0)
{
NeuerName := Verzeichnis . "\" . AktSign . "_" . Signatur . Rest2 . "." . Erweiterung
Umbenennen.Push({Alt: A_LoopField, Neu: NeuerName})
Continue
}
Trenner := SubStr(RestName, StrLen(Rest1) + 1, 1)
If Trenner Not In _,-
{
NamensFehler.Push(A_LoopField)
Continue
}
RestName := SubStr(RestName, StrLen(Rest1) + 2)
If !RegExMatch(RestName, "^(\d+)(.*)$", Rest)
{
NamensFehler.Push(A_LoopField)
Continue
}
Index := Rest1
If (StrLen(Rest1) <> IndexStellen)
{
Index += 0
If (StrLen(Index) <= IndexStellen)
{
Index := Format("{:0" . IndexStellen . "}", Index)
NeuerName := Verzeichnis . "\" . AktSign . "_" . Signatur . "-" . Index . Rest2 . "." . Erweiterung
Umbenennen.Push({Alt: A_LoopField, Neu: NeuerName})
Continue
}
Else
{
NamensFehler.Push(A_LoopField)
Continue
}
}
}
If NamensFehler.Length()
{
FehlerListe := ""
For Each, Datei In NamensFehler
FehlerListe .= Datei . "`n"
If (Umbenennen.Length() = 0)
{
MsgBox, 16, Fehler!, Folgende Dateinamen konnten nicht korrigiert werden:`n`n%FehlerListe%
Return
}
Else
{
MsgBox, 4, Fehler!, % "Folgende Dateinamen können nicht korrigiert werden:`n`n" . FehlerListe . "`n`n"
. "Sollen " . Umbenennen.Length() . " dennoch umbenannt werden?"
IfMsgBox, No
Return
}
}
For Each, Datei In Umbenennen
{
; FileMove, % Datei["Alt"], Datei["Neu"]
MsgBox, 0, Umbenennen!, % Datei["Alt"] . "`n`n" . Datei["Neu"]
}
Return
#If ; Ende des bedingten HotKey
+NumpadSub::Send _ ; Unterstrich auch mit Shift+Minus vom Numpad
;------------------------------------------------------------------------
; Beenden des Scriptes
Escape::
MsgBox, 33, AHK schließen, Wollen Sie das AHK-Tool StAF wirklich schließen?
IfMsgBox Ok
ExitApp
else
Return