- Offizieller Beitrag
Hi,
kaum einer nutzt wohl den eher funktionslosen, windowseigenen Editor notepad. Zu viele schöne Alternativen gibt es da.
Mit folgendem Programm könnt ihr jeden beliebigen Editor als Ersatz für Notepad festlegen. Alle internen Notepadaufrufe landen dann bei dem Editor eurer Wahl.
Voraussetzung:
Euer Editor ist eine EXE (jEdit fällt also aus) und ruft die Dateien in der Form "EDITOR.EXE %1" auf.
Wie gehts?
Es gibt die Launcher-Datei (notepad.au3), die als "notepad.exe" kompiliert werden muß. Sie ersetzt das Original und stellt den Kontakt zu eurem Editor her.
Die zweite Datei (AlternateNotepad.au3) dient zur Installation, Deinstallation des Launchers und zum Einrichten oder Wechseln des Alternativen Editors.
Dazu wird ein Reg-Schlüssel angelegt, der auf die Alternative verweist.
Die Original Notepad-Datei wird gesichert.
Kompiliert die Datei als "AlternateNotepad.EXE" und ruft sie wie folgt auf:
"AlternateNotepad.EXE" Installiert Launcher, setzt Alternativen Editor
"AlternateNotepad.EXE /e" Wechselt den Alternativen Editor
"AlternateNotepad.EXE /b" Rollback - stellt Originalzustand wieder her
Getestet habe ich es mit "Notepad++", "Notepad2" und "SciTE".
EDIT:
Eine Änderung am Launcher.
Ich hatte nicht berücksichtigt, dass im Editorpfad Leerzeichen enthalten sein können. Ist jetzt gefixt.
Launcher:
Spoiler anzeigen
; Launcher für alternativen Editor statt Notepad (ersetzt notepad.exe)
[/autoit] [autoit][/autoit] [autoit]Dim $FullEditorPath = RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\AlternateEditor', 'FullPath')
Dim $Line = ''
If $CmdLine[0] > 0 Then
For $i = 1 To $CmdLine[0]
If $i = 1 Then
$Line &= $CmdLine[$i]
Else
$Line &= ' ' & $CmdLine[$i]
EndIf
Next
Run( '"' & $FullEditorPath & '" "' & $Line & '"' )
Else
Run( '"' & $FullEditorPath & '"' )
EndIf
AlternateNotepad:
Spoiler anzeigen
; Installation/DeInstallation Launcher für Notepad Ersatz
[/autoit] [autoit][/autoit] [autoit]Global $arDest[4] = [ _
@WindowsDir & '\servicepackfiles\i386\', _
@WindowsDir & '\system32\dllcache\', _
@WindowsDir & '\system32\', _
@WindowsDir & '\']
Global $start = 0
If Not FileExists(@WindowsDir & '\servicepackfiles\i386\notepad.exe') Then $start = 1
If $CmdLine[0] > 0 Then
Switch $CmdLine[1]
Case "/b"
_RollBack() ; Schalter '/b' für: RollBack (Originalzustand)
Case "/e"
_SetAlternate(False) ; Schalter '/e' für: nur neuer Editor
EndSwitch
Else
_SetAlternate(True)
EndIf
Func _SetAlternate($FULL=True)
Dim $alternateEditorPath = ''
If $FULL Then
Dim $source = ''
Do
$source = FileOpenDialog("Pfad der Launcher Datei auswählen", @ScriptDir, "(*.exe)")
If $source = '' Then
If MsgBox(262180, 'Keine Datei ausgewählt', 'Wollen Sie nochmals wählen?') = 7 Then Exit
EndIf
Until $source <> ''
FileCopy(@WindowsDir & '\notepad.exe', @WindowsDir & '\notepad.exe.org') ; Sicherheitskopie Original
Local $sourceFile = StringTrimLeft($source, StringInStr($source, '\', 1, -1))
For $i = $start To UBound($arDest) -1
If FileCopy($source, $arDest[$i] & $sourceFile, 1) = 0 Then
MsgBox(262160, 'Kopierfehler', 'Die Launcher Datei konnte nicht in den Pfad:' & @LF & _
$arDest[$i] & @LF & @LF & _
'kopiert werden. Bitte das Programm mit dem "Rollback-Parameter /b" aufrufen.' )
Exit
EndIf
Next
EndIf
Do
$alternateEditorPath = FileOpenDialog("Pfad des alternativen Editors auswählen", @HomeDrive, "(*.exe)")
If $alternateEditorPath = '' Then
If MsgBox(262180, 'Keine Datei ausgewählt', 'Wollen Sie nochmals wählen?') = 7 Then Exit
EndIf
Until $alternateEditorPath <> ''
If RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\AlternateEditor', 'FullPath', "REG_SZ", $alternateEditorPath) = 0 Then
MsgBox(262160, 'Registryfehler', 'Der Schlüssel:' & @LF & _
'HKEY_LOCAL_MACHINE\SOFTWARE\AlternateEditor, FullPath, REG_SZ, ' & $alternateEditorPath & @LF & _
'konnte nicht in die Registry geschrieben werden.' & @LF & _
'Bitte das Programm mit dem "Rollback-Parameter /b" aufrufen.' )
Exit
Else
MsgBox(262208, 'Erfolg', 'Alle Einträge wurden erfolgreich ausgeführt.')
EndIf
EndFunc ;==>_SetAlternate
Func _RollBack()
If Not FileExists(@WindowsDir & '\notepad.exe.org') Then
MsgBox(262160, 'Dateifehler', 'Die Sicherung der Originaldatei:' & @LF & _
@WindowsDir & '\notepad.exe.org' & @LF & _
'ist nicht vorhanden!' & @LF & _
'Eine Wiederherstellung ohne diese Datei ist nicht möglich!')
Exit
EndIf
For $i = $start To UBound($arDest) -1
If FileCopy(@WindowsDir & '\notepad.exe.org', $arDest[$i] & 'notepad.exe', 1) = 0 Then
MsgBox(262160, 'Kopierfehler', 'Die Original Datei konnte nicht in den Pfad:' & @LF & _
$arDest[$i] & @LF & _
'kopiert werden.' & @LF & @LF & _
'Bitte kopieren Sie die Original "notepad.exe" in GENAU dieser Reihenfolge' & @LF & _
'in die folgenden Pfade:' & @LF & _
@WindowsDir & '\servicepackfiles\i386\ (sofern vorhanden)' & @LF & _
@WindowsDir & '\system32\dllcache\' & @LF & _
@WindowsDir & '\system32\' & @LF & _
@WindowsDir & '\')
Exit
EndIf
Next
RegDelete('HKEY_LOCAL_MACHINE\SOFTWARE\AlternateEditor')
MsgBox(262208, 'Erfolg', 'Der Original Windows-Editor "notepad"' & @LF & _
'ist ab sofort wieder Standardeditor.')
EndFunc ;==>_RollBack
Edit2:
Ich habe jetzt noch ein Variante mit GUI erstellt. Hierbei wird die Launcher-Datei mit in das Skript des Alternate Programms eingebunden.
Dazu zuerst die Launcher-Datei (notepad.exe) kompilieren und den Quell-Pfad dieser Datei im Skript 'Alter_Notepad.au3' im Funktionsaufruf FileInstall() in Zeile 101 als String eintragen (FileInstall erfordert für die Quellangabe Stringform).
Jetzt kann 'Alter_Notepad' kompiliert werden und auf jedem PC (Win2k, WinXP) eingesetzt werden.
Ich habe festgestellt, dass Win2k Pro und WinXP Pro anstandslos das Kopieren der Launcherdatei tolerieren.
WinXP Home bringt dort eine Sicherheitsabfrage. Aus diesem Grund habe ich nach dem Kopiervorgang eine Schleife, die 6 Sekunden auf das Sicherheitsfenster wartet (das Fenster erschien bei mir nach gut 4 s). Erscheint die Abfrage früher wird sie weggeklickt und das Skript fortgesetzt, erscheint sie nicht, wird das Skript nach 6 s fortgesetzt.
Alter_Notepad mit GUI:
Spoiler anzeigen
#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1)
Opt("WinTitleMatchMode", 2)
Global $StandarEditorName = 'Microsoft Windows notepad.exe'
Global $arRadio[3], $InCurrEditor, $LabelSuccess
Global $alternateEditorPath = ''
Global $arDest[4] = [ _
@WindowsDir & '\servicepackfiles\i386\notepad.exe', _
@WindowsDir & '\system32\dllcache\notepad.exe', _
@WindowsDir & '\system32\notepad.exe', _
@WindowsDir & '\notepad.exe']
Global $start = 0, $RoyalBlue = 0x4169E1, $Orange = 0xFFA500
If Not FileExists(@WindowsDir & '\servicepackfiles\i386\notepad.exe') Then $start = 1
$GUIAlternateEditor = GUICreate("Standard Editor wechseln (Win2k, WinXP SP2) By BugFix " & _
"( [email='bugfix@autoit.de'][/email] )", 563, 239, 193, 115)
GUISetOnEvent($GUI_EVENT_CLOSE, "GUIAlternateEditorClose")
GUISetBkColor($RoyalBlue, $GUIAlternateEditor)
$Group1 = GUICtrlCreateGroup("", 10, 10, 540, 209)
$arRadio[0] = GUICtrlCreateRadio("Launcher installieren, Editor festlegen", 150, 71, 206, 17)
$arRadio[1] = GUICtrlCreateRadio("Neuen Editor festlegen", 150, 98, 143, 17)
$arRadio[2] = GUICtrlCreateRadio("Windows Standard wiederherstellen", 150, 126, 196, 17)
$BtGo = GUICtrlCreateButton("Ausführen", 465, 123, 70, 20)
GUICtrlSetOnEvent(-1, '_Go')
$Label1 = GUICtrlCreateLabel("Aktueller Standard Editor:", 20, 40, 124, 17)
$InCurrEditor = GUICtrlCreateInput("", 150, 37, 385, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY))
$LabelSuccess = GUICtrlCreateLabel("Bitte Aktion wählen", 150, 174, 385, 23)
GUICtrlSetFont(-1, 10, 800, 0, "Comic Sans MS")
GUICtrlSetColor(-1, $Orange)
GUICtrlCreateGroup("", -99, -99, 1, 1)
If StringLeft(FileGetVersion(@WindowsDir&'\notepad.exe'), 1) = 3 Then
GUICtrlSetData($InCurrEditor, RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\AlternateEditor', 'FullPath'))
GUICtrlSetState($arRadio[1], $GUI_CHECKED)
GUICtrlSetState($arRadio[0], $GUI_DISABLE)
Else
GUICtrlSetData($InCurrEditor, $StandarEditorName)
GUICtrlSetState($arRadio[1], $GUI_DISABLE)
GUICtrlSetState($arRadio[2], $GUI_DISABLE)
GUICtrlSetState($arRadio[0], $GUI_CHECKED)
EndIf
GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]While 1
Sleep(100)
WEnd
Func GUIAlternateEditorClose()
Exit
EndFunc
Func _Go()
GUICtrlSetState($BtGo, $GUI_DISABLE)
GUICtrlSetData($LabelSuccess, '')
For $i = 0 To 2
If BitAND(GUICtrlRead($arRadio[$i]), $GUI_CHECKED) Then ExitLoop
Next
Switch $i
Case 0
_LauncherInstall()
Local $begin = TimerInit()
Do
If WinExists('Windows-Dateischutz') Then
Send("{ESC}")
WinWaitActive('Windows-Dateischutz', 'Sie müssen die Dateien')
Send("!j")
$begin = 6000
EndIf
Sleep(100)
Until TimerDiff($begin) >= 6000
GUICtrlSetData($LabelSuccess, '')
_AlternateSelect()
GUICtrlSetState($arRadio[0], $GUI_DISABLE)
GUICtrlSetState($arRadio[1], $GUI_ENABLE)
GUICtrlSetState($arRadio[2], $GUI_ENABLE)
GUICtrlSetState($arRadio[1], $GUI_CHECKED)
Case 1
_AlternateSelect()
Case 2
_RollBack()
EndSwitch
GUICtrlSetState($BtGo, $GUI_ENABLE)
EndFunc ;==>_Go
Func _LauncherInstall()
RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\AlternateEditor', 'OriginalSaved')
If @error Then
If FileCopy(@WindowsDir & '\notepad.exe', @WindowsDir & '\notepad.exe.org') = 0 Then ; Sicherheitskopie Original
MsgBox(262160, 'Kopierfehler', 'Die Sicherheitskopie der "notepad.exe" konnte nicht angelegt werden.')
Return
EndIf
If RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\AlternateEditor', 'OriginalSaved', "REG_SZ", 1) = 0 Then
MsgBox(262160, 'Registryfehler', 'Eintrag in die Registry fehlgeschlagen.')
Return
EndIf
EndIf
Local $fehler = 0
For $i = $start To UBound($arDest) -1 ; ####### QUELLPFAD für FileInstall anpassen !!! ########
If FileInstall("C:\Dokumente und Einstellungen\Standard\Desktop\SCRIPTING\AU3-Scripte\Alternate Notepad\notepad.EXE", _
$arDest[$i], 1) = 0 Then
$fehler += 1
EndIf
Next
If $fehler > 0 Then
GUICtrlSetData($LabelSuccess, 'Fehler bei Installation. Wiederherstellung starten.')
Return
EndIf
GUICtrlSetData($LabelSuccess, 'Installation Launcher erfolgreich. Starte Editorwahl.')
EndFunc ;==>_LauncherInstall
Func _AlternateSelect()
GUICtrlSetData($LabelSuccess, '')
Do
$alternateEditorPath = FileOpenDialog("Pfad des alternativen Editors auswählen", @HomeDrive, "(*.exe)")
If $alternateEditorPath = '' Then
If MsgBox(262180, 'Keine Datei ausgewählt', 'Wollen Sie nochmals wählen?') = 7 Then Return 0
EndIf
Until $alternateEditorPath <> ''
If RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\AlternateEditor', 'FullPath', "REG_SZ", $alternateEditorPath) = 0 Then
GUICtrlSetData($LabelSuccess, 'Auswahl/Registrierung Editor fehlgeschlagen.')
Else
GUICtrlSetData($LabelSuccess, 'Alle Vorgänge wurden erfolgreich abgeschlossen.')
GUICtrlSetData($InCurrEditor, $alternateEditorPath)
EndIf
EndFunc ;==>_AlternateSelect
Func _RollBack()
If Not FileExists(@WindowsDir & '\notepad.exe.org') Then
MsgBox(262160, 'Dateifehler', 'Die Sicherung der Originaldatei:' & @LF & _
@WindowsDir & '\notepad.exe.org' & @LF & _
'ist nicht vorhanden!' & @LF & _
'Eine Wiederherstellung ohne diese Datei ist nicht möglich!')
Return
EndIf
For $i = $start To UBound($arDest) -1
If FileCopy(@WindowsDir & '\notepad.exe.org', $arDest[$i], 1) = 0 Then
MsgBox(262160, 'Kopierfehler', 'Die Original Datei konnte nicht in den Pfad:' & @LF & _
$arDest[$i] & @LF & _
'kopiert werden.' & @LF & @LF & _
'Bitte kopieren Sie die Original "notepad.exe" in GENAU dieser Reihenfolge' & @LF & _
'in die folgenden Pfade:' & @LF & _
@WindowsDir & '\servicepackfiles\i386\ (sofern vorhanden)' & @LF & _
@WindowsDir & '\system32\dllcache\' & @LF & _
@WindowsDir & '\system32\' & @LF & _
@WindowsDir & '\')
GUICtrlSetData($LabelSuccess, 'Fehler bei Wiederherstellung.')
Return
EndIf
Next
RegDelete('HKEY_LOCAL_MACHINE\SOFTWARE\AlternateEditor', 'FullPath')
GUICtrlSetData($LabelSuccess, 'Wiederherstellung erfolgreich beendet.')
GUICtrlSetData($InCurrEditor, $StandarEditorName)
GUICtrlSetState($arRadio[0], $GUI_ENABLE)
GUICtrlSetState($arRadio[1], $GUI_DISABLE)
GUICtrlSetState($arRadio[2], $GUI_DISABLE)
GUICtrlSetState($arRadio[0], $GUI_CHECKED)
EndFunc ;==>_RollBack