- Offizieller Beitrag
Hi,
da bei Skripten ja keine automatische Versionsfortschreibung vorhanden ist und ich meine Skripte auf mehreren PC und Sticks hin- und herschleppe ist es manchmal etwas schwierig, die Übersicht zu behalten, welche Version denn die aktuelle ist.
Darum habe ich mir überlegt, einfach bei Bedarf eine Funktion "Speichern mit TimeStamp" in SciTE zu nutzen.
Sieht dann so aus, dass am Skriptanfang eine Region eingefügt wird:
#Region - TimeStamp
; 2011-04-21 14:17:49
#EndRegion
bzw. wenn schon vorhanden wird die Zeit aktualisiert.
2 Probleme habe ich derzeit noch:1.
Ist das zu speichernde Skript vorher editiert wurden erscheint eine Sicherheitsabfrage zum Speichern. Sicher könnte ich das Fenster abfangen und automatisiert klicken, aber das kanns ja nicht sein. Schließlich popt das Fenster ja beim händischen Speichern auch nicht auf und ich greife direkt auf das Scintilla-Menü: Speichern zu.
Bevor ich überhaupt auf das aktuelle Skript zugreifen kann, MUSS es gespeichert werden über die Anweisung "command.save.before.40.*.au3=1"
Dann kann ich mir auch das Speichern am Anfang meines Skriptes sparen. 2.
Alle Versuche die Parameter für den zu selektierenden Bereich zu setzen bleiben ohne Erfolg. Wenn bereits ein Zeitstempel vorhanden ist, muß ich die Zeile selektieren und die Selektion mit der neuen Zeit ersetzen.
Im Moment löse ich das so, dass ich in die entsprechende Zeile wechsle an Spalte 1 und dort die neue Zeit einfüge. Anschließen steht der Cursor am Ende des eingefügten Inhalts - vor der alten Zeit. Mithilfe von Send() :wacko: markiere ich nun den Rest und lösche. Finde ich allerdings wenig prickelnd.
Mit Hilfe von Jos gelöst.
Falls ihr Ideen habt - immer her damit.
Einbindung wieder über die SciTEUser.properties
# END => DO NOT CHANGE ANYTHING BEFORE THIS LINE #-#-#-#-#-#
#40 Save With Time Stamp
command.40.*.au3="$(autoit3dir)\autoit3.exe" "C:\SHARE\Code_AutoIt\TEST\SaveWithTimeStamp.au3"
command.name.40.*.au3=SaveWithTimeStamp
command.save.before.40.*.au3=1
command.is.filter.40.*.au3=1
command.shortcut.40.*.au3=Ctrl+Shift+Alt+T
Pfad und Nummer natürlich anpassen.
Spoiler anzeigen
#cs ==== Aufruf über SciTE Menü (SciTEUser.properties entry:) ===
#40 Save With Time Stamp
command.40.*.au3="$(autoit3dir)\autoit3.exe" "C:\SHARE\Code_AutoIt\TEST\SaveWithTimeStamp.au3"
command.name.40.*.au3=SaveWithTimeStamp
command.save.before.40.*.au3=1
command.is.filter.40.*.au3=1
command.shortcut.40.*.au3=Ctrl+Shift+Alt+T
#ce ==============================================================
[/autoit] [autoit][/autoit] [autoit]Opt("WinSearchChildren", 1)
Global Const $WM_COPYDATA = 74, $IDM_SAVE = 106
Global $My_Hwnd, $Scite_hwnd, $My_Dec_Hwnd, $SciTECmd, $sReceive = ''
Local $sFile, $sSelection, $iLine
_StartUpSciTEInterface()
[/autoit] [autoit][/autoit] [autoit]SendSciTE_Command($My_Hwnd, $Scite_hwnd, "goto:1,1")
SendSciTE_Command($My_Hwnd, $Scite_hwnd, "find:#Region - TimeStamp")
SendSciTE_Command($My_Hwnd, $Scite_hwnd, "askproperty:CurrentSelection")
$sSelection = StringRegExp($sReceive, '(?::\d+:macro:stringinfo:)(.*)', 1)
If @error Then Exit
If $sSelection[0] <> "#Region - TimeStamp" Then
SendSciTE_Command($My_Hwnd, $Scite_hwnd, "insert:" & _
"#Region - TimeStamp\n" & _
"; " & @YEAR & "-" & @MON & "-" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC & "\n" & _
"#EndRegion\n\n" & $sSelection[0])
Else
SendSciTE_Command($My_Hwnd, $Scite_hwnd, "askproperty:SelectionStartLine")
$iLine = StringRegExp($sReceive, '(?::\d+:macro:stringinfo:)(\d+)', 1)
If @error Then Exit
SendSciTE_Command($My_Hwnd, $Scite_hwnd, "goto:" & $iLine[0] +1 & ",1")
SendSciTE_Command($My_Hwnd, $Scite_hwnd, "extender:dostring editor:LineDelete()")
SendSciTE_Command($My_Hwnd, $Scite_hwnd, "insert:" & _
"; " & @YEAR & "-" & @MON & "-" & @MDAY & " " & @HOUR & ":" & @MIN & ":" & @SEC & '\n')
EndIf
SendSciTE_Command($My_Hwnd, $Scite_hwnd, "menucommand:" & $IDM_SAVE)
[/autoit] [autoit][/autoit] [autoit]Func _StartUpSciTEInterface()
$Scite_hwnd = WinGetHandle("DirectorExtension")
$My_Hwnd = GUICreate("SciTE interface", 400, 600, 10, 10)
$My_Dec_Hwnd = Dec(StringTrimLeft($My_Hwnd, 2))
GUIRegisterMsg($WM_COPYDATA, "MY_WM_COPYDATA")
EndFunc
Func SendSciTE_Command($My_Hwnd, $Scite_hwnd, $sCmd)
$sCmd = ":" & $My_Dec_Hwnd & ":" & $sCmd
ConsoleWrite('-->SendSciTE_Command >' & $sCmd & @LF)
Local $CmdStruct = DllStructCreate('Char[' & StringLen($sCmd) + 1 & ']')
DllStructSetData($CmdStruct, 1, $sCmd)
Local $COPYDATA = DllStructCreate('Ptr;DWord;Ptr')
DllStructSetData($COPYDATA, 1, 1)
DllStructSetData($COPYDATA, 2, StringLen($sCmd) + 1)
DllStructSetData($COPYDATA, 3, DllStructGetPtr($CmdStruct))
DllCall('User32.dll', 'None', 'SendMessage', 'HWnd', $Scite_hwnd, _
'Int', $WM_COPYDATA, 'HWnd', $My_Hwnd, _
'Ptr', DllStructGetPtr($COPYDATA))
EndFunc ;==>SendSciTE_Command
Func MY_WM_COPYDATA($hWnd, $msg, $wParam, $lParam)
Local $COPYDATA = DllStructCreate('Ptr;DWord;Ptr', $lParam)
$SciTECmdLen = DllStructGetData($COPYDATA, 2)
Local $CmdStruct = DllStructCreate('Char[255]', DllStructGetData($COPYDATA, 3))
$SciTECmd = StringLeft(DllStructGetData($CmdStruct, 1), $SciTECmdLen)
If StringInStr($SciTECmd, ":macro:stringinfo:", 1) Or _
StringInStr($SciTECmd, ":filename:", 1) Then
If $sReceive <> $SciTECmd Then $sReceive = $SciTECmd
EndIf
ConsoleWrite('<--Receive' & $SciTECmd & @LF)
EndFunc ;==>MY_WM_COPYDATA
Edit 22.04.11: Habe auch mal eine Anfrage im EN-Forum gepostet. ==> brachte die Lösung