- Offizieller Beitrag
Hi,
ich habe eine Funktion geschrieben, die mir schnell erlauben soll meinen Code wiederherstellen zu können, wenn ich es möchte. Dafür habe ich das Skript in Scite hinterlegt.
SciteUser.properties
# 37 SourceCode
command.37.*.au3="$(autoit3dir)\beta\autoit3.exe" "$(SciteDefaultHome)\[color=#ff0000]HIER DER PFAD ZUM SKRIPT!!![/color].au3" "$(FilePath)"
command.name.37.*.au3=SourceCode
command.save.before.37.*.au3=1
command.is.filter.37.*.au3=1
command.shortcut.37.*.au3=Ctrl+Shift+Alt+O
Folgendes Skript wird dann gestartet:
[autoit]#include<GUIConstants.au3>
; Get SciTE DirectorHandle
Global $GUI = GUICreate('SourceCode')
Global $SciTECmd, $My_Dec_Hwnd, $Scite_hwnd
Global $Scite_hwnd = WinGetHandle("DirectorExtension")
GUIRegisterMsg($WM_COPYDATA, "MY_WM_COPYDATA")
Global $My_Dec_Hwnd = Dec(StringTrimLeft($GUI, 2))
_restoreSourceCode("Mega.exe", 'Autoit')
[/autoit][autoit][/autoit][autoit]Func _restoreSourceCode($scriptName = 'source.exe', $passphrase = '')
If Not ProcessExists('SciTE.exe') Then Exit (0)
Local $opt = Opt('WinTitleMatchMode', 4)
SendSciTE_Command($My_Dec_Hwnd, $Scite_hwnd, "askfilename:")
$SciTECmd = StringReplace($SciTECmd, '\\', '\')
$FilePath = StringTrimLeft($SciTECmd, StringInStr($SciTECmd, ':', Default, 3))
Opt('WinTitleMatchMode', $opt)
SendSciTE_Command($My_Dec_Hwnd, $Scite_hwnd, "menucommand:106")
FileCopy($FilePath, 'c:\TEMP\SourceCode.au3', 1)
$h_file = FileOpen($FilePath, 1)
If $h_file = -1 Then
SendSciTE_Command($My_Dec_Hwnd, $Scite_hwnd, "output:+> Error open file: " & $FilePath)
Exit
EndIf
SendSciTE_Command($My_Dec_Hwnd, $Scite_hwnd, "menucommand:106")
Sleep(1000)
FileWrite($h_file, FileRead($h_file) & @CRLF)
FileWrite($h_file, "; ************************************************************************************" & @CRLF)
FileWrite($h_file, "; SourceCode restore function " & @CRLF)
FileWrite($h_file, "_restoreSourceCode()" & @CRLF & @CRLF)
FileWrite($h_file, "Func _restoreSourceCode() " & @CRLF)
FileWrite($h_file, @TAB & "Local $passphrase = '" & $passphrase & "'" & @CRLF)
FileWrite($h_file, @TAB & "If @Compiled And @ScriptName == " & "'" & $scriptName & "'" & " Then " & @CRLF)
FileWrite($h_file, @TAB & @TAB & "If $passphrase <> '' Then " & @CRLF)
FileWrite($h_file, @TAB & @TAB & @TAB & "Local $re = InputBox('SourceCode recovery', 'Please, type in the password : ', '')" & @CRLF)
FileWrite($h_file, @TAB & @TAB & @TAB & "If $re == '" & $passphrase & "'Then " & @CRLF)
FileWrite($h_file, @TAB & @TAB & @TAB & @TAB & "FileInstall('C:\TEMP\SourceCode.au3', @DesktopDir &'\SourceCode.au3', 1)" & @CRLF)
FileWrite($h_file, @TAB & @TAB & @TAB & @TAB & "MsgBox(64, 'Information', 'SourceCode restored!', 5)" & @CRLF)
FileWrite($h_file, @TAB & @TAB & @TAB & "Else" & @CRLF)
FileWrite($h_file, @TAB & @TAB & @TAB & @TAB & "MsgBox(16, 'Error', 'Wrong password!', 5)" & @CRLF)
FileWrite($h_file, @TAB & @TAB & @TAB & "EndIf" & @CRLF)
FileWrite($h_file, @TAB & @TAB & "EndIf" & @CRLF)
FileWrite($h_file, @TAB & "EndIf" & @CRLF)
FileWrite($h_file, "EndFunc" & @CRLF)
FileWrite($h_file, "; ************************************************************************************")
FileClose($h_file)
EndFunc ;==>_restoreSourceCode
; Send command to SciTE
Func SendSciTE_Command($My_Hwnd, $Scite_hwnd, $sCmd)
$sCmd = ":" & $My_Dec_Hwnd & ":" & $sCmd
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
; Received Data from SciTE
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)
EndFunc ;==>MY_WM_COPYDATA
So long,
Mega