Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; <COMPILER: v1.1.32.00>
- #NoEnv
- #SingleInstance, Force
- SendMode Input
- SetWorkingDir %A_ScriptDir%\DATA\DOC\
- SetTitleMatchMode, 3
- Menu, tray, icon, %A_ScriptDir%\DATA\1.ico
- #KeyHistory 0
- Changed=1 ; used to check if the active file list was changed by the user
- ReadIni() ; Check & Read INI file, merged into one function
- ;DBFile=%Default%
- Hotkey, %GUIStartKey%, GUIStart
- return
- GUIStart:
- WinGetActiveTitle, ActiveWindowTitle
- ; [] seem to be illegal characters, remove them from the string
- StringReplace, ActiveWindowTitle, ActiveWindowTitle, [, -, All
- StringReplace, ActiveWindowTitle, ActiveWindowTitle, ], -, All
- ; k++ addition, if the active file list was changed by the user, changed = 1
- If Changed = 1
- {
- ;DBFile=%Default% ; if we don't reset the default here the one from loop below will become the 'default', but we only want that in case there was no manual selection
- ; check if the ActiveWindowTitle matches a trigger if so change DBFile accordingly
- Loop, %NumberOfLists%
- {
- Trigger := Trigger%A_Index%
- File := File%A_Index%
- IfInString, ActiveWindowTitle, %Trigger%, SetEnv, DBFile, %File%
- }
- }
- ;Read lines from active file
- ReadDBFile(DBFile, Separator)
- StartList := MakeStartList()
- ; Get Active Window ID and Active Control
- CursorIn := GetActiveControl()
- ActiveWindow := GetActiveWindow()
- ; Will prevent error message when the window is already active in the background
- IfWinExist, %GUITitle%
- {
- IfWinNotActive, %GUITitle%
- {
- WinMinimize , %GUITitle%
- WinActivate , %GUITitle%
- }
- ;Gui destroy
- }
- else
- {
- Gui -Caption +ToolWindow +Border +LastFound +AlwaysOnTop
- CustomColor = 884488
- Gui, Color, %CustomColor%
- ;Gui,Font,S14 Bold,Verdana ;Calibri
- Gui,Font,S14 Bold,Calibri
- ; k++ (re)moved some buttons, added DropDownList
- Gui, Add, Text, x20 y20 w60 h22, &Search:-
- Gui, Add, Edit, gEingabe vEingabe x100 y20 w600 h22 +Left,
- Gui, Add, Text, x20 y50 w60 h22, &S-Files:-
- Gui, Add, DropDownList, x100 y50 w600 h22 gChangeActiveFile R7 SORT vDBFileChange, SOFT.txt|CMD.txt|FOL.txt|AHK.txt|NIR.txt|VBS.txt|URL.txt|LIST.TXT|SCRIPT.txt|BASH.txt|CLIP.txt|CODE.txt|TEXT.txt|REG.txt|HTML.txt|
- Gui, Add, ListBox, x20 y90 w750 h300 gChoice vChoice altsubmit ,%StartList%
- Gui,Font,S16 Bold,Verdana
- Gui, Add, Edit, x20 y380 w750 h135 vReadOnly,
- Gui, Font, s12, Arial
- Gui, Add, Button, x710 y20 w55 h22 Default, &OK
- Gui, Add, Button, x20 y535 w65 h22 , &Edit
- Gui, Add, Button, x100 y535 w65 h22 , &Add
- Gui, Add, Button, x180 y535 w75 h22, O&ptions
- Gui, Add, Button, x270 y535 w65 h22, &Reset
- Gui, Add, Button, x350 y535 w65 h22, &Run
- Gui, Add, Button, x430 y535 w65 h22, &R-Cmd
- Gui, Add, Button, x510 y535 w65 h22, &R-Com
- Gui, Add, Button, x590 y535 w65 h22, &R-AHK
- Gui, Add, StatusBar,,
- SB_SetParts(140)
- SB_SetText(DBFile,1) ; show active file in statusbar
- SB_SetText(LineCount . "/" LineCount,2) ; show how many hits / total lines there are in the active file
- ;Gui, Show, x353 y55 h520 w420,%GUITitle%
- Gui, Add, Text, x-10 y2 w40 h20 CYellow gGuiMove 0x1, >
- Gui, Show, x0 y30 w800 h600 Center,%GUITitle%
- WinSet, Region, 0-0 W800 H600 R20-20,
- WinMove, 0, 0
- ; Creates a Hitlist and a Hitlist-Array, so that at GUIStart the lines can be shown in Edit2
- Choice=1
- loop, %LineCount%
- {
- Hitlist=%Hitlist%|%A_Index%
- Hitlist_%A_Index%=%A_Index%
- }
- ModeNr=1
- Direction=0
- ;Anzeige(ViewOrder,ModeNr,Direction)
- Show()
- }
- Return
- GuiMove:
- PostMessage, 0xA1, 2,,, A
- Return
- #IfWinActive, Kollektor++ ahk_class AutoHotkeyGUI ; Hotkeys only work in the just created GUI
- Up::
- ControlGetFocus, CheckEdit, %GUITitle%
- If (CheckEdit="Edit1") {
- ControlSend, ListBox1, {Up}, %GUITitle%
- }
- If (CheckEdit="ComboBox1") {
- ControlSend, ComboBox1, {Up}, %GUITitle%
- }
- return
- Down::
- ControlGetFocus, CheckEdit, %GUITitle%
- If (CheckEdit="Edit1") {
- ControlSend, ListBox1, {Down}, %GUITitle%
- }
- If (CheckEdit="ComboBox1") {
- ControlSend, ComboBox1, {Down}, %GUITitle%
- }
- return
- ;Enter::
- ;Gosub ButtonOK
- ;Return
- ;F1:: ; used to open a HTML help page
- ;Gosub ButtonHelp
- ;Return
- #IfWinActive
- ; k++ If you press ALT-A or click the ADD button, you can add the marked text to the currently active file
- ButtonAdd:
- ClipSaved := ClipboardAll ; Save clipboard
- send, ^c
- StringLeft, ShowClip, Clipboard, 450 ; We need to trim text because MsgBox might become to large to fit on screen
- MsgBox, 4, ADD to file?, Do you want to add the text below to %DBFile%`n`n%ShowClip% ...
- IfMsgBox Yes
- {
- StringReplace, clipboard, clipboard, `r`n,%Separator%, All ;Replaces CR LF by %Separator%
- FileAppend, %Clipboard%`n, %DBFile%
- }
- Clipboard := ClipSaved ; Restore the original clipboard.
- ClipSaved = ; Free the memory ^
- ShowClip =
- GUI destroy
- Return
- Return
- ButtonOK: ; Insert the selected/found text in the active window
- ClipSaved := ClipboardAll ; Save clipboard
- ControlGetText, Clipboard ,Edit2, %GUITitle%
- GUI destroy ; Before sending the contents of the clipboard, the GUI must be removed because many windows will not accept ControlSend when the window is active in the background
- ControlSend, %CursorIn%,{Control down}v{Control up}, AHK_ID%ActiveWindow% ; On some systems only {Control down}v{Control up} works correcly and not ^v
- Clipboard := ClipSaved ; Restore the original clipboard.
- ClipSaved = ; Free the memory
- Return
- GuiEscape: ; Gui dissappears, program remains active in memory
- GUI destroy
- Return
- GuiClose: ; Programm is closed
- ExitApp
- ; K++ addition, new function to load new file
- ChangeActiveFile:
- Gui, Submit
- DBFile = %DBFileChange%
- GUI destroy
- Changed=1 ; remember the active file was changed manually
- Gosub GUIStart ; reload gui to load active file
- Return
- ; --------------------------------------------------------------------------
- ButtonOptions:
- runwait, %Editor% KollektorPP.ini
- sleep, 500
- ReadIni()
- Return
- ;ButtonHelp:
- ; run, .\Help\Kollektor_Hilfe.htm
- ;Return
- ButtonEdit:
- runwait, %Editor% %DBFile%
- GUI destroy
- Gosub GUIStart
- Return
- ButtonReset:
- Changed=0 ; if you reload the app, forget manually selected file
- GUI destroy
- Gosub GUIStart
- Return
- ButtonRun:
- Runwait, %ReadOnly%
- GUI destroy
- Gosub GUIStart
- Return
- ButtonR-Cmd:
- gui, submit, nohide
- Runwait,%comspec% /k %ReadOnly%
- return
- ButtonR-Com:
- gui, submit, nohide
- Runwait, C:\Windows\explorer.exe shell:%ReadOnly%
- return
- ButtonR-AHK:
- Gui, Submit, NoHide
- ;FileAppend, %ReadOnly% `n ^ESC::ExitApp, %A_ScriptDir%\TempTestCode.ahk
- FileAppend,
- (
- #NoEnv
- #persistent
- SetWorkingDir %A_ScriptDir%
- #SingleInstance force
- SetBatchLines, -1
- Menu, Tray, Icon, %A_ScriptDir%\DATA\2.ico
- %ReadOnly%
- #R::Reload ;<-- ~ Reload Script ~
- #S::Suspend ;<-- ~ Suspend Script ~
- #P::Pause ;<-- ~ Pause Script ~
- #M::WinMinimize, ;<-- ~ Minimize Script ~
- ESC::ExitApp ;<-- ~ Exit Script ~
- ), %A_ScriptDir%\TempTestCode.ahk
- Run, %A_ProgramFiles%\AutoHotkey\AutoHotkey.exe "%A_ScriptDir%\TempTestCode.ahk"
- Sleep 2000
- FileDelete, %A_ScriptDir%\TempTestCode.ahk
- return
- ; --------------------------------------------------------------------------
- EINGABE:
- ; Enter text to search for, show list of found items in listbox
- Gui, Submit, noHide
- SearchFor=
- Loop
- { ; Sometimes you type to fast for the computer
- If SearchFor=%Eingabe%
- break
- SearchFor=%Eingabe%
- ;Erstellen der Trefferliste
- Hitlist := SearchDB(SearchFor,CaseSensitive,WholeWordCheck,WhichColumn,WordStart)
- word=
- wordlist=
- ; K++ addition ; HowManyHits is used to show how many items were found in the Statusbar
- HowManyHits =
- loop, parse, Hitlist,|
- {
- Word := DB%A_LoopField%_1
- Wordlist =%Wordlist%|%word%
- Hitlist_%A_Index%=%A_LoopField%
- ; K++ addition
- HowManyHits := A_Index
- }
- ; K++ addition
- HowManyHits-=1
- SB_SetText(HowManyHits . "/" . LineCount,2)
- ; Check if there is another entry
- GUI, Submit, noHide
- }
- ; Special cases
- If (Wordlist="") ; Nothing found, empty the Listbox
- Wordlist=|
- If (SearchFor="") ; Show start list when the input box is empty
- {
- Wordlist=|%StartList%
- ; K++ addition, restore statusbar to start values
- SB_SetText(LineCount . "/" . LineCount,2)
- }
- ; Listbox with found items is shown
- GuiControl,, ListBox1, %wordlist%
- Choice=1
- Direction=0
- ModeNr=1
- ;Anzeige(ViewOrder,ModeNr, Direction)
- Show()
- return
- ; --------------------------------------------------------------------------
- CHOICE:
- ; Used by navigation in the Listbox (up/down keys)
- Gui, submit, NoHide
- Direction=0
- ModeNr=1
- ;Anzeige(ViewOrder,ModeNr,Direction)
- Show()
- ; Doubleclick on item in the list, same as Button OK
- if A_GuiControlEvent = DoubleClick
- Gosub ButtonOK
- return
- Show()
- ; Shows the lines in the preview window, correcting any linebreaks (separator)
- {
- global Hitlist, Choice,
- Treffer := Hitlist_%Choice% ; "Treffer" is the number of the selected item in the list
- Line := DBLine_%Treffer%
- StringReplace, ToShow, Line, ¤, `n, All
- GuiControl,, Edit2, %ToShow%
- return
- }
- Anzeige(ViewOrder,ModeNr, Direction)
- {
- global ColCount, Hitlist, Choice
- Treffer := Hitlist_%Choice% ; "Treffer" is the number of the selected item in the list
- ModeNr := ModeNr+Direction
- ViewModeCount=0
- loop, parse,ViewOrder,|
- {
- ViewModeCount := ViewModeCount + 1 ;Zählt die Anzeigen-Modi
- a=%A_Index%
- ToShow_%a% =
- Loop, Parse,A_LoopField,-
- {
- If A_LoopField is integer
- {
- ToShow_%a% := ToShow_%a% . DB%Treffer%_%A_LoopField% . "`n"
- }
- else
- {
- FieldNr := LeaveOnlyNumbers(A_LoopField) ; Nur die Feldnummer bleibt übrig, alle anderen Zeichen werden entfernt
- if (Instr(A_LoopField,",_")>0) ; Komma Unterstrich für Komma, Leerzeichen,kein Zeilenumbruch
- ToShow_%a% := ToShow_%a% . DB%Treffer%_%FieldNr% . "," . A_Space
- else if (Instr(A_LoopField,"_")>0) ;Unterstrich für, Leerzeichen,kein Zeilenumbruch
- ToShow_%a% := ToShow_%a% . DB%Treffer%_%FieldNr% . A_Space
- else
- ToShow_%a% := ToShow_%a% . DB%Treffer%_%FieldNr% . "`n" ;Alle weiteren Nicht-Integers werden ignoriert
- }
- }
- }
- ; Am Listenende: Sprung an den Anfang/ Am Listenanfang: Sprung ans Ende der Liste
- If (ModeNr<1)
- ModeNr= %ViewModeCount%
- If (ModeNr>ViewModeCount)
- ModeNr=1
- ;Anzeige des gewählten Modus
- GuiControl,, Edit2, % ToShow_%ModeNr%
- ;Rückgabe der ModusNummer
- Return ModeNr
- }
- ; --------------------------------------------------------------------------
- MakeStartList()
- ;erstellt eine Liste aller Items, die beim Programmstart angezeigt wird
- {
- global LineCount
- Startlist=
- Loop, %LineCount%
- {
- word := DB%A_Index%_1
- Startlist =%Startlist%%word%|
- }
- return StartList
- }
- SearchDB(SearchFor,CaseSensitive,WholeWordCheck,WhichColumn,WordStart)
- {
- global LineCount, ColCount
- ;global counter
- ;Counter := counter+1
- ; FEHLERBEHANDLUNG
- If (WhichColumn>ColCount and WhichColumn<>"ALL") ;Suche in einer nicht existierenden Spalte
- {
- ;msgbox, Die Tabelle enthält nur %ColCount% Spalten.`nDie %WhichColumn%. Spalte kann also nicht durchsucht werden.`nDie Anwendung wird beendet.
- msgbox, The Table only contains %ColCount% columns.`nThe %WhichColumn% column can not be searched.`nThe search will be stopped.
- exitapp
- }
- ; SUCHE
- Loop, %LineCount%
- {
- L_Index=%A_Index% ;L_Index: Zeilennummer
- Loop, %ColCount%
- {
- ;In welchen Spalten?
- If WhichColumn=ALL ;Alle Spalten werden durchsucht
- C_Index=%A_Index% ;C_Index: Spaltennummer
- Else
- C_Index=%WhichColumn% ;nur die spezifizierte Spalte wird durchsucht
- SearchIn := DB%L_Index%_%C_Index%
- Position := InStr( SearchIn,SearchFor,CaseSensitive ) ;Position des Suchbegriffes. O= Suchbegriff nicht gefunden. >=1 Treffer irgendwo in SearchIn. =1 Treffer steht am Anfang
- If (Position = 0)
- continue
- ;Bedingungen abfragen
- If (Position=1 AND WholeWordCheck="ON" AND WordStart="ON") ;Es wird nach ganzem Wort am Zellanfang gesucht
- {
- WholeWord := IsWholeWord(SearchIn,SearchFor)
- If WholeWord=1
- {
- Hitlist=%Hitlist%%L_Index%|
- break
- }
- }
- If (Position>=1 AND WholeWordCheck="ON" AND WordStart="OFF") ;Es wird nach ganzem Wort irgendwo in der Zelle gesucht
- {
- WholeWord := IsWholeWord(SearchIn,SearchFor)
- If WholeWord=1
- {
- Hitlist=%Hitlist%%L_Index%|
- break
- }
- }
- If (Position=1 AND WholeWordCheck="OFF" AND WordStart="ON") ;der Zelleninhalt beginnt mit dem Suchbegriff
- {
- Hitlist=%Hitlist%%L_Index%|
- break
- }
- If (Position>=1 AND WholeWordCheck="OFF" AND WordStart="OFF") ;Suchbegriff hat beliebige Position
- {
- Hitlist=%Hitlist%%L_Index%|
- Break
- }
- If (WhichColumn<>"ALL") ;Beendt die Suche nach einer Spalte, wenn nur eine durchsucht werden soll
- {
- Break
- }
- }
- }
- return Hitlist
- }
- ReadDBFile(DatabaseFile,Separator)
- {
- global ;Alle Variablen dieser Funktion sind global
- local L_Index ;Diese Variablen sind lokal (gelten nur innerhalb der Funktion)
- LineCount = 0
- ColCount = 0
- IfNotExist, %DBFile%
- DBLine_1 =
- Loop, read, %DBFile%
- {
- DBLine_%A_Index%=%A_LoopReadLine%
- L_Index=%A_Index%
- %L_Index%ColCount = 0
- LineCount += 1
- ;Loop, parse, A_LoopReadLine, %Separator% ;This is the original line in the script
- Loop, parse, A_LoopReadLine,`n
- {
- DB%L_Index%_%A_Index% = %A_LoopField%
- %L_Index%ColCount += 1 ;Die Variable %L_Index%ColCount ist NICHT identisch mit ColCount!
- if( ColCount < %L_Index%ColCount )
- ColCount := %L_Index%ColCount
- }
- }
- }
- ;*******************************************************************************************************
- IsWholeWord(SearchIn,SearchFor)
- ; Überprüft ob der zu suchenden Begriff "SearchFor" als eigenes vollständiges Wort in "SearchIn"
- ; vorkommt.
- ; Wenn ja, wird WholeWord=1 zurückgegeben, wenn nicht WholeWord=0
- {
- BorderChar=,,,.,%A_Space%,%A_Tab%,-,: ;Liste von Zeichen, die vor oder nach einem Wort stehen können. Reihenfolge der Liste ist wichtig!
- SearchLength := StrLen(SearchFor)
- FieldLength := StrLen( SearchIn)
- Position := InStr( SearchIn, SearchFor)
- if SearchLength = %FieldLength% ;SearchIn enthält nur das Suchwort
- {
- WholeWord=1
- }
- else if Position=1 ;SearchIn beginnt mit dem Suchwort
- {
- StringMid, TailChar, SearchIn, % Position+SearchLength, 1 ;TailChar: erstes Zeichen nach "SearchFor"
- if TailChar contains %BorderChar%
- {
- WholeWord=1
- }
- else
- {
- WholeWord=0
- }
- }
- else if (Position+SearchLength-1=FieldLength) ;SearchIn endet mit dem Suchwort
- {
- StringMid, LeadChar, SearchIn, % Position - 1, 1
- if LeadChar contains %BorderChar%
- {
- WholeWord=1
- }
- else
- {
- WholeWord=0
- }
- }
- else ;SearchFor steht mitten in SearchIn
- {
- StringMid, LeadChar, SearchIn, % Position - 1, 1
- if LeadChar contains %BorderChar%
- {
- StringMid, TailChar, SearchIn, % Position+SearchLength, 1 ;TailChar: erstes Zeichen nach "SearchFor"
- if TailChar contains %BorderChar%
- {
- WholeWord=1
- }
- else
- {
- WholeWord=0
- }
- }
- else
- {
- WholeWord=0
- }
- }
- return WholeWord
- }
- LeaveOnlyNumbers(String)
- ;Entfernt alle Zeichen außer den Ziffern aus dem String
- {
- stringlen, Laenge, String
- stringsplit, Stringarray, string
- Loop, %Laenge%
- {
- if stringarray%A_Index% is not integer
- {
- Stringarray%A_Index%=
- }
- x:= stringarray%A_Index%
- NewString=%NewString%%x%
- }
- String=%NewString%
- Return %String%
- }
- ; --------------------------------------------------------
- CharacterCount(String, Character)
- ;Zählt, wie oft das Zeichen "Character" im String vorkommt und gibt diese Anzahl zurück
- {
- x=0
- StringLen, Laenge, String
- StringSplit, Stringarray, string
- Loop, %Laenge%
- {
- if stringarray%A_Index% contains %Character%
- {
- x := x+1
- }
- }
- Return x
- }
- ; --------------------------------------------------------
- GetActiveControl()
- ;Gibt den Namen der aktiven Control zurück
- {
- WinGet, Active_Window_ID, ID, A
- ControlGetFocus, ActiveControl, A,
- Return, ActiveControl
- }
- ; --------------------------------------------------------
- GetActiveWindow()
- ; Gibt die ID-Nummer des gerade aktiven Fensters zurück
- {
- WinGet, Active_Window_ID, ID, A
- return, Active_Window_ID
- }
- ; --------------------------------------------------------
- ; k++ completely new function
- ReadIni()
- {
- global
- ; check if there is an ini file, if not create one
- IfNotExist,KollektorPP.ini
- {
- ini=
- (
- [SETTINGS]
- GUITitle=Kollektor++
- GUIStartKey=F1
- Editor=notepad.exe
- [SEARCH]
- CaseSensitive=0
- WholeWordCheck=OFF
- WordStart=OFF
- WhichColumn=1
- Separator=¤
- [VIEW]
- ViewOrder=1
- ModeNr=1
- Direction=0
- [LISTS]
- Def=SOFT.txt
- Cmd=CMD.txt
- Fol=FOL.txt
- Ahk=AHK.txt
- Nir=NIR.txt
- )
- FileAppend,%ini%,KollektorPP.ini
- ini=
- }
- ; read general settings
- IniRead,GUITitle,KollektorPP.ini,SETTINGS,GUITitle,Kollektor++
- IniRead,GUIStartKey,KollektorPP.ini,SETTINGS,GUIStartKey,F1
- IniRead,Editor,KollektorPP.ini,SETTINGS,Editor,notepad
- ; read search settings
- IniRead,CaseSensitive,KollektorPP.ini,SEARCH,CaseSensitive,0
- IniRead,WholeWordCheck,KollektorPP.ini,SEARCH,WholeWordCheck,OFF
- IniRead,WordStart,KollektorPP.ini,SEARCH,WordStart,OFF
- IniRead,WhichColumn,KollektorPP.ini,SEARCH,WhichColumn,1
- IniRead,Separator,KollektorPP.ini,SEARCH,Separator,¤
- ; read view settings
- IniRead,ViewOrder,KollektorPP.ini,VIEW,ViewOrder,1
- IniRead,ModeNr,KollektorPP.ini,VIEW,ModeNr,1
- IniRead,Direction,KollektorPP.ini,VIEW,Direction,0
- ; read default list
- IniRead,Def,KollektorPP.ini,LISTS,Def,SOFT.txt
- IniRead,Cmd,KollektorPP.ini,LISTS,Cmd,CMD.txt
- IniRead,Fol,KollektorPP.ini,LISTS,Fol,FOL.txt
- IniRead,Ahk,KollektorPP.ini,LISTS,Ahk,AHK.txt
- IniRead,Nir,KollektorPP.ini,LISTS,Nir,NIR.txt
- IniRead,Vbs,KollektorPP.ini,LISTS,Vbs,VBS.txt
- IniRead,Url,KollektorPP.ini,LISTS,Url,URL.txt
- IniRead,Lis,KollektorPP.ini,LISTS,Lis,LIST.txt
- IniRead,Script,KollektorPP.ini,LISTS,Script,SCRIPT.txt
- IniRead,Bash,KollektorPP.ini,LISTS,Bash,BASH.txt
- IniRead,Clip,KollektorPP.ini,LISTS,Clip,CLIP.txt
- IniRead,Code,KollektorPP.ini,LISTS,Code,CODE.txt
- IniRead,Text,KollektorPP.ini,LISTS,Text,TEXT.txt
- IniRead,Html,KollektorPP.ini,LISTS,Html,HTML.txt
- ; read triggers & associated files
- FileList = %DBFileChange%
- Loop
- {
- NumberOfLists:=A_Index
- IniRead,Trigger%NumberOfLists%,KollektorPP.ini,LISTS,Trigger%NumberOfLists%
- IniRead,File,KollektorPP.ini,LISTS,File%NumberOfLists%
- If (File = "ERROR") {
- Break
- }
- File%NumberOfLists% := File
- FileList .= "|" . File
- }
- NumberOfLists-=1
- }
- #R::Reload ;<-- ~ Reload Script ~
- #S::Suspend ;<-- ~ Suspend Script ~
- #P::Pause ;<-- ~ Pause Script ~
- #M::WinMinimize, ;<-- ~ Minimize Script ~
- ESC::ExitApp ;<-- ~ Exit Script ~
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement