Scite Automatisierung!

  • So, ich würde gerne ein kleines Script schreiben, das den AutoIt-Source im Clipboard in einem geöffneten Scite Fenster einfügt, dann in Scite unter "File/Export/As Html" den Code ins Html umwandelt und die gespeicherte Datei wieder in die Clipboard-Ablage kopiert. Dies hat alles den Sinn, das ich nicht immer das per Hand machen muss (logisch :) ). Die Clipboard-Sache ist kein Problem, jedoch habe ich es noch nicht mal geschafft mit Run/bzw. ShellExecute Scite zu öffnen, ein neues Projekt anzulegen und einen Text einzufügen. Vielleicht hat von euch noch jemand eine Lösung. Ich würde mich sehr darübr freuen. 8o

    Einmal editiert, zuletzt von Faweyr (22. Juni 2010 um 17:55)

  • Lösung:

    Spoiler anzeigen
    [autoit]

    #include <ClipBoard.au3>
    #include <String.au3>
    #Include <File.au3>
    Opt("WinSearchChildren", 1)
    Local $state
    ;Laden
    $ScriptFile = _TempFile(Default, Default, ".au3", 7)
    $HTMLFile = _TempFile(Default, Default, ".htm", 7)

    [/autoit] [autoit][/autoit] [autoit]

    $sData = _ClipBoard_GetData()
    FileWrite($ScriptFile,$sData)

    [/autoit] [autoit][/autoit] [autoit]

    ;Bearbeiten:

    [/autoit] [autoit][/autoit] [autoit]

    $Scite_hwnd = WinGetHandle("DirectorExtension")

    [/autoit] [autoit][/autoit] [autoit]

    SendSciTE_Command(0, $Scite_hwnd, 'open:' & StringReplace($ScriptFile, "\", "\\"))
    SendSciTE_Command(0, $Scite_hwnd, 'exportashtml:' & StringReplace($HTMLFile, "\", "\\"))
    SendSciTE_Command(0, $Scite_hwnd, 'close:')

    [/autoit] [autoit][/autoit] [autoit]

    ;Speichern:
    $sData = FileRead($HTMLFile)
    $sSource = _StringBetween($sData,'<body bgcolor="#F0F4F9">','</body>')
    If not @error then _ClipBoard_SetData($sSource[0])

    [/autoit] [autoit][/autoit] [autoit]

    ;Löschen
    FileDelete($ScriptFile)
    FileDelete($HTMLFile)

    [/autoit] [autoit][/autoit] [autoit]

    ; Send command to SciTE
    Func SendSciTE_Command($My_Hwnd, $Scite_hwnd, $sCmd)
    ConsoleWrite('-->' & $sCmd & @lf )
    Local $CmdStruct = DllStructCreate('Char[' & StringLen($sCmd) + 1 & ']'),$WM_COPYDATA = 74
    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

    [/autoit]


    Und das Programm mit mit eigenem Source ausgeführt sieht es so aus:

    Spoiler anzeigen


    <span><span class="S11">#include</span><span class="S0"> </span><span class="S7">&lt;String.au3&gt;</span><br />
    <span class="S11">#Include</span><span class="S0"> </span><span class="S7">&lt;File.au3&gt;</span><br />
    <span class="S4">Opt</span><span class="S8">(</span><span class="S7">"WinSearchChildren"</span><span class="S8">,</span><span class="S0"> </span><span class="S3">1</span><span class="S8">)</span><br />
    <span class="S5">Local</span><span class="S0"> </span><span class="S9">$state</span><br />
    <span class="S1">;Laden</span><br />
    <span class="S9">$ScriptFile</span><span class="S0"> </span><span class="S8">=</span><span class="S0"> </span><span class="S15">_TempFile</span><span class="S8">(</span><span class="S5">Default</span><span class="S8">,</span><span class="S0"> </span><span class="S5">Default</span><span class="S8">,</span><span class="S0"> </span><span class="S7">".au3"</span><span class="S8">,</span><span class="S0"> </span><span class="S3">7</span><span class="S8">)</span><br />
    <span class="S9">$HTMLFile</span><span class="S0"> </span><span class="S8">=</span><span class="S0"> </span><span class="S15">_TempFile</span><span class="S8">(</span><span class="S5">Default</span><span class="S8">,</span><span class="S0"> </span><span class="S5">Default</span><span class="S8">,</span><span class="S0"> </span><span class="S7">".htm"</span><span class="S8">,</span><span class="S0"> </span><span class="S3">7</span><span class="S8">)</span><br />
    <br />
    <span class="S9">$sData</span><span class="S0"> </span><span class="S8">=</span><span class="S0"> </span><span class="S15">_ClipBoard_GetData</span><span class="S8">()</span><br />
    <span class="S4">FileWrite</span><span class="S8">(</span><span class="S9">$ScriptFile</span><span class="S8">,</span><span class="S9">$sData</span><span class="S8">)</span><br />
    <br />
    <span class="S1">;Bearbeiten:</span><br />
    <br />
    <span class="S9">$Scite_hwnd</span><span class="S0"> </span><span class="S8">=</span><span class="S0"> </span><span class="S4">WinGetHandle</span><span class="S8">(</span><span class="S7">"DirectorExtension"</span><span class="S8">)</span><br />
    <br />
    <span class="S0">SendSciTE_Command</span><span class="S8">(</span><span class="S3">0</span><span class="S8">,</span><span class="S0"> </span><span class="S9">$Scite_hwnd</span><span class="S8">,</span><span class="S0"> </span><span class="S7">'open:'</span><span class="S0"> </span><span class="S8">&amp;</span><span class="S0"> </span><span class="S4">StringReplace</span><span class="S8">(</span><span class="S9">$ScriptFile</span><span class="S8">,</span><span class="S0"> </span><span class="S7">"\"</span><span class="S8">,</span><span class="S0"> </span><span class="S7">"\\"</span><span class="S8">))</span><br />
    <span class="S0">SendSciTE_Command</span><span class="S8">(</span><span class="S3">0</span><span class="S8">,</span><span class="S0"> </span><span class="S9">$Scite_hwnd</span><span class="S8">,</span><span class="S0"> </span><span class="S7">'exportashtml:'</span><span class="S0"> </span><span class="S8">&amp;</span><span class="S0"> </span><span class="S4">StringReplace</span><span class="S8">(</span><span class="S9">$HTMLFile</span><span class="S8">,</span><span class="S0"> </span><span class="S7">"\"</span><span class="S8">,</span><span class="S0"> </span><span class="S7">"\\"</span><span class="S8">))</span><br />
    <span class="S0">SendSciTE_Command</span><span class="S8">(</span><span class="S3">0</span><span class="S8">,</span><span class="S0"> </span><span class="S9">$Scite_hwnd</span><span class="S8">,</span><span class="S0"> </span><span class="S7">'close:'</span><span class="S8">)</span><br />
    <br />
    <span class="S1">;Speichern:</span><br />
    <span class="S9">$sData</span><span class="S0"> </span><span class="S8">=</span><span class="S0"> </span><span class="S4">FileRead</span><span class="S8">(</span><span class="S9">$HTMLFile</span><span class="S8">)</span><br />
    <span class="S9">$sSource</span><span class="S0"> </span><span class="S8">=</span><span class="S0"> </span><span class="S15">_StringBetween</span><span class="S8">(</span><span class="S9">$sData</span><span class="S8">,</span><span class="S7">'&lt;body bgcolor="#F0F4F9"&gt;'</span><span class="S8">,</span><span class="S7">'&lt;/body&gt;'</span><span class="S8">)</span><br />
    <span class="S5">If</span><span class="S0"> </span><span class="S5">not</span><span class="S0"> </span><span class="S6">@error</span><span class="S0"> </span><span class="S5">then</span><span class="S0"> </span><span class="S15">_ClipBoard_SetData</span><span class="S8">(</span><span class="S9">$sSource</span><span class="S8">[</span><span class="S3">0</span><span class="S8">])</span><br />
    <br />
    <span class="S1">;Löschen</span><br />
    <span class="S4">FileDelete</span><span class="S8">(</span><span class="S9">$ScriptFile</span><span class="S8">)</span><br />
    <span class="S4">FileDelete</span><span class="S8">(</span><span class="S9">$HTMLFile</span><span class="S8">)</span><br />
    <br />
    <span class="S1">; Send command to SciTE</span><br />
    <span class="S5">Func</span><span class="S0"> SendSciTE_Command</span><span class="S8">(</span><span class="S9">$My_Hwnd</span><span class="S8">,</span><span class="S0"> </span><span class="S9">$Scite_hwnd</span><span class="S8">,</span><span class="S0"> </span><span class="S9">$sCmd</span><span class="S8">)</span><span class="S0"> </span><br />
    <span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S4">ConsoleWrite</span><span class="S8">(</span><span class="S7">'--&gt;'</span><span class="S0"> </span><span class="S8">&amp;</span><span class="S0"> </span><span class="S9">$sCmd</span><span class="S0"> </span><span class="S8">&amp;</span><span class="S0"> </span><span class="S6">@lf</span><span class="S0"> </span><span class="S8">)</span><br />
    <span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">Local</span><span class="S0"> </span><span class="S9">$CmdStruct</span><span class="S0"> </span><span class="S8">=</span><span class="S0"> </span><span class="S4">DllStructCreate</span><span class="S8">(</span><span class="S7">'Char['</span><span class="S0"> </span><span class="S8">&amp;</span><span class="S0"> </span><span class="S4">StringLen</span><span class="S8">(</span><span class="S9">$sCmd</span><span class="S8">)</span><span class="S0"> </span><span class="S8">+</span><span class="S0"> </span><span class="S3">1</span><span class="S0"> </span><span class="S8">&amp;</span><span class="S0"> </span><span class="S7">']'</span><span class="S8">),</span><span class="S9">$WM_COPYDATA</span><span class="S0"> </span><span class="S8">=</span><span class="S0"> </span><span class="S3">74</span><br />
    <span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S4">DllStructSetData</span><span class="S8">(</span><span class="S9">$CmdStruct</span><span class="S8">,</span><span class="S0"> </span><span class="S3">1</span><span class="S8">,</span><span class="S0"> </span><span class="S9">$sCmd</span><span class="S8">)</span><br />
    <span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S5">Local</span><span class="S0"> </span><span class="S9">$COPYDATA</span><span class="S0"> </span><span class="S8">=</span><span class="S0"> </span><span class="S4">DllStructCreate</span><span class="S8">(</span><span class="S7">'Ptr;DWord;Ptr'</span><span class="S8">)</span><br />
    <span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S4">DllStructSetData</span><span class="S8">(</span><span class="S9">$COPYDATA</span><span class="S8">,</span><span class="S0"> </span><span class="S3">1</span><span class="S8">,</span><span class="S0"> </span><span class="S3">1</span><span class="S8">)</span><br />
    <span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S4">DllStructSetData</span><span class="S8">(</span><span class="S9">$COPYDATA</span><span class="S8">,</span><span class="S0"> </span><span class="S3">2</span><span class="S8">,</span><span class="S0"> </span><span class="S4">StringLen</span><span class="S8">(</span><span class="S9">$sCmd</span><span class="S8">)</span><span class="S0"> </span><span class="S8">+</span><span class="S0"> </span><span class="S3">1</span><span class="S8">)</span><br />
    <span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S4">DllStructSetData</span><span class="S8">(</span><span class="S9">$COPYDATA</span><span class="S8">,</span><span class="S0"> </span><span class="S3">3</span><span class="S8">,</span><span class="S0"> </span><span class="S4">DllStructGetPtr</span><span class="S8">(</span><span class="S9">$CmdStruct</span><span class="S8">))</span><br />
    <span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S4">DllCall</span><span class="S8">(</span><span class="S7">'User32.dll'</span><span class="S8">,</span><span class="S0"> </span><span class="S7">'None'</span><span class="S8">,</span><span class="S0"> </span><span class="S7">'SendMessage'</span><span class="S8">,</span><span class="S0"> </span><span class="S7">'HWnd'</span><span class="S8">,</span><span class="S0"> </span><span class="S9">$Scite_hwnd</span><span class="S8">,</span><span class="S0"> </span><span class="S8">_</span><br />
    <span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S7">'Int'</span><span class="S8">,</span><span class="S0"> </span><span class="S9">$WM_COPYDATA</span><span class="S8">,</span><span class="S0"> </span><span class="S7">'HWnd'</span><span class="S8">,</span><span class="S0"> </span><span class="S9">$My_Hwnd</span><span class="S8">,</span><span class="S0"> </span><span class="S8">_</span><br />
    <span class="S0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="S7">'Ptr'</span><span class="S8">,</span><span class="S0"> </span><span class="S4">DllStructGetPtr</span><span class="S8">(</span><span class="S9">$COPYDATA</span><span class="S8">))</span><br />
    <span class="S5">EndFunc</span><span class="S1">;==&gt;SendSciTE_Command</span></span>