1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. BugFix

Beiträge von BugFix

  • Thunderbird Mail

    • BugFix
    • 18. August 2006 um 14:04

    Das Problem ist nicht das Auslesen, das ist easy.
    Wenn du das Fenster 'neue Mail' öffnest, mußt du auswählen welchen Absender du haben willst (wenn mehrere Konten vorhanden sind).
    Die Auswahl des Absenders habe ich bereits vorher getroffen, ich muß nur diese Adresse in das Absenderfeld eintragen. Da dies kein Eingabefeld ist und TB nicht seine Controls freigibt :( habe ich keine Möglichkeit ohne User-Eingriff den Absender auszuwählen.

  • UDF funktioniert nicht mit Variablenübergabe

    • BugFix
    • 18. August 2006 um 13:45

    Die Überschrift sagt es schon. Ich habe eine UDF erstellt. Sie funktioniert.
    Nun brauche ich dieselbe Funktion nochmals - was liegt näher, als sie mit Variablen aufzurufen. Doch dann versagt sie.
    Hier der Code, ich habe es kommentiert.

    Spoiler anzeigen
    Code
    ; markierter Eintrag wird im Array gelöscht
    ; Liste wird gelöscht, dann Einträge aus Array neu in Liste gesetzt
    ; funktioniert
    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
    
    
    ; Hier die gleiche Funktion mit Übergabe von Array und Liste
    ; wird aber nur ausgeführt bis: GUICtrlSetData($delList, "")
    ; es erfolgt kein Eintritt in die Schleife zur Befüllung der Liste (getestet mit einer Messagebox)
    
    
    ; Aufruf mit: _AttachDel($aFullPath, $lAttach)
    Func _AttachDel($delArray, $delList) 
    Dim $tmp = GUICtrlRead($delList), $tmp1, $sDrive, $sDir, $sFName, $sExt, $aPath, $i = 1
    	If $tmp <> "" Then
    		For $i =1 To UBound($delArray) - 1
    			$tmp1 = _PathSplit($delArray[$i], $sDrive, $sDir, $sFName, $sExt)
    			If $sFName & $sExt = $tmp Then 
    				_ArrayDelete($delArray, $i)
    				ExitLoop
    			EndIf
    		Next
    		GUICtrlSetData($delList, "")
    		For $i = 1 To UBound($delArray) -1
    			$tmp1 = _PathSplit($delArray[$i], $sDrive, $sDir, $sFName, $sExt)
    			GUICtrlSetData($delList, $sFName & $sExt)
    			If $attachname = "" Then
    				$attachname = $sFName & $sExt
    			Else
    				$attachname = $attachname & ",  " & $sFName & $sExt
    			EndIf			
    		Next
    	EndIf
    EndFunc
    Alles anzeigen
  • Problem mit GUICtrlSetState()

    • BugFix
    • 17. August 2006 um 21:03

    Hab jetzt alles einheitlich auf ..Hide/Show umgestellt und

    ja, HURRA es geht.

    Dann kann ich ja mal ans komplettieren gehen. Also bis dann.

  • Problem mit GUICtrlSetState()

    • BugFix
    • 17. August 2006 um 20:53

    Ja, hat leider nix gebracht. Egal ob ..Hide/Show oder ..Minimize/Restore - nach der Funktion seh ich meine GUI einfach nicht wieder nur das Tray-Icon bleibt :(

  • Problem mit GUICtrlSetState()

    • BugFix
    • 17. August 2006 um 20:40

    Ah, Danke!

  • Problem mit GUICtrlSetState()

    • BugFix
    • 17. August 2006 um 20:36

    Nach dem Schließen des Adressbuchs, wird mit "Alt+d" und "b" Thunderbird geschlossen.
    @SW_RESTORE hatte ich eigentlich schon probiert, aber ich teste es gleich nochmal.

  • Problem mit GUICtrlSetState()

    • BugFix
    • 17. August 2006 um 20:10

    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
  • Thunderbird Mail

    • BugFix
    • 17. August 2006 um 12:42

    Wie ich sehe, habt ihr auch keine zündende Idee.
    Habe jetzt mal eine Anfrage ins Mozilla-Forum eingestellt. Mal sehen, ob die blickig sind.

    Möchte euch aber nicht vorenthalten, was es eigentlich werden sollte.
    Zum Testen bitte die Beta verwenden. Und euren Pfad für TB in "$path" eintragen (Zeile 8 ).

    Spoiler anzeigen
    C
    #include <GUIConstants.au3>
    #Include <Misc.au3>
    #include <Array.au3>
    #include <file.au3>
    
    
    #region Deklaration
    Global $absender, $adresse, $i, $aAdressen[1], $attachname = "", $x = 1, $y = 1, $aFullPath[1]
    $path = "E:\Mozilla Thunderbird\thunderbird.exe"
    ; Anmerkung zu 1D-Arrays: $array[0] wird nicht belegt, somit erster Eintrag auch auf $array[1]
    #endregion Deklaration
    
    
    #region GUI
    $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)
    		Select
    		Case $modeSame = 1
    			;_Same4All()     ; Text und Anhang für alle gleich
    		Case $modeDiff = 1
    			;_Diff4All()     ; Text und Anhang für jede Adresse individuell
    		Case $modeOne = 1
    			;_All4One()      ; einzelner Empfänger erhält jeweils Mail + 1 Anhang bis Anhangliste leer (für gesplittete Anhänge)
    		EndSelect
    		If GUICtrlRead($cbDownPC) = 1 Then
    			;PC Herunterfahren
    		EndIf
    	EndSelect
    WEnd
    Exit
    #endregion Code
    
    
    #region Funktionen
    Func _AbsChg()
    	GUISetState($GUI_MailSchedul, @SW_HIDE)
    	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 ("+{TAB}") ; wechseln zum Kontonamen
    	Send("^c")
    	$konto = ClipGet()
    	Send("{ESC}")
    	Sleep(50)
    	Send("!{F4}")
    	GUISetState($GUI_MailSchedul, @SW_RESTORE)
    EndFunc
    
    
    Func _AdressAdd()
    Dim $state = 1, $weiter
    	GUISetState($GUI_MailSchedul, @SW_HIDE)
    	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
    			GUICtrlSetData($cAdresslist, $adresse, $adresse)
    			_ArrayAdd($aAdressen, $adresse)
    		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($GUI_MailSchedul, @SW_RESTORE)
    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
    
    
    #endregion Funktionen
    Alles anzeigen
  • anzahl an werte in einem array

    • BugFix
    • 16. August 2006 um 22:28

    Kann gut sein, dass der Zufall es wollte und ich bisher nur mit ebendiesen mehrdimensionalen Arrays gewerkelt habe. Muß ich in Zukunft mal drauf achten.

  • anzahl an werte in einem array

    • BugFix
    • 16. August 2006 um 22:24

    Die blöden Eindimensionalen Arrays bieten von Haus aus nix.
    Must halt mit 'Ubound' die Obergrenze abfragen.
    Bei den mehrdimensionalen Arrays hast du die Anzahl der Elemente in $array[0][0]

    Edit:
    Und schon wieder war Pee schneller! Naja, Hauptsache Problem gelöst.

  • Thunderbird Mail

    • BugFix
    • 16. August 2006 um 22:06

    Hi,
    ich bastele grade an meinem seeeeehr komfortablen :) Mailscheduler für Thunderbird. Etwa 60 % der Arbeit sind schon erledigt und jetzt hänge ich eigentlich am wichtigsten: Einfügen des Absenders bzw. Auswahl per Tastaturbefehl/kombination.
    Ich habe noch keine Möglichkeit gefunden per Tastatur eine im Vorfeld festgelegte Absenderadresse auszuwählen. Bei nur einem Konto wäre das egal - aber wer hat das schon.
    Und TB ist völlig Control-resistent :(
    Wenn ich hier nicht weiterkomm, kann ich das ganze Projekt in die Tonne treten. Wär echt schade.
    Also falls jemand einen goldigen Einfall hat...

    Edit:
    Ich war vielleicht etwas ungenau:
    Also die Absenderadresse liegt in einer Variable vor. Jetzt wird TB gestartet, 'Neue Nachricht' ausgewählt und in das Feld für Absender möchte ich jetzt die Adresse aus der Variablen haben/einfügen/auswählen -wie auch immer.

  • Schleife wird nicht beendet

    • BugFix
    • 16. August 2006 um 00:06

    Wer lange sucht, der findet.
    2 Ursachen:
    1. Opt(WinTitleMatchMode, 4) funktioniert hier nicht optimal, habe Flag 2 gesetzt und damit wurden erstmal die Fenster richtig erkannt.
    2. Ich hatte vorgesehen, dass der Nutzer mit Klick aufs Kreuz das Adressbuch wieder schließt.
    Paradoxerweise tritt dann das Programm nicht aus der Schleife, obwohl Status = 0.
    Wird das Adressbuch mit Tastaturbefehl STRG+Q geschlossen, wird die Schleife ordnungsgemäß beendet!
    Warum? - Ich hab keinen Schimmer.
    Hier der funktionierende Code:

    Spoiler anzeigen
    Code
    Func _AdressAdd()
    Dim $state = 1, $weiter
    	GUISetState($GUI_MailSchedul, @SW_HIDE)
    	Run($path)
    	WinWaitActive("Mozilla")
    	Sleep(50)
    	Send("^2") ; öffnet Adressbuch
    	WinWaitActive("Adressbuch")
    	MsgBox(0,"Zieladresse","Bitte Doppelklick auf gewünschte Adresse im Adressbuch!")
    	Do 
    		WinWaitActive("Karte")
    		Sleep(250)
    		Send("{TAB 4}")	; markiert Adresse
    		Send("^c")		; kopieren
    		$adresse = ClipGet()
    		Send("{ESC}")
    		GUICtrlSetData($cAdresslist, $adresse, $adresse)
    		$weiter = MsgBox(4,"","..nächste Adresse auswählen?")
    		If $weiter = 7 Then Send("^q") ; nein (ja = 6)
    		$state = WinGetState("Adressbuch")
    	Until $state = 0
    	Send("!d")
    	Send("b")
    	GUISetState($GUI_MailSchedul, @SW_RESTORE)
    EndFunc
    Alles anzeigen
  • Schleife wird nicht beendet

    • BugFix
    • 15. August 2006 um 22:58

    Ja, "Adressbuch" ist der volle Name.

  • Schleife wird nicht beendet

    • BugFix
    • 15. August 2006 um 22:29

    Hi,
    schaut mal den folgenden Code an. Ich habe als Abbruchbedingung der Schleife: Fenster wird geschlossen
    Habe das auch probiert mit " while $state <>0 ..... wend ". Aber seltsamerweise kann ich nicht aus der Schleife raus. Wenn ich mir mit MessageBox den Wert von $state anzeigen lasse, ist der auch '0'.
    Hat jemand 'ne Idee?

    Spoiler anzeigen
    Code
    Func _AdressAdd()
    Opt("WinTitleMatchMode",4)	
    Dim $state = 1	
    	Run($path)
    	WinWaitActive("classname=MozillaWindowClass")
    	Sleep(500)
    	Send("^2")
    	WinWaitActive("Adressbuch")
    	MsgBox(0,"Zieladresse","Bitte Doppelklick auf gewünschte Adresse im Adressbuch!" & @LF & @LF & @LF & "Sollen keine weiteren Adressen hinzugefügt werden,"& @LF & @LF & "schließen Sie bitte das Adressbuch!")
    	Do 
    		WinWaitActive("Karte")
    		Sleep(150)
    		Send("{TAB 4}")	; markiert Adresse
    		Send("^c")		; kopieren
    		$adresse = ClipGet()
    		Send("{ESC}")
    		GUICtrlSetData($cAdresslist, $adresse, $adresse)
    		MsgBox(0,"","..nächste Adresse oder beenden", 2)
    		$state = WinGetState("Adressbuch")
    	Until $state = 0
    	Send("!d")
    	Send("b")
    	GUISetState($GUI_MailSchedul, @SW_RESTORE)
    EndFunc
    Alles anzeigen
  • Kleine Frage

    • BugFix
    • 15. August 2006 um 10:45

    Das Prinzip von OOP hat sich nicht geändert, insofern kannst du als Grundlage auch Lehrmittel aus 2001 nutzen.
    Ich hatte mir zum Lernen eine Version von Visual Basic zugelegt, die den vollen Funktionsumfang enthält aber Compilieren nicht zuläßt. Man kann seine Programme also nur in der Entwicklungsumgebung testen. Reicht aber zum Erlernen aus.
    Der Umgang mit Objekten, Klassen, Methoden... ist nicht ohne und gerade am Anfang recht verwirrend. Besonders, wenn man vorher mit Fortran, Turbopascal 4 u.ä. gearbeitet hat.
    Also laß dich nicht entmutigen und hau rein - du kannst nur gewinnen. ;)

    Edit:
    Hab hier ein Tut gefunden. Vielleicht nützt es dir.

  • FAQ

    • BugFix
    • 15. August 2006 um 10:08
    Zitat

    Es soll wohl sogar die Möglichkeit bestehen diese Liste seine Bedürfnissen anzupassen, nur bin ich noch nicht dahinter gekommen wie das geht.

    Schaut erstmal nach, ob das überhaupt nötig ist ;) , denn eigentlich ist ja schon alles drin.
    Öffnet in SciTE die Datei "..\SciTE\au3abbrev.properties". Hier findet ihr die komplette Auflistung in der Form

    Code
    Kürzel=gesamter Befehl od. Makro
    z.B.
    slp1=Sleep(1000)\n|

    Wenn ihr also etwas erweitern möchtet, prüft mit Suchbefehl ob das Kürzel noch frei ist und fügt es dann mit der Befehlsfolge in obiger Form in der entsprechenden Gruppe oder einer eigenen (z.B. #; -- UserDef -- ) ein.

    Edit:
    Ihr könnt allerdings einige Vorlagen an eure Einstellungen anpassen, z.B. die Funktionsbeschreibung läßt sich mit "setupudf" erstellen, sieht dann so aus:

    Code
    ;===============================================================================
    ;
    ; Function Name:   
    ; Description::    
    ; Parameter(s):    
    ; Requirement(s):  
    ; Return Value(s): 
    ; Author(s):       
    ;
    ;===============================================================================
    ;
    Alles anzeigen

    Hier läßt sich schonmal der Autor eintragen und natürlich kann man dann auch deutsch schreiben. =)

  • Flash Klick

    • BugFix
    • 14. August 2006 um 21:07
    Zitat
    Code
    BlockInput(0)
    Sleep
    controlclick("RapidGet", "Start", "TButton4")

    Hinter dem Sleep fehlt noch die Zeitdauer (ms). Deshalb kannst du es sicher nicht kompilieren.

  • Hilfe bei Auto Login für Onlinespiele

    • BugFix
    • 13. August 2006 um 23:07

    Vielleicht noch als Ergänzung:
    Den Namen des Fensters und u.U. auch die der Controls, kannst du mit dem Tool "AutoIt Window Info" (enthalten in Programmgruppe 'AutoIt v3') auslesen. Evtl. hat das Fenster auch keinen Namen. Sofern es zur Laufzeit das einzige 'namenlose' ist, ist es somit eindeutig identifizier- und ansprechbar. Mausklicks solltest du wirklich nur dann ausführen, wenn Steuerung über Controls oder mit Send() nicht realisierbar ist.

  • stringvergleich

    • BugFix
    • 8. August 2006 um 15:06

    Hi,
    da du sagst, Bernds Lösung ist nicht das, was du meinst, ist mir ehrlich gesagt nicht ganz klar, was du geanau möchtest.
    Stell doch mal ein Beispiel ein: Welches ist der Ausgangsstring, was möchtest du selektieren?

    z.B.
    $string = "1234567890"
    $n = variable Anzahl zu selektierender Zeichen ($n = 2)
    $instring = "5"

    wenn $instring in $string enthalten, dann Rückgabe $n Zeichen links davon

    Ergebnis hier: "34"

    Meinst du sowas?

  • Carom3D

    • BugFix
    • 8. August 2006 um 00:04

    Hi,
    habe meinen ersten Urlaubstag mal dazu genutzt, ein Startwiederholungsscript für Carom3D zu schreiben. D.h., das Script hatte ich ja schon - jetzt hab ich es nur allgemeingültig umgebastelt, mit INI für die Einstellungen.

    Spoiler anzeigen

    SETTINGS:

    Code
    #include <GuiConstants.au3>
    Global $butt_x, $butt_y, $var, $path, $game, $c_game, $room, $c_room, $i
    
    
    If FileExists(@ScriptDir & "\" & "carom_again.INI") Then
    	$path = IniRead(@ScriptDir & "\" & "carom_again.INI", "path", "appl", "")
    	$var = IniReadSection(@ScriptDir & "\" & "carom_again.INI", "practicebutton")
    	$butt_x = $var[1][1]
    	$butt_y = $var[2][1]
    	$game = IniReadSection(@ScriptDir & "\" & "carom_again.INI", "game")
    	$room = IniReadSection(@ScriptDir & "\" & "carom_again.INI", "room")
    Else
    	MsgBox(4096, "Achtung !  Fehlende Datei!", "Die Datei: <carom_again.INI> ist nicht im Ordner: <" & @ScriptDir & "\" & "> enthalten!" & @LF & @LF & "Ohne diese Datei kann das Programm nicht ausgeführt werden!")
    	Exit
    EndIf
    
    
    $gui= GuiCreate("Einstellungen Carom3D mit Wiederholung", 392, 329,-1, -1 , BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))
    $Group_appl = GuiCtrlCreateGroup("Anwendung", 30, 10, 340, 50)
    $Input_appl = GuiCtrlCreateInput("", 40, 30, 220, 20)
    $Button_appl_chg = GuiCtrlCreateButton("Ändern", 280, 30, 80, 20)
    $Group_button = GuiCtrlCreateGroup("Position <PRACTICE> Button", 30, 80, 340, 50)
    $Input_button = GuiCtrlCreateInput("", 40, 100, 220, 20)
    $Button_button_chg = GuiCtrlCreateButton("Ändern", 280, 100, 80, 20)
    $Group_game = GuiCtrlCreateGroup("Game Typ", 30, 150, 340, 50)
    $Combo_game = GuiCtrlCreateCombo("", 40, 170, 320, 21)
    $Group_room = GuiCtrlCreateGroup("Room Typ", 30, 220, 340, 50)
    $Combo_room = GuiCtrlCreateCombo("", 40, 240, 320, 21)
    $Button_esc = GuiCtrlCreateButton("Abbrechen", 30, 290, 110, 20)
    $Button_set = GuiCtrlCreateButton("Übernehmen", 260, 290, 110, 20)
    
    
    _FillCombos()
    GUICtrlSetData($Input_appl, $path)
    GUICtrlSetData($Input_button, "x: " & $butt_x & ", y: " & $butt_y)
    GuiSetState()
    
    
    While 1
    	$msg = GuiGetMsg()
    	Select
    	Case $msg = $GUI_EVENT_CLOSE Or $msg = $Button_esc
    		ExitLoop
    	Case $msg = $Button_appl_chg
    		$var = FileOpenDialog("","C:\Program Files\Carom3D\", "(*.exe)")
    		If $var <> ""  And $var <> 1 Then				
    			GUICtrlSetData($Input_appl, $var)
    		EndIf
    	Case $msg = $Button_button_chg
    		HotKeySet("!y", "_MausPos")		; Hotkey für Bestätigung <ALT>+<y>
    		MsgBox(0,"Position 'PRACTICE' - Button", "Bitte Carom3D starten!" & @LF  & @LF & "Den Mauszeiger mittig über dem <PRACTICE> Button positionieren (NICHT klicken!)."  & @LF  & @LF & "Die Position mit <ALT>+<y> bestätigen.")
    		GUISetState(@SW_MINIMIZE, $gui)		
    		WinWaitActive($gui)
    		HotKeySet("!y", "_Blind")
    	Case $msg = $Button_set
    		$path = GUICtrlRead($Input_appl)
    		$c_game = GUICtrlRead($Combo_game)
    		$c_room = GUICtrlRead($Combo_room)
    		If $c_game = "6-Ball" Or $c_game = "9-Ball" Or $c_game = "Rotation" Or $c_game = "Normal-Snooker" Or $c_game = "Short-Snooker" Then
    			MsgBox(4096, "Hinweis", "Für das gewählte Spiel: <" & $c_game & "> muß der Anwendungspfad auf" & @LF & @LF & "die Installation: Carom3D-Full-Practice verweisen." & @LF & @LF & "Sollte das nicht der Fall sein, wird das Tool nicht funktionieren.")
    		EndIf
    		_WriteINI()
    		Exit
    	EndSelect
    WEnd
    Exit
    
    
    Func _FillCombos()
    Dim $c_game = $game[10][1], $c_room = $room[9][1], $tmp
    	GUICtrlSetData($Combo_game, "")
    	For $i = 1 To $game[0][0]-1
    		$tmp = $game[$i][0]
    		GUICtrlSetData($Combo_game, $tmp, $c_game)
    	Next
    	GUICtrlSetData($Combo_room, "")
    	For $i = 1 To $room[0][0]-1
    		$tmp = $room[$i][0]
    		GUICtrlSetData($Combo_room, $tmp, $c_room)
    	Next
    EndFunc
    
    
    Func _MausPos()
    	$pos = MouseGetPos()
    	$butt_x = $pos[0]
    	$butt_y = $pos[1]
    	GUICtrlSetData($Input_button, "x: " & $butt_x & ", y: " & $butt_y)	
    	GUISetState(@SW_RESTORE, $gui)		
    EndFunc
    
    
    Func _WriteINI()
    	IniWrite(@ScriptDir & "\" & "carom_again.INI", "path", "appl", $path)
    	IniWrite(@ScriptDir & "\" & "carom_again.INI", "practicebutton", "pos_x", $butt_x)
    	IniWrite(@ScriptDir & "\" & "carom_again.INI", "practicebutton", "pos_y", $butt_y)	
    	IniWrite(@ScriptDir & "\" & "carom_again.INI", "game", "Current_Game", $c_game)
    	IniWrite(@ScriptDir & "\" & "carom_again.INI", "room", "Current_Room", $c_room)
    	IniWrite(@ScriptDir & "\" & "carom_again.INI", "set", "done", 1)
    EndFunc
    
    
    Func _Blind()
    	; ohne Funktion - nur Aufhebung Hotkey
    EndFunc
    Alles anzeigen

    WIEDERHOLUNGSSCRIPT

    Code
    #NoTrayIcon
    Dim $state, $aktiv, $butt_x, $butt_y, $var, $path, $game, $c_game, $key_game, $room, $c_room, $key_room, $i
    
    
    If FileExists(@ScriptDir & "\" & "carom_again.INI") Then
    	$var = IniRead(@ScriptDir & "\" & "carom_again.INI", "set", "done", "")
    	If $var = 0 Then
    		MsgBox(4096, "Achtung", "Die 'carom_again_settings' müssen zumindest einmal ausgeführt" & @LF & @LF & "und an deine Installation angepaßt werden." & @LF & @LF & @LF & @LF & "Das Einstellungsprogramm wird jetzt aufgerufen.")
    		Run(@ScriptDir & "\" & "carom_again_settings.exe")
    		If @error Then
    			MsgBox(4096, "Achtung!", "Das Einstellungsprogramm: 'carom_again_settings.exe' ist nicht im Installationspfad: " & @ScriptDir & "\" & "vorhanden!" & @LF & @LF & "Das Programm wird jetzt beendet.")
    			Exit
    		EndIf
    		While $var = 0
    			Sleep(250)
    			$var = IniRead(@ScriptDir & "\" & "carom_again.INI", "set", "done", "")
    		WEnd		
    	EndIf	
    	$path = IniRead(@ScriptDir & "\" & "carom_again.INI", "path", "appl", "")
    	$var = IniReadSection(@ScriptDir & "\" & "carom_again.INI", "practicebutton")
    	$butt_x = $var[1][1]
    	$butt_y = $var[2][1]
    	$game = IniReadSection(@ScriptDir & "\" & "carom_again.INI", "game")
    	$c_game = $game[10][1]
    	$room = IniReadSection(@ScriptDir & "\" & "carom_again.INI", "room")
    	$c_room = $room[9][1]
    Else
    	MsgBox(4096, "Achtung !  Fehlende Datei!", "Die Datei: <carom_again.INI> ist nicht im Ordner: <" & @ScriptDir & "\" & "> enthalten!" & @LF & @LF & "Ohne diese Datei kann das Programm nicht ausgeführt werden!")
    	Exit
    EndIf
    HotKeySet("!y", "_CaromStart") 
    $aktiv = 0
    For $i = 1 To $game[0][0]-1
    	If $game[$i][0] = $c_game Then 
    		$key_game = $game[$i][1]
    		ExitLoop
    	EndIf
    Next
    For $i = 1 To $room[0][0]-1
    	If $room[$i][0] = $c_room Then
    		$key_room = $room[$i][1]
    		ExitLoop
    	EndIf
    Next
    MsgBox(4096, "Hinweis", "Es startet jetzt automatisch das voreingestellte Spiel im voreingestellten Raum." & @LF & @LF & "Nach Beendigung des Spiels, kann mit der Tastenkombination:" & @LF & @LF & "< ALT > + < y >" & @LF & @LF & "sofort ein neues Spiel begonnen werden." & @LF & @LF & @LF & @LF & "© Frank Stahlke  2006" & @LF & @LF & "eMail: bug_fix@web.de" & @LF & @LF & "Created with AutoIt3")
    
    
    While 1
    	Sleep(500)
    	$state = WinGetState("Carom3D", "")
    	Select
    	Case $state = 0 And $aktiv = 1
    		ExitLoop
    	Case $aktiv = 0 ; Practice Mode
    		Run($path)
    		If @error Then
    			MsgBox(4096, "Achtung", "Programmpfad der Anwendung: " & $path & " ist nicht vorhanden!")
    			Exit
    		EndIf
    		WinWaitActive("Carom3D")
                    Sleep(1000)
    		$aktiv = 1
    		_CaromStart()
    	EndSelect
    WEnd
    Exit
    
    
    Func _CaromStart()
    	BlockInput(1)
    	MouseClick("left",$butt_x,$butt_y,1,0)
    	Send($key_game)
    	Send("{TAB}")
    	Send($key_room)
    	Send("{ENTER}")
    	BlockInput(0)
    EndFunc
    Alles anzeigen

    INI

    Code
    [path]
    appl=C:\Program Files\Carom3D\carom.exe
    
    
    [practicebutton]
    pos_x=536
    pos_y=178
    
    
    [game]
    3-Cushion=3
    4-Ball=4
    6-Ball=6
    8-Ball=e
    9-Ball=9
    CardBall=c
    Rotation=r
    Short-Snooker=s
    Normal-Snooker=n
    Current_Game=8-Ball
    
    
    [room]
    Underground=u
    Japanese=j
    Korean=k
    Millennium=m
    Christmas=c
    Event=e
    Antique=a
    CaromBeach={PGDN}
    Current_Room=Korean
    
    
    [set]
    done=0
    Alles anzeigen


    Damit ich die INI-Datei anhängen konnte, hab ich ihr noch den Suffix .txt verpaßt. Bei Nutzung also wieder entfernen.

    Und das ganze mit der Beta nutzen. Gute Nacht auch noch.


    Edit:
    Kleine Änderung - ich hatte glatt Snooker vergessen einzubauen. Jetzt ist aber alles komplett.

    Edit 2:
    Aus mir nicht erklärlichen Gründen funktioniert das BlockInput() (Script: carom_again.au3; Zeilen: 65 bis 73) nicht. Der User kann beim Erststart die Maus munter bewegen, sodass die gesendeten Befehle verpuffen.
    Hängt vermutlich damit zusammen, dass vorm Aufruf der Funktion zwar mit WinWaitActive() (Zeile 58 ) auf das Fenster gewartet wird, dieses jedoch noch nicht komplex aufgebaut ist (die Befehle somit ins Leere gehen).
    Ich habe jetzt hinter das WinWaitActive() noch ein Sleep(800) gesetzt und nun funktioniert es auch. Wobei 800 ms die untere Grenze ist. Ich denke mit 1 s ist man absolut auf der sicheren Seite.

    Dateien

    readme_carom.txt 2,22 kB – 451 Downloads carom_again_settings.au3 4,19 kB – 369 Downloads carom_again.au3 2,78 kB – 413 Downloads

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™