- Offizieller Beitrag
Nicht erschrecken, bei dem langen Code
Also, ich hab zumindest herausgefunden, dass die Probleme durch GUICtrlSetState() entstehen.
In der Funktion "_AdressAdd()" werden zum Ende Send("!d") und Send("b") ausgeführt. Wenn GUICtrlSetState() aktiv ist, werden diese Send()-Befehle auch von SciTe angenommen und der Debugmodus startet. Deaktivier ich das GUICtrlSetState() krieg ich meine GUI nicht wieder.
*grübel*
Spoiler anzeigen
C
#include <GUIConstants.au3>
#Include <Misc.au3>
#include <Array.au3>
#include <file.au3>
#region Deklaration
Global $absender, $adresse, $sendBetreff, $sendMail, $i, $aAdressen[1], $attachname = "", $x = 1, $y = 1, $aFullPath[1], $weiter, $aEZ[1][5]
$path = "C:\Programme\Mozilla Thunderbird\thunderbird.exe"
; Anmerkung zu 1D-Arrays: $array[0] wird nicht belegt, somit erster Eintrag auch auf $array[1]
; wenn nur $array[0] existiert ist Ubound() = 1, somit Array leer wenn Ubound() nicht größer 1
#endregion Deklaration
#region GUI
; GUI Einzelkonfiguration
$GUI_Mail_EZ = GUICreate("Thunderbird Mail Scheduler - Einzelmail Konfiguration -", 609, 642, -1, -1)
$grEmpfEZ = GUICtrlCreateGroup("Empfänger", 16, 8, 577, 49)
$cEmpfEZ = GUICtrlCreateCombo("", 24, 24, 329, 21, -1, $WS_EX_CLIENTEDGE)
$bVorigerEZ = GUICtrlCreateButton("Voriger", 384, 24, 89, 22)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$bNextEZ = GUICtrlCreateButton("Nächster", 496, 24, 89, 22)
$grAnhangEZ = GUICtrlCreateGroup("Anhangliste", 16, 64, 577, 49)
$cAttachlistEZ = GUICtrlCreateCombo("", 24, 80, 329, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$bAttachAddEZ = GUICtrlCreateButton("Himzufügen", 384, 80, 89, 22)
$bAttachDelEZ = GUICtrlCreateButton("Entfernen", 496, 80, 89, 22)
$grTextVarEZ = GUICtrlCreateGroup("Textvariablen", 16, 120, 345, 49)
$cTextVarEZ = GUICtrlCreateCombo("", 24, 138, 329, 21)
GUICtrlSetData(-1, "{Mail Nr: x}", "{Mail Nr: x}") ; Platzhalter, werden bei Versand befüllt
GUICtrlSetData(-1, "{Mail Nr: x von y}") ; Platzhalter
GUICtrlSetData(-1, "{Dateiname(n) Anhang}") ; Platzhalter
GUICtrlCreateGroup("", -99, -99, 1, 1)
$grVarZielEZ = GUICtrlCreateGroup("Variable einfügen in:", 376, 120, 217, 49)
$bVarBetreffEZ = GUICtrlCreateButton("Betreff", 384, 138, 89, 22)
$bVarMailEZ = GUICtrlCreateButton("Mail", 496, 138, 89, 22)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$grBetreffEZ = GUICtrlCreateGroup("Betreff", 16, 192, 577, 49)
$iBetreffEZ = GUICtrlCreateInput("", 24, 210, 561, 21, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$grMailEZ = GUICtrlCreateGroup("Mail", 16, 248, 577, 209)
$eMailEZ = GUICtrlCreateEdit("", 24, 264, 561, 185, -1, $WS_EX_CLIENTEDGE)
GUICtrlSetData($eMailEZ, "eMail")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$shapeEZ = GUICtrlCreateGraphic(16, 178, 577, 3, $SS_SUNKEN)
$grAttachEZ = GUICtrlCreateGroup("Mail - Anhang", 16, 464, 449, 161)
$lAttachEZ = GUICtrlCreateList("", 24, 486, 433, 149, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$bEscapeEZ = GUICtrlCreateButton("Abbrechen", 488, 472, 105, 25)
$bSendEZ = GUICtrlCreateButton("Senden", 488, 600, 105, 25)
$cbDownPCEZ = GUICtrlCreateCheckbox("PC herunterfahren nach Versand", 488, 536, 105, 49, $BS_MULTILINE)
; GUI Start
$GUI_MailSchedul = GUICreate("Thunderbird Mail Scheduler", 609, 642, -1, -1)
$grAbsender = GUICtrlCreateGroup("Absender", 16, 8, 577, 49)
$iAbsender = GUICtrlCreateInput("", 24, 24, 329, 21, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$bAbsChg = GUICtrlCreateButton("Ändern", 496, 24, 89, 22)
$grEmpf = GUICtrlCreateGroup("Empfängerliste", 16, 64, 577, 49)
$cAdresslist = GUICtrlCreateCombo("", 24, 80, 329, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$bAdressAdd = GUICtrlCreateButton("Himzufügen", 384, 80, 89, 22)
$bAdressDel = GUICtrlCreateButton("Entfernen", 496, 80, 89, 22)
$grTextVar = GUICtrlCreateGroup("Textvariablen", 16, 120, 345, 49)
$cTextVar = GUICtrlCreateCombo("", 24, 138, 329, 21)
GUICtrlSetData(-1, "{Mail Nr: x}", "{Mail Nr: x}") ; Platzhalter, werden bei Versand befüllt
GUICtrlSetData(-1, "{Mail Nr: x von y}") ; Platzhalter
GUICtrlSetData(-1, "{Dateiname(n) Anhang}") ; Platzhalter
GUICtrlCreateGroup("", -99, -99, 1, 1)
$grVarZiel = GUICtrlCreateGroup("Variable einfügen in:", 376, 120, 217, 49)
$bVarBetreff = GUICtrlCreateButton("Betreff", 384, 138, 89, 22)
$bVarMail = GUICtrlCreateButton("Mail", 496, 138, 89, 22)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$grBetreff = GUICtrlCreateGroup("Betreff", 16, 192, 577, 49)
$iBetreff = GUICtrlCreateInput("", 24, 210, 561, 21, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$grMail = GUICtrlCreateGroup("Mail", 16, 248, 577, 209)
$eMail = GUICtrlCreateEdit("", 24, 264, 561, 185, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$shape = GUICtrlCreateGraphic(16, 178, 577, 3, $SS_SUNKEN)
$grAttach = GUICtrlCreateGroup("Mail - Anhang", 16, 464, 449, 161)
$lAttach = GUICtrlCreateList("", 24, 486, 297, 149, -1, $WS_EX_CLIENTEDGE)
$rAttachSame = GUICtrlCreateRadio("Für alle gleich", 352, 486, 105, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
$rAttachDiff = GUICtrlCreateRadio("Für jeden anders", 352, 509, 105, 17)
$bAttachAdd = GUICtrlCreateButton("Hinzufügen", 352, 560, 89, 22)
$bAttachDel = GUICtrlCreateButton("Entfernen", 352, 587, 89, 22)
$rAll4One = GUICtrlCreateRadio("an eine Adresse nacheinander", 352, 525, 97, 33, $BS_MULTILINE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$bClean = GUICtrlCreateButton("Auswahl löschen", 488, 472, 105, 25)
$bEscape = GUICtrlCreateButton("Abbrechen", 488, 507, 105, 25)
$cbDownPC = GUICtrlCreateCheckbox("PC Herunterfahren nach Versand", 488, 542, 105, 50, $BS_MULTILINE)
$bSend = GUICtrlCreateButton("Senden", 488, 600, 105, 25)
GUISetState(@SW_SHOW)
#endregion GUI
#region Code
Opt("WinTitleMatchMode",2)
While 1
$msg = GuiGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE Or $msg = $bEscape
ExitLoop
Case $msg = $bAbsChg
_AbsChg()
Case $msg = $bAdressAdd
_AdressAdd()
Case $msg = $bAdressDel
_AdressDel()
Case $msg = $bVarBetreff
_InVarBetreff()
Case $msg = $bVarMail
_InVarMail()
Case $msg = $bAttachAdd
_AttachAdd()
Case $msg = $bAttachDel
_AttachDel()
Case $msg = $bClean
_GUIclean()
Case $msg = $bSend
$modeSame = GUICtrlRead($rAttachSame)
$modeDiff = GUICtrlRead($rAttachDiff)
$modeOne = GUICtrlRead($rAll4One)
If $modeSame = 1 Then _Same4All() ; Text und Anhang für alle gleich
If $modeDiff = 1 Then ; Text und Anhang für jede Adresse individuell
$weiter = MsgBox(4, "Hinweis", "Alle Dateianhänge, die Sie versenden wollen," & @LF & "müssen bereits ausgewählt sein." & @LF & @LF & "Im folgenden Fenster ordnen Sie jedem Empfänger" & @LF & "individuell Betreff, Mailtext und Anhang zu." & @LF & @LF & "Wollen Sie fortsetzen?")
If $weiter = 6 Then
GUICtrlRead($sendBetreff)
GUICtrlRead($sendMail)
_FillEZ()
GUISetState(@SW_HIDE, $GUI_MailSchedul)
GUISetState(@SW_SHOW, $GUI_Mail_EZ)
;_Diff4All()
EndIf
EndIf
If $modeOne = 1 Then _All4One() ; einzelner Empfänger erhält jeweils Mail + 1 Anhang bis Anhangliste leer (für gesplittete Anhänge)
If GUICtrlRead($cbDownPC) = 1 Then Sleep(10);Shutdown(9)
Case $msg = $bVorigerEZ
Case $msg = $bNextEZ
Case $msg = $bAttachAddEZ
Case $msg = $bAttachDelEZ
Case $msg = $bVarBetreffEZ
Case $msg = $bVarMailEZ
Case $msg = $bEscapeEZ
GUISetState(@SW_HIDE, $GUI_Mail_EZ)
GUISetState(@SW_RESTORE, $GUI_MailSchedul)
Case $msg = $bSendEZ
EndSelect
WEnd
Exit
#endregion Code
#region Funktionen
Func _AbsChg()
; GUISetState(@SW_MINIMIZE, $GUI_MailSchedul)
Run($path)
WinWaitActive("Mozilla Thunderbird")
Sleep(500)
Send("!b")
Sleep(50)
Send("g")
MsgBox(0,"Absenderkonto","Bitte klicken Sie in der linken Spalte" & @LF & @LF & "auf das Absenderkonto." & @LF & @LF & @LF & "Bestätigen Sie die Auswahl mit <F9> !")
While _IsPressed("78") = 0 ; Warten bis User-Auswahl beendet und <F9> gedrückt
Sleep(150)
WEnd
Send("!e")
Sleep(50)
Send("+{HOME}")
Send("^c")
$absender = ClipGet()
GUICtrlSetData($iAbsender, $absender)
Send ("+{TAB}")
Send("{ESC}")
Sleep(50)
Send("!{F4}")
; GUISetState(@SW_RESTORE, $GUI_MailSchedul)
EndFunc
Func _AdressAdd()
Dim $state = 1, $weiter, $tmp
; GUISetState(@SW_HIDE, $GUI_MailSchedul)
Run($path)
WinWaitActive("Mozilla Thunderbird")
Sleep(50)
Send("^2") ; öffnet Adressbuch
WinWaitActive("Adressbuch")
MsgBox(0,"Zieladresse","Bitte Doppelklick auf gewünschte Adresse im Adressbuch!")
Do
ClipPut("")
WinWaitActive("Karte")
Sleep(250)
Send("{TAB 4}") ; markiert Adresse
Sleep(100)
Send("^c") ; kopieren
$adresse = ClipGet()
Send("{ESC}")
If $adresse <> "" Then
$tmp = _ArraySearch($aAdressen, $adresse, 1)
If $tmp = -1 Then
GUICtrlSetData($cAdresslist, $adresse, $adresse)
_ArrayAdd($aAdressen, $adresse)
_ArraySort($aAdressen)
Else
MsgBox(0, "Hinweis", "Diese Adresse wurde bereits ausgewählt")
EndIf
Else
MsgBox(0,"Hinweis", "Auswahl Adresseintrag ist fehlgeschlagen!")
EndIf
$weiter = MsgBox(4,"gewählte Adresse: " & $adresse, "..weitere Adresse auswählen?")
If $weiter = 7 Then Send("^q") ; nein (ja = 6)
$state = WinGetState("Adressbuch")
Until $state = 0
Send("!d")
Send("b")
; GUISetState(@SW_RESTORE, $GUI_MailSchedul)
EndFunc
Func _AdressDel()
Dim $tmp = GUICtrlRead($cAdresslist), $i = 1
While UBound($aAdressen) > 0
If $aAdressen[$i] = $tmp Then
_ArrayDelete($aAdressen, $i)
ExitLoop
EndIf
$i = $i +1
WEnd
GUICtrlSetData($cAdresslist, "")
For $i = 1 To UBound($aAdressen) -1
GUICtrlSetData($cAdresslist, $aAdressen[$i], $aAdressen[$i])
Next
EndFunc
Func _InVarBetreff()
Dim $tmp = GUICtrlRead($cTextVar), $tmp1 = GUICtrlRead($iBetreff)
$tmp = $tmp1 & " " & $tmp
$tmp = StringStripWS($tmp, 1)
GUICtrlSetData($iBetreff, $tmp)
EndFunc
Func _InVarMail()
Dim $tmp = GUICtrlRead($cTextVar), $tmp1 = GUICtrlRead($eMail)
$tmp = $tmp1 & " " & $tmp
$tmp = StringStripWS($tmp, 1)
GUICtrlSetData($eMail, $tmp)
EndFunc
Func _AttachAdd()
Dim $tmp, $sDrive, $sDir, $sFName, $sExt, $aPath
$tmp = FileOpenDialog("",@HomePath, "Alle (*.*)")
$iKeyIndex = _ArrayBinarySearch ( $aFullPath, $tmp )
If Not @error Then
MsgBox(0, "Achtung", "Diese Datei wurde bereits ausgewählt!")
Else
If $tmp <> "" And $tmp <> 1 Then
$aPath = _PathSplit($tmp, $sDrive, $sDir, $sFName, $sExt)
_ArrayAdd($aFullPath, $tmp) ; Array m. kpl. Pfaden aller Anhänge
_ArraySort($aFullPath) ; nur auf sortiertes Array _PathSplit() anwendbar
GUICtrlSetData($lAttach, $sFName & $sExt)
If $attachname = "" Then
$attachname = $sFName & $sExt
Else
$attachname = $attachname & ", " & $sFName & $sExt
EndIf
EndIf
EndIf
EndFunc
Func _AttachDel()
Dim $tmp = GUICtrlRead($lAttach), $tmp1, $sDrive, $sDir, $sFName, $sExt, $aPath, $i = 1
If $tmp <> "" Then
While UBound($aFullPath) > 0
$tmp1 = _PathSplit($aFullPath[$i], $sDrive, $sDir, $sFName, $sExt)
If $sFName & $sExt = $tmp Then
_ArrayDelete($aFullPath, $i)
ExitLoop
EndIf
$i = $i +1
WEnd
GUICtrlSetData($lAttach, "")
For $i = 1 To UBound($aFullPath) -1
$tmp1 = _PathSplit($aFullPath[$i], $sDrive, $sDir, $sFName, $sExt)
GUICtrlSetData($lAttach, $sFName & $sExt)
If $attachname = "" Then
$attachname = $sFName & $sExt
Else
$attachname = $attachname & ", " & $sFName & $sExt
EndIf
Next
EndIf
EndFunc
Func _GUIclean()
GUICtrlSetData($cAdresslist, "")
GUICtrlSetData($iBetreff, "")
GUICtrlSetData($eMail, "")
GUICtrlSetData($lAttach, "")
EndFunc
Func _Same4All()
Dim $tmp, $i
; GUISetState(@SW_MINIMIZE, $GUI_MailSchedul)
Run($path)
WinWaitActive("Mozilla Thunderbird")
Sleep(500)
Send("^n") ; öffnet Fenster für neue Mail, Cursor im Adressfeld
For $i = 1 To UBound($aAdressen) -1
Sleep(1000)
Send($aAdressen[$i])
Sleep(150)
Send("{DOWN}")
Sleep(150)
Next
Send("{TAB}") ; Betreff
$sendBetreff = GUICtrlRead($iBetreff)
$tmp = _PlaceHolders($sendBetreff)
Send($tmp)
If UBound($aFullPath) > 1 Then ; Mail-Anhang
For $i = 1 to UBound($aFullPath) - 1
Send("!d")
Sleep(150)
Send("h")
Sleep(150)
Send("a")
Sleep(300)
Send($aFullPath[$i])
Send("{ENTER}")
Next
EndIf
Send("{TAB}") ; Mailtext
$sendMail = GUICtrlRead($eMail)
$tmp = _PlaceHolders($sendMail)
Send($tmp)
; AUSWAHL ABSENDER ????????
; Send("^{ENTER}") ; versenden
; GUISetState(@SW_RESTORE, $GUI_MailSchedul)
EndFunc
Func _Diff4All()
Dim $i, $tmp
$y = UBound($aAdressen) - 1
ReDim $aEZ[$y+1][5]
;;;============ noch in Arbeit =========
EndFunc
Func _All4One()
Dim $i, $tmp
If UBound($aAdressen) > 2 Then
MsgBox(0, "Hinweis)", "In diesem Modus darf nur ein Empfänger ausgewählt sein." & @LF & "Bitte korrigieren Sie.")
Else
$y = UBound($aFullPath) - 1
For $i = 1 To UBound($aFullPath) - 1
; GUISetState(@SW_MINIMIZE, $GUI_MailSchedul)
Run($path)
WinWaitActive("Mozilla Thunderbird")
Sleep(500)
Send("^n") ; öffnet Fenster für neue Mail, Cursor im Adressfeld
Sleep(1000)
Send($aAdressen[2])
Sleep(150)
Send("{TAB}") ; Betreff
$sendBetreff = GUICtrlRead($iBetreff)
$tmp = _PlaceHolders($sendBetreff)
Send($tmp)
Send("!d") ; Mail-Anhang
Sleep(150)
Send("h")
Sleep(150)
Send("a")
Sleep(300)
Send($aFullPath[$i])
Send("{ENTER}")
Send("{TAB}") ; Mailtext
$sendMail = GUICtrlRead($eMail)
$tmp = _PlaceHolders($sendMail)
Send($tmp)
; AUSWAHL ABSENDER ????????
; Send("^{ENTER}") ; versenden
$x = $x + 1
Next
; GUISetState(@SW_RESTORE, $GUI_MailSchedul)
EndIf
EndFunc
Func _PlaceHolders($string)
Dim $tmp = StringInStr($string, "{Mail Nr: x}"), $tmp1 = StringInStr($string, "{Mail Nr: x von y}"), $tmp2 = StringInStr($string, "{Dateiname(n) Anhang}")
If $tmp <> 0 Then $string = StringReplace($string, "{Mail Nr: x}", "Mail Nr: " & $x,0,1)
If $tmp1 <> 0 Then $string = StringReplace($string, "{Mail Nr: x von y}", "Mail Nr: " & $x & " von " & $y,0,1)
If $tmp2 <> 0 Then $string = StringReplace($string, "{Dateiname(n) Anhang}", $attachname,0,1)
Return $string
EndFunc
Func _FillEZ()
Dim $sDrive, $sDir, $sFName, $sExt, $aPath, $i, $tmp
For $i = 1 To UBound($aFullPath) - 1
$tmp = $aFullPath[$i]
$aPath = _PathSplit($tmp, $sDrive, $sDir, $sFName, $sExt)
GUICtrlSetData($cAttachlistEZ, $sFName & $sExt, $sFName & $sExt)
Next
GUICtrlSetData($iBetreffEZ, $sendBetreff)
GUICtrlSetData($eMailEZ, $sendMail)
For $i = 1 To UBound($aAdressen) - 1
If $i = 1 Then
GUICtrlSetData($cEmpfEZ, $aAdressen[$i], $aAdressen[$i])
Else
GUICtrlSetData($cEmpfEZ, $aAdressen[$i])
EndIf
Next
EndFunc
#endregion Funktionen
Alles anzeigen