Hallo an alle,
Ich hab mir schon die Finger Wund gegoogelt aber ich finde keine Möglichkeit (bevorzugt) herauszufinden ob ein bestimmter Button gerade den Fokus hat und wenn ja soll eine Funktion ausgeführt werden, oder (alternativ) sobald In eine bestimmte
InputBox Text eingegeben Wurde, 50 MS warten und dann eine Funktion auszuführen.
Hintergrund, Eine Gui mit 9 InputBoxen, per strg+c werden in anderen Fenstern markierte Texte kopiert und in die nächste Inputbox übertragen (Danke an Oscar und BugFix).
Wenn jetzt der Letzte Input befüllt ist, wechselt der Fokus (mittels send TAB) immer auf den Button - Jetzt soll eigentlich eine Funktion aufgerufen werden oder eben wenn im Letzten inputfeld Text steht.
Hier mal das bisherige Script :
Spoiler anzeigen
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Clipboard.au3>
#include <SendMessage.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <StructureConstants.au3>
#include <GuiEdit.au3>
#Include <WinAPI.au3>
Global $DocArt
$hGui = GUICreate('ClipboardViewer')
$hNext = _ClipBoard_SetViewer($hGui)
GUIRegisterMsg($WM_CHANGECBCHAIN, 'WM_CHANGECBCHAIN')
GUIRegisterMsg($WM_DRAWCLIPBOARD, 'WM_DRAWCLIPBOARD')
#Region
$Form1 = GUICreate("AutoWord - Anschreiben", 623, 267, -1, -1)
GUISetBkColor(0x000000)
$CardLabelLabel = GUICtrlCreateLabel("CardLabel :", 8, 8, 58, 17)
GUICtrlSetColor(-1, 0xFFFFFF)
$CardLabelInput = GUICtrlCreateInput("", 77, 7, 121, 20)
$BestellDatumLabel = GUICtrlCreateLabel("Bestelldate :", 8, 32, 62, 17)
GUICtrlSetColor(-1, 0xFFFFFF)
$BestellDatumInput = GUICtrlCreateInput("", 77, 30, 121, 21)
$GenderLabel = GUICtrlCreateLabel("Geschlecht :", 8, 56, 64, 17)
GUICtrlSetColor(-1, 0xFFFFFF)
$GenderInput = GUICtrlCreateInput("", 77, 54, 121, 21)
$VNameLabel = GUICtrlCreateLabel("Vorname :", 8, 80, 52, 17)
GUICtrlSetColor(-1, 0xFFFFFF)
$VNameInput = GUICtrlCreateInput("", 77, 78, 121, 21)
$NNameLabel = GUICtrlCreateLabel("Nachname :", 8, 104, 62, 17)
GUICtrlSetColor(-1, 0xFFFFFF)
$NNameInput = GUICtrlCreateInput("", 77, 102, 121, 21)
$StrasseFinaleLabel = GUICtrlCreateLabel("Straße :", 8, 128, 41, 17)
GUICtrlSetColor(-1, 0xFFFFFF)
$StrasseFinaleInput = GUICtrlCreateInput("", 77, 126, 121, 21)
$PlzortLabel = GUICtrlCreateLabel("PLZ-Ort :", 8, 152, 47, 17)
GUICtrlSetColor(-1, 0xFFFFFF)
$PlzortInput = GUICtrlCreateInput("", 77, 150, 121, 21)
$VWZweckLabel = GUICtrlCreateLabel("VW-Zweck :", 8, 176, 64, 17)
GUICtrlSetColor(-1, 0xFFFFFF)
$VWZweckInput = GUICtrlCreateInput("", 77, 174, 121, 21)
$AmountLabel = GUICtrlCreateLabel("Amount :", 8, 202, 46, 17)
GUICtrlSetColor(-1, 0xFFFFFF)
$AmountInput = GUICtrlCreateInput("", 77, 200, 121, 21)
$ButtonZurListe = GUICtrlCreateButton("Zur Liste", 123, 224, 75, 25)
$ButtonEingabeVerwerfen = GUICtrlCreateButton("X", 77, 224, 27, 25)
$ButtonListeLoeschen = GUICtrlCreateButton("Liste Löschen", 201, 224, 75, 25)
$ButtonBestellAnschreiben = GUICtrlCreateButton("B-An", 480, 224, 43, 25)
$ButtonZahlungserinnerung = GUICtrlCreateButton("ZE-An", 528, 224, 43, 25)
$ButtonZweiteMahnung = GUICtrlCreateButton("ZM-An", 576, 224, 43, 25)
$Liste = GUICtrlCreateEdit("", 200, 7, 419, 214)
GUISetState(@SW_SHOW)
#EndRegion
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
_ClipBoard_ChangeChain($hGui, $hNext)
Exit
Case $ButtonBestellAnschreiben
_BestellAnschreiben ()
Case $ButtonZurListe
_ZurListe ()
Case $ButtonListeLoeschen
_Listeloeschen ()
Case $ButtonEingabeVerwerfen
_InputsLoeschen ()
EndSwitch
WEnd
Func _BestellAnschreiben ()
$lines = StringSplit(GUICtrlRead($Liste), @CRLF, 3)
for $i = 0 to UBound($lines)-2
$fret = StringSplit($lines[$i], ";")
$WhiteLabelFinal = $fret[1]
$BestellDatumFinal = $fret[2]
$GenderFinal = $fret[3]
$VorNameFinal = $fret[4]
$NachNameFinal = $fret[5]
$StrasseFinal = $fret[6]
$PLZundOrtFinal = $fret[7]
$VerwendungsZweckFinal = $fret[8]
$AmountFinal = $fret[9]
If StringInStr($AmountFinal, ".") Then
$AmountFinal = StringRegExpReplace($AmountFinal, "[.]", ",")
$AmountFinal = $AmountFinal & "0"
Else
$AmountFinal = $AmountFinal & ",00"
EndIf
If $WhiteLabelFinal = "xxxxx" Then
$DocArt = "xxxxx"
ElseIf $WhiteLabelFinal = "xxcard" Then
$DocArt = "xx"
ElseIf $WhiteLabelFinal = "cccccccc" Then
$DocArt = "Cristal"
EndIf
ShellExecute($DocArt & "BE.docx")
WinWaitActive($DocArt & "BE - Word")
Sleep(850)
Send("^h")
WinWaitActive("Suchen und Ersetzen")
Send("!e")
Sleep(100)
Send("!k")
Sleep(50)
Send("!n")
Sleep(100)
Send("!h")
Sleep(200)
Send("XXXX")
Sleep(100)
Send("!d")
Sleep(200)
Send($VorNameFinal)
Sleep(200)
Send("!a")
Sleep(500)
Send("{Enter}")
Sleep(200)
Send("!h")
Sleep(200)
Send("IIII")
Sleep(100)
Send("!d")
Sleep(200)
Send($NachNameFinal)
Sleep(200)
Send("!a")
Sleep(500)
Send("{Enter}")
$Gender1 = $GenderFinal
If $Gender1 = "Herr" Then
Sleep(200)
Send("!h")
Sleep(200)
Send("JJJJ")
Sleep(100)
Send("!d")
Sleep(200)
Send("geehrter")
Sleep(200)
Send("!a")
Sleep(500)
Send("{Enter}")
ElseIf $Gender1 = "Frau" Then
Sleep(200)
Send("!h")
Sleep(200)
Send("JJJJ")
Sleep(100)
Send("!d")
Sleep(200)
Send("geehrte")
Sleep(200)
Send("!a")
Sleep(500)
Send("{Enter}")
EndIf
Sleep(200)
Send("!h")
Sleep(200)
Send("PPPP")
Sleep(100)
Send("!d")
Sleep(200)
Send($GenderFinal)
Sleep(200)
Send("!a")
Sleep(500)
Send("{Enter}")
Sleep(200)
Send("!h")
Sleep(200)
Send("KKKK")
Sleep(100)
Send("!d")
Sleep(200)
Send($StrasseFinal)
Sleep(200)
Send("!a")
Sleep(500)
Send("{Enter}")
Sleep(200)
Send("!h")
Sleep(200)
Send("LLLL")
Sleep(100)
Send("!d")
Sleep(200)
Send($PLZundOrtFinal)
Sleep(200)
Send("!a")
Sleep(500)
Send("{Enter}")
Sleep(200)
Send("!h")
Sleep(200)
Send("GGGGGGGGGGGGGG")
Sleep(100)
Send("!d")
Sleep(200)
Send($VerwendungsZweckFinal)
Sleep(200)
Send("!a")
Sleep(500)
Send("{Enter}")
Sleep(200)
Send("!h")
Sleep(200)
Send("MMMM")
Sleep(100)
Send("!d")
Sleep(200)
Send($AmountFinal)
Sleep(200)
Send("!a")
Sleep(500)
Send("{Enter}")
Sleep(200)
Send("{Esc}")
Sleep(500)
Send("{F12}")
WinWaitActive("Speichern unter")
Sleep(200)
$Gender2 = $GenderFinal
If $Gender2 = "Herr" Then
$GenderShort = "Hr. "
ElseIf $Gender2 = "Frau" Then
$GenderShort = "Fr. "
EndIf
Send($GenderShort& $NachNameFinal & " - " & $DocArt & " - BE")
Sleep(150)
Send("{Enter}")
WinWaitClose("Speichern unter")
Sleep(150)
Send("!{F4}")
WinWaitClose($GenderShort& $NachNameFinal & " - " & $DocArt & " -BE - Word")
Sleep(350)
Next
EndFunc
Func _ZurListe ()
$data = StringStripWS(GUICtrlRead($CardLabelInput), 3) & ";" & StringStripWS(GUICtrlRead($BestellDatumInput), 3) & ";" & StringStripWS(GUICtrlRead($GenderInput), 3) & ";" _
& StringStripWS(GUICtrlRead($VNameInput), 3) & ";" & StringStripWS(GUICtrlRead($NNameInput), 3) & ";" & StringStripWS(GUICtrlRead($StrasseFinaleInput), 3) & ";" _
& StringStripWS(GUICtrlRead($PlzortInput), 3) & ";" & StringStripWS(GUICtrlRead($VWZweckInput), 3) & ";" & StringStripWS(GUICtrlRead($AmountInput), 3)
$olddata = GUICtrlRead($Liste)
GUICtrlSetData($Liste, $olddata & $data & @CRlf)
_InputsLoeschen ()
EndFunc
Func _Copy()
Sleep(50)
Send("!{tab}")
Sleep(50)
Send("^v")
Sleep(50)
Send("{tab}")
Sleep(50)
Send("!{tab}")
Sleep(50)
Send("{lctrl}")
EndFunc
Func _Listeloeschen ()
GUICtrlSetData($Liste, "")
EndFunc
Func _InputsLoeschen ()
GUICtrlSetData($CardLabelInput, "")
GUICtrlSetData($BestellDatumInput, "")
GUICtrlSetData($GenderInput, "")
GUICtrlSetData($VNameInput, "")
GUICtrlSetData($NNameInput, "")
GUICtrlSetData($StrasseFinaleInput, "")
GUICtrlSetData($PlzortInput, "")
GUICtrlSetData($VWZweckInput, "")
GUICtrlSetData($AmountInput, "")
GUICtrlSetState($CardLabelInput, $GUI_FOCUS)
EndFunc
Func WM_CHANGECBCHAIN($hWnd, $iMsg, $iwParam, $ilParam)
If $iwParam = $hNext Then
$hNext = $ilParam
ElseIf $hNext <> 0 Then
_SendMessage($hNext, $WM_CHANGECBCHAIN, $iwParam, $ilParam, 0, 'hwnd', 'hwnd')
EndIf
EndFunc
Func WM_DRAWCLIPBOARD($hWnd, $iMsg, $iwParam, $ilParam)
Local $sClipBoard = _ClipBoard_GetData()
_Copy()
If $hNext <> 0 Then _SendMessage($hNext, $WM_DRAWCLIPBOARD, $iwParam, $ilParam)
EndFunc
Alles anzeigen
Evtl. jemand eine Idee ?
MfG Eistee
Ok, Habs jetzt gelöst mit :
Func _Copy()
Sleep(50)
Send("!{tab}")
Sleep(50)
Send("^v")
Sleep(50)
Send("{tab}")
Sleep(50)
If ControlGetFocus($Form1) = "Button1" Then
Send("{Enter}")
EndIf
Sleep(50)
Send("!{tab}")
Sleep(50)
Send("{lctrl}")
EndFunc
Alles anzeigen
Kann mit aber nicht erklären warum ControlGetFocus in diesem Fall Button1 ausgeben muss, aber man nimmt was man kriegt und es funktioniert