Combobox auslesen?

  • Hallo Comunity,

    ich bin neu hier, und auch neu was Scripten/Programmieren angeht und hoffe Ihr könnt mir bei meinem Problem weiterhelfen.

    Ich möchte im groben ein Tool schreiben, das vier Active Directory Account von Praktikanten (1-4) aus einer Combobox ausliest und per Email an den Tutor des Praktikanten schickt.
    Noch mal deutlicher: Ich wähle aus einer Combobox einen Account, zB Praktikant2. Dann soll, wenn ich die Gui ausführe, eine Email an den Tutor gesendet werden, mit dem Accountname aus der Combobox und dem Kennwort.

    Ich weiß, das das irgendwie mit Guictrlread funktionieren muss, allerdings kommt als Antwort dann immer nur die 0 zurück.

    Hier mal der Code:

    [autoit]

    ;imports

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

    #include <array.au3>
    #include <Excel.au3>
    #include <File.au3>
    #include <Misc.au3>
    #include <Inetcustom.au3>
    #include <AD\AD.au3>

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

    ;Koda Import

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

    #include <ComboConstants.au3>
    #include <DateTimeConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=C:\Users\admin_2518\Documents\Praktikanten\Form1.kxf
    $Form1_1 = GUICreate("Praktikantenaccount", 519, 305, 192, 114)
    $Group1 = GUICtrlCreateGroup("Infos", 24, 112, 249, 169)
    $Date1 = GUICtrlCreateDate("2014/09/08 14:06:5", 32, 144, 186, 21)
    $Input1 = GUICtrlCreateInput("", 96, 192, 121, 21)
    $Input2 = GUICtrlCreateInput("Name", 96, 240, 121, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER,$ES_READONLY))
    GUICtrlCreateLabel("", 40, 192, 4, 4)
    $Label1 = GUICtrlCreateLabel("Pers.Nr.:", 32, 192, 36, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Combo1 = GUICtrlCreateCombo("Account", 24, 40, 145, 25, BitOR($GUI_SS_DEFAULT_INPUT,$CBS_DROPDOWN,$CBS_AUTOHSCROLL))
    $Combo1 = GUICtrlSetData(-1, "Praktikant|Praktikant2|Praktikant3|Praktikant4")
    $Button1 = GUICtrlCreateButton("Ausführen", 336, 120, 131, 25)
    $Button2 = GUICtrlCreateButton("Beenden", 336, 176, 131, 25)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    WinSetOnTop("Praktikantenaccount", "", 1)

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

    $wert = GUICtrlRead($Combo1)

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

    ;Mailversand

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

    $s_SmtpServer = "Server"
    $s_FromName = "Name"
    $s_FromAddress = "AbsenderEmail"
    $s_ToAddress = "meineEmail"
    $s_Subject = "Praktikantenaccount"
    Local $as_Body [2] = [$wert & "Passwort: 1234Kt?"]

    [/autoit]

    Vielen Dank schon mal für eure Hilfe

    Einmal editiert, zuletzt von SvenKi (18. September 2014 um 09:19)

  • Wir haben hier zwei Probleme:
    Erstens überschreibst du in Zeile 31 deine $Combo1 Variable. Damit hast du die ID der Combobox nirgends mehr gespeichert und du kannst nicht (mehr so leicht) auf die Combobox zugreifen.
    Ersetze deine Zeile 31 durch das:

    [autoit]

    GUICtrlSetData(-1, "Praktikant|Praktikant2|Praktikant3|Praktikant4")

    [/autoit]


    Außerdem solltest du den Wert erst dann auslesen wenn er verändert wurde, oder wenn du auf den Button zum Email senden klickst.
    Wenn du den GuiGetMsgMode verwendest sieht das etwa so aus:

    [autoit]

    While 1
    Switch GUIGetMsg()
    case $Button1; wenn der Ausführen Button geklickt wurde dann:
    $wert = GUICtrlRead($Combo1, 1)
    MsgBox(0,"Sende die Email mit der info aus der Combobox", "Gewählter Account: " & $wert)
    EndSwitch
    WEnd

    [/autoit]
  • Noch eine Frage:

    der Emailversandt funktioniert, aber ist es auch möglich, das die Email erst zu einem späteren Zeitpunkt gesendet wird?
    Also, wenn der Praktikant erst am 01.12 anfängt, und ich die Daten heute in das Tool eingebe, die Email erst am 30.11 um 15:00 Uhr gesendet wird.

    Wäre sehr dankbar für Hilfe

  • Also grundsätzlich möglich ja aber mir fallen im Moment nur drei Wege ein sowas zu machen und alle haben so ihre Tücken.
    Weg 1: Das Script solange laufen lassen bis das Datum erreicht ist, dann die Email senden
    Weg 2: Ein externes Tool verwenden das sich um die Zeitsteuerung kümmert. Unter windows z.B. einen Scheduled Task erzeugen der dann die Email versendet
    Weg 3: Die Daten für die Email in einer Datei zwischenspeichern und bei jedem Start des Tools überprüfen ob noch alte Daten da sind die versendet werden müssen.

    Alle drei Wege haben so ihre Nachteile.
    1. Das Script muss ewig laufen -> bei absturz keine Email.
    2. Der Rechner auf dem der Scheduled Task liegt muss laufen
    3. Nur bei einem erneuten Scriptstart werden Emails versandt

    Soweit ich weiß bieten die SMTP server keine direkte Möglichkeit für eine verzögerte zustellung

  • Hallo Schnitzel,

    hmm, das hab ich mir schon fast gedacht. Das waren auch so die Möglichkeiten die ich gefunden habe. Hat mir aber nichts so recht zugesagt.
    Bleibt mir wohl nichts anderes übrig eine der drei Möglichkeiten zu benutzen, oder darauf zu verzichten.

    Danke

  • Ich hätte da eventuell eine Idee.
    Wenn man dein Tool ähnlich wie ein geläufiges Mailprogramm händelt sollte es funktionieren.
    Meine Lösung jetzt wäre, das dein Tool beim PC-Start gestartet wird, prüft ob er was zu tun hat und wenn nicht er sich beendet.
    Sollte so keine umständlich große Nummer sein.
    Ähnliches hatte ich mal in meiner Probezeit umzusetzen, Massenmails für Firmenkunden etc. aber wir arbeiteten mit einen kostenpflichtigen externen Server zusammen der die Zeitspeziefische steuerung übernahm.
    Meine Aufgabe war es, etwas zu entwickeln und es auf unseren eigenen Firmenserver luffähig zu machen um kosten zu sparen.

    Hoffe ich konnte helfen.

    LG
    Chris