Update:
Ich habe nun festgestellt, dass eine dauerhafte Änderung der Pfade gar nicht erforderlich ist, wenn Pfad setzen und Programmaufruf im selben Kontext stattfinden.
Deshalb habe ich mich nun für folgendes Vorgehen entschieden:
Code
:: =================================================================================================
:: Temporäre Umgebungsvariablen für SciTE setzen
:: =================================================================================================
:: Es gibt 2 Umgebungsvariablen, "SciTE_HOME" (standardmäßig bei SciTE4AutoIt nicht gesetzt)
:: und "SciTE_USERHOME" (standardmäßig: "C:\Users\<USER>\AppData\Local\AutoIt v3\SciTE").
:: Wenn nur SciTE_HOME gesetzt ist, sucht SciTE in diesem Ordner sowohl nach "SciTEGlobal.properties"
:: als auch nach "SciTEUser.properties" - DAS ermöglicht ein Arbeiten mit verschiedenen Versionen.
:: - "SciTE_USERHOME" wird gelöscht
:: - "SciTE_HOME" wird gesetzt auf den Pfad der SciTE-Version
:: =================================================================================================
:: Die Hauptinstallation von SciTE (SciTE4AutoIt) bleibt also mit ihren Properties unberührt.
:: In anderen SciTE-Versionen ist es wichtig, diese nicht per Installer zu installieren, sondern
:: immer die *.zip-Variante zu wählen. Dann ist gewährleistet, dass Properties-Pfade nicht gesetzt werden.
:: User- und Global.properties erstelle ich dann im Pfad der SciTE.exe.
:: =================================================================================================
:: Vorteil:
:: Nach dem Beenden der Nicht-SciTE4AutoIt-Version kann ich SciTE4AutoIt ganz normal aufrufen, da die
:: Änderungen nur temporär sind.
:: =================================================================================================
Alles anzeigen
AutoIt: SciTE_Starter.au3
;-- TIME_STAMP 2021-04-02 17:24:31
Opt('MustDeclareVars', 1)
#include <GuiListBox.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#cs "SciTE_Starter.ini" !!! ALLE PFADE BEZIEHEN SICH AUF MEINE INSTALLATION !!!
[SciTE4AutoIt]
name=SciTE4AutoIt v3.7.3
path=C:\Program Files (x86)\AutoIt3\SciTE
file=SciTE.exe
[SciTE_5.0_x86]
name=SciTE 5.0 32bit
path=C:\CODE\SciTE5.0\SciTE_5.0_x86
file=SciTE32.exe
[SciTE_5.0_x64]
name=SciTE 5.0 64bit
path=C:\CODE\SciTE5.0\SciTE_5.0_x64
file=SciTE.exe
#ce
Global $INI = @ScriptDir & '\SciTE_Starter.ini'
Global $aSciTEVer[2][3] = [[1],['SciTE4AutoIt v3.7.3','C:\Program Files (x86)\AutoIt3\SciTE','SciTE.exe']]
Global $aSecNames, $aSec, $iSel
If Not FileExists($INI) Then
IniWrite($INI, 'SciTE4AutoIt', 'name', 'SciTE4AutoIt v3.7.3')
IniWrite($INI, 'SciTE4AutoIt', 'path', 'C:\Program Files (x86)\AutoIt3\SciTE')
IniWrite($INI, 'SciTE4AutoIt', 'file', 'SciTE.exe')
Else
$aSecNames = IniReadSectionNames($INI)
For $i = 1 To $aSecNames[0]
If $aSecNames[$i] = 'SciTE4AutoIt' Then ContinueLoop
$aSciTEVer[0][0] += 1
ReDim $aSciTEVer[$aSciTEVer[0][0]+1][3]
$aSciTEVer[$aSciTEVer[0][0]][0] = IniRead($INI, $aSecNames[$i], 'name', '')
$aSciTEVer[$aSciTEVer[0][0]][1] = IniRead($INI, $aSecNames[$i], 'path', '')
$aSciTEVer[$aSciTEVer[0][0]][2] = IniRead($INI, $aSecNames[$i], 'file', '')
Next
EndIf
Global $hGui = GUICreate('SciTE-Starter', 400, 250)
Global $list = GUICtrlCreateList('', 10, 40, 380, 170, BitOR($WS_BORDER, $WS_VSCROLL)) ; darf nicht sortiert werden! SciTE4AutoIt muss an Pos. 1 sein.
Global $hList = GUICtrlGetHandle($list)
Global $showPath = GUICtrlCreateInput('', 10, 220, 380, 20, $ES_READONLY)
GUICtrlSetBkColor(-1, 0xFFFFFF)
GUICtrlSetFont(-1, Default, Default, Default, 'Consolas')
Global $start = GUICtrlCreateButton('Start', 310, 10, 80, 24)
_ListSet()
GUISetState()
While True
Switch GUIGetMsg()
Case -3
Exit
Case $list
$iSel = _LB_GetIndexSelected($hList)
If $iSel = -1 Then
GUICtrlSetData($showPath, '')
Else
GUICtrlSetData($showPath, $aSciTEVer[$iSel +1][1] & '\' & $aSciTEVer[$iSel +1][2])
EndIf
Case $start
$iSel = _LB_GetIndexSelected($hList)
If $iSel = -1 Then
MsgBox(0, 'FEHLER', 'Keine Version markiert!')
Else
_SetEnvAndRun($iSel)
Exit
EndIf
EndSwitch
WEnd
Func _ListSet()
_GUICtrlListBox_ResetContent($hList)
For $i = 1 To $aSciTEVer[0][0]
_GUICtrlListBox_AddString($hList, $aSciTEVer[$i][0])
Next
EndFunc
Func _LB_GetIndexSelected($_hWnd)
Local $count = _GUICtrlListBox_GetCount($_hWnd)
If $count = 0 Then Return -1
For $i = 1 To $count
If _GUICtrlListBox_GetSel($_hWnd, $i -1) Then Return $i-1
Next
Return -1
EndFunc
Func _SetEnvAndRun($_i)
Local Static $UserHomeAu3 = EnvGet('SciTE_USERHOME')
Local $path = $aSciTEVer[$_i +1][1]
Local $file = $aSciTEVer[$_i +1][2]
If $_i > 0 Then
EnvSet('SciTE_USERHOME','')
EnvSet('SciTE_HOME', $path)
Else
EnvSet('SciTE_USERHOME', $UserHomeAu3)
EnvSet('SciTE_HOME', '')
EndIf
ShellExecute('"' & $path & '\' & $file & '"')
EndFunc
Alles anzeigen