exe generieren

  • Hallo,

    Ich muß viele kleine *.exe Dateien machen.
    Das möchte ich gerne automatisieren.

    Mein Ziel:

    1. In der Zwischenablage befindet sich mein QuelllCode
    2. Dieser Code wird m. RegEx bearbeitet.

    bis hierhin ok.

    Nun möchte ich dass dieser Code in eine Vorlage.au3 eingefügt wird
    und eine Exe im Scriptdir Verzeichnis erzeugt wird.

    Spoiler anzeigen
    [autoit]


    Local $sInput = ClipGet()

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

    Local $sOutput = StringRegExpReplace($sInput,"(\))",",50")
    MsgBox(4096,"",$sOutput)

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

    ;hier soll der neue Code rein

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

    ; Meine Zwischenablage (nicht sichtbar)
    ;~ MouseClick("left",55,107,1)
    ;~ MouseClick("left",61,143,1)
    ;~ MouseClick("left",89,244,1)
    ;~ MouseClick("left",91,299,1)
    ;~ MouseClick("left",62,351,1)
    ;~ MouseClick("left",63,385,1)
    ;~ MouseClick("left",52,603,1)
    ;~ MouseClick("left",44,163,1)

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

    InputBox("Neue Datei","Exe Datei generieren","Meine Datei.exe")

    [/autoit]

    Wie kann man so etwas am besten organisieren.
    Ich dachte ich baue mir eine au3.Vorlage
    Und an einem Platzhalter soll der neue Code reingeneriert werden! Und dann wird automatisch Exe erzeugt?

    Ich tappe noch etwas im dunkeln, wie man das am besten realisieren kann.


    Liebe Grüße
    Ilse ;)

  • Ich würde mich eher mal fragen warum du zig exe Dateien erstellen willst. Wenn sich die Programme nur in den Klickkoordinaten unterscheiden wovon ich anhand deines Schnippsels mal ausgehe, dann machts ja wohl mehr Sinn eine exe zu erstellen und die variablen "Klick-Daten" per ini zu regeln. Ggf. macht es dann noch Sinn cmdline Parameter zu definieren um den entsprechenden Modus (Welche Sektion der ini wird gelesen?) beim Programmstart festzulegen.

  • Hallo Misterspeed,

    schön dass du dich meldest.
    Ich werde alles mit mehreren ini's steuern.
    Das klappt auch soweit.

    Aber ich muß trotzdem exe Dateien erstellen.
    Das habe ich per code noch nie gemacht.
    Du meinst umgekehrt?
    Alle Clicks in die Ini?

    Meine Ini sieht so aus
    z.B. Programm.ini

    Spoiler anzeigen
    [autoit]


    [Namen]
    1=2011
    2=2012
    3=2013

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

    [Link]
    1=2011.exe
    2=2012.exe
    3=2013.exe

    [/autoit]


    Ich wähle in meiner Gui z.B. Die Programm.ini (COMBOBOX)
    und kann die Exe mit den Klicks starten.
    [LINK]
    1=2011.exe
    2=2012.exe
    3=2013.exe
    Oder ich wähle die Einstellungen.ini......(COMBOBOX)
    1=2011-Einstellung.exe
    2=2012-Einstellung.exe
    3=2013-Einstellung.exe

    Die exe Dateien liegen am Ende also alle im Scriptverzeichnis!
    Ich habe mir bereits eine Gui gebastelt mit der ich die Inis und dann
    die EXE Daten starten kann.

    Es wäre eine Erleichterung, wenn ich anhand der MouseClick Daten
    die Exe erstllen kann und diese dann mit Namen in der Ini landet.

    Spoiler anzeigen
    [autoit]


    Local $sInput = ClipGet()

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

    Local $sOutput = StringRegExpReplace($sInput,"(\))",",50")
    MsgBox(4096,"",$sOutput)

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

    ;hier soll der neue Code rein

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

    ; Meine Zwischenablage (nicht sichtbar)
    ;~ MouseClick("left",55,107,1)
    ;~ MouseClick("left",61,143,1)
    ;~ MouseClick("left",89,244,1)
    ;~ MouseClick("left",91,299,1)
    ;~ MouseClick("left",62,351,1)
    ;~ MouseClick("left",63,385,1)
    ;~ MouseClick("left",52,603,1)
    ;~ MouseClick("left",44,163,1)

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

    InputBox("Neue Datei","Exe Datei generieren","Meine Datei.exe")

    [/autoit]

    So muß ich für jede Datei alles von Hand machen.
    Ich dachte schon daran, in WordPad eine neue Datei anzulegen,
    den Code einzufügen als au3 speichern usw. aber vielleicht gibt es was eleganteres!


    Liebe Grüße
    Ilse ;)

    Einmal editiert, zuletzt von Ilse (4. März 2014 um 20:14)

  • Sorry Oscar (neuer Thread)

    Vielleicht kann mir jemand bei diesem Script
    von Autobert helfen.
    Das wäre genau die Lösung, muß aber angepasst werden.

    Textbausteine

    Spoiler anzeigen
    [autoit]


    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_outfile=TextBausteine.exe
    #AutoIt3Wrapper_Compression=4
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include<WindowsConstants.au3>
    #include <GuiComboBox.au3>

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

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.6.1
    Author: AutoBert: http://www.autoit.de/index.php?page…4445#post164445

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

    Skriptbeispiel für den Umgang mit INI-Files und ComboBox und Edit
    #ce ----------------------------------------------------------------------------

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

    Opt('GUIOnEventMode', 1)

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

    Const $sElect = "Code auswählen"
    Global $sTB, $sIni = @ScriptDir & "\TextBausteine.ini"

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

    If Not FileExists($sIni) Then ;Ini-File vorbelegen
    $sData = "Hilfe=Hier kannst du dir die Hilfe herunterladen." & @CRLF
    $sData &= "Tutorial=Hier gibt es ein Tutorial: http://wiki.autoit.de/wiki/index.php/Tutorial" & @CRLF
    $sData &= "richtigPosten=Autoit-Anfänger Guide / Wie poste ich richtig??" & @CRLF
    $sData &= "Buch peethebee=Sehr hilfreich ist auch das Buch von @peethebee"
    IniWriteSection($sIni, "Bausteine", $sData)
    EndIf

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

    Global $sTitel = 'Exe Datei erstellen'

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

    Local $hMainGui = GUICreate($sTitel, 800, 520, 140, 150, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX))
    ;erzeugt eine GUI die zurückgebebene ID wird in der Variablen $hMainGui gespeichert
    ;die GUI hat BOXen für Mininmieren, Maximieren und ist in der Größe frei änderbar
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
    ;Verknüpft dem Event $Gui_Event_Close mit der Funktion _End

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

    Global $hedtBox = GUICtrlCreateEdit("", 10, 10, 600, 480, BitOR($ES_WANTRETURN, $ES_MULTILINE))
    ;erzeugt ein Edit Steuerelement die zurückgegebe ID wird in der Variablen $hedtBox gespeichert
    GUICtrlSetResizing(-1, $GUI_DOCKBORDERs)
    ;verankert das Inputfield an allen Seiten
    ;beim Resizen bleibt es dadurch auf seiner Position und den Abstand zu den Seiten es ändert lediglich Breite und Höhe

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

    Global $hcboTB = GUICtrlCreateCombo("", 620, 10, 150, 25)
    GUICtrlSetOnEvent(-1, 'show_Selection')
    ;Verknüpft die Combo (Auswahl) mit der Funktion show_Selection
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
    GUICtrlCreateButton("&Hinzufügen Code", 620, 40, 150, 25)
    GUICtrlSetOnEvent(-1, '_addTB')
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
    GUICtrlCreateButton("&Löschen Code", 620, 70, 150, 25)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
    GUICtrlSetOnEvent(-1, '_delTB')
    GUICtrlCreateButton("Änderungen &speichern", 620, 100, 150, 25)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
    GUICtrlSetOnEvent(-1, '_saveTB')
    GUICtrlCreateButton("&ins ClipBoard", 620, 150, 150, 25)
    GUICtrlSetOnEvent(-1, '_ClipPut')
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
    GUICtrlCreateButton("&aus ClipBoard", 620, 180, 150, 25)
    GUICtrlSetOnEvent(-1, '_ClipGet')
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
    $hbtnClear = GUICtrlCreateButton("&Neu (leere EditBox)", 620, 210, 150, 25)
    GUICtrlSetOnEvent(-1, '_Clear')
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)

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

    GUICtrlCreateButton('Be&enden', 620, 260, 150, 25)
    GUICtrlSetOnEvent(-1, '_END')

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

    ;~ GUICtrlCreateButton('Exe erstellen', 620, 460, 150, 25)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM)

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

    read_INI()
    GUISetState()

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

    While 1
    Sleep(1000)
    WEnd

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

    Func _End()
    GUIDelete($hMainGui)
    Exit
    EndFunc ;==>_End

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

    Func read_INI() ;Ini einlesen
    $list1 = IniReadSection($sIni, "Bausteine")
    If IsArray($list1) Then ;nur wenn Array da ansonsten Absturz
    For $i = 1 To $list1[0][0] ;von 1 bis zum letzen Eintrag im Array
    GUICtrlSetData($hcboTB, $list1[$i][0]) ;in ComboBox eintragen
    Next
    EndIf
    _GUICtrlComboBox_InsertString($hcboTB, $sElect, 0) ;$sElect (= "Textbaustein auswählen") an erster Stelle einfügen
    _GUICtrlComboBox_SetCurSel($hcboTB, 0) ;1 Eintrag selektieren
    EndFunc ;==>read_INI

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

    Func _addTB() ;Textbaustein hinzfüren
    $write1 = GUICtrlRead($hedtBox)
    If $write1 <> "" Then ;nur wenn im Edit etwas eingetragen
    $write2 = InputBox("Baustein verwalten unter", "Bitte Kurzbegriff eingeben")
    If $write2 <> "" Then ;nur wenn ein Kurzbegrigg eingegeben
    _writeTB($write2) ;Routine zum schreiben aufrufen
    GUICtrlSetData($hcboTB, $write2, $write2) ;in ComboBox eintragen und gleichzeitig selektieren
    EndIf
    EndIf
    show_Selection() ;Routine die die Selektion zeigt aufrufen
    EndFunc ;==>_addTB

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

    Func _writeTB($sId_TB) ;Routine zum Screiben in INI
    ;hier werdeb die Zeichen @CR (Wagebrücklauf) @LF Zeilenumbruche und @CRLF getauscht
    $write1 = GUICtrlRead($hedtBox)
    $write1 = StringReplace($write1, @CRLF, "_%CRLF%_")
    $write1 = StringReplace($write1, @CR, "_%CR%_")
    $write1 = StringReplace($write1, @LF, "_%LF%_")
    If $write1 <> "" Then IniWrite($sIni, "Bausteine", $sId_TB, $write1) ;wenn nicht leer in INI schreien
    EndFunc ;==>_writeTB

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

    Func _saveTB() ;Änderungen speichern
    If GUICtrlRead($hcboTB) = $sElect Then
    ;es ist kein Textbaustein selektiert
    GUICtrlSetState($hbtnClear, $GUI_DISABLE)
    GUICtrlSetData($hedtBox, "")
    _addTB() ;
    Else
    $sId_TB = GUICtrlRead($hcboTB) ;Kurzbezeichnung holen
    _writeTB($sId_TB) ;Routine zum Schreiben aufrufen
    EndIf
    EndFunc ;==>_saveTB

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

    Func _delTB() ;Textbaustein löschen
    $sDel = GUICtrlRead($hcboTB) ;Kurzbezeichnung holen
    IniDelete($sIni, "Bausteine", $sDel) ;aus INI löschen
    GUICtrlSetData($hcboTB, "") ;ComboBox leeren
    read_INI() ;Routine zum INI einlesen aufrufen
    show_Selection() ;Routine zum anzeigen der Selektion aufrufen
    EndFunc ;==>_delTB

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

    Func _ClipPut() ;Daten ins Clipboard
    ClipPut(GUICtrlRead($hedtBox))
    EndFunc ;==>_ClipPut

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

    Func _ClipGet() ;Daten aus Clipboard holen EditBox wird mit Clipboard überschrieben
    GUICtrlSetData($hedtBox, ClipGet())
    EndFunc ;==>_ClipGet

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

    Func show_Selection() ;Selekzion anzeigen
    If GUICtrlRead($hcboTB) = $sElect Then ;es ist kein Textbaustein asgewählt
    GUICtrlSetState($hbtnClear, $GUI_DISABLE) ;Leeren-Button disablen
    GUICtrlSetData($hedtBox, "") ;also EDIT leeren
    Else
    GUICtrlSetState($hbtnClear, $GUI_ENABLE) ;Leeren-Button enablen
    $sId_TB = GUICtrlRead($hcboTB) ;Kurzbezeichnng holen
    ;ConsoleWrite("ausgewählt: " & $sId_TB & @CRLF) ;Kontrolausgabe in Console
    $write1 = IniRead($sIni, "Bausteine", $sId_TB, "") ;Baustein aus INI lesen
    ;hier werdeb die Zeichen für @CR (Wagebrücklauf) @LF Zeilenumbruche und @CRLF zurück getauscht
    $write1 = StringReplace($write1, "_%CRLF%_", @CRLF) ;
    $write1 = StringReplace($write1, "_%CR%_", @CR)
    $write1 = StringReplace($write1, "_%LF%_", @LF)

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

    GUICtrlSetData($hedtBox, $write1) ;Baustein in Edit-Box anzeigen
    EndIf
    EndFunc ;==>show_Selection

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

    Func _Clear()
    GUICtrlSetData($hcboTB, $sElect, $sElect)
    show_Selection()
    EndFunc ;==>_Clear

    [/autoit]


    1. Der Button Hinzufügen (der könnte die Exe erstellen)
    2. Der Name und die EXE müsste nur noch in meine INI eingefügt werden!

    Spoiler anzeigen
    [autoit]


    [Namen]
    1=2011
    2=2012
    3=2013

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

    [Link]
    1=2011.exe
    2=2012.exe
    3=2013.exe

    [/autoit]

    Vielleicht kann da mal ein Profi drübersehen.

    Liebe Grüße
    Ilse ;)