Ja, hab ich.
Wollte dir nur nochmal erklären, für was eine Funktion ist usw.
Stellst du dein Script nochmal komplett zur verfügung, eventuell haben daran auch andere interesse.
Danke
Gruß gmmg
Ja, hab ich.
Wollte dir nur nochmal erklären, für was eine Funktion ist usw.
Stellst du dein Script nochmal komplett zur verfügung, eventuell haben daran auch andere interesse.
Danke
Gruß gmmg
Klar, ich stelle gerne den kompletten Code hier ein...
Allerdings habe ich die Fenstergröße und die Fensterbezeichnungen angepaßt, sowie den Speicherort sowie den Fenstertitel geändert.
Aber das kann sich ja jeder individuell ändern.
Hier also der komplette Code:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>
#include <Word.au3>
#NoTrayIcon
; activate part match mode of title
AutoItSetOption("WinTitleMatchMode",2)
$AutoIT = GUICreate(" Memo speichern", 230, 155)
$Read = GUICtrlCreateButton("Memo einlesen", 70, 20, 100, 25) ; Abstand von li, oben, Breite, Höhe
$ok1 = GUICtrlCreateLabel("",180, 25, 155, 25)
GUICtrlCreateLabel("Bitte Nummer + Name eingeben!",45, 60, 180, 25) ; Abstand von li, oben, Breite, Höhe
$Number = GUICtrlCreateInput("", 20, 80, 190, 25)
$Save = GUICtrlCreateButton("Memo speichern", 70, 120, 100, 25)
GUICtrlSetState($Save, $GUI_DISABLE) ; Deaktiviert den Speichern Button
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Read
$text = "" ; leert Variable
_get_Text()
Sleep(1000)
If $text <> "" Then
GUICtrlSetData($ok1, "OK")
GUICtrlSetState($Save, $GUI_ENABLE) ; Aktiviert den Speichern Button
GUICtrlSetState($Read, $GUI_DISABLE) ; Deaktiviert den LeseButton
EndIf
Case $Save
$txt_Number = "" ; leert Variable
$txt_Number = GUICtrlRead($Number) ; liest Nummer aus Inputfeld $Number
While 1
If $txt_Number <> "" Then
_Save_to_Word()
$txt_Number = "" ; leert Variable
$text = "" ; leert Variable
GUICtrlSetData($Number, "")
GUICtrlSetData($ok1, "")
GUICtrlSetState($Save, $GUI_DISABLE) ; Deaktiviert den Speichern Button
GUICtrlSetState($Read, $GUI_ENABLE) ; Aktiviert den Lese Button
ExitLoop ; Springt aus Schleife
Else
MsgBox(0,"Achtung","darf nicht leer sein")
ExitLoop ; Springt aus Schleife
EndIf
WEnd
EndSwitch
WEnd
Func _Save_to_Word()
$savePath = "C:\Pfad\" ; Pfad zum Speicher der Dokumente
;~ ; Word starten
;~ $oWord = ObjCreate("Word.Application")
;~ ; leeres Dokument hinzufügen
;~ $oDoc = $oWord.Documents.Add()
;~ ; make word visible
;~ $oWord.Visible = true
;~ ; insert text into document
;~ $oDoc.Content.Text = $text
$oWord = _Word_Create(1)
$oDoc = _Word_DocAdd($oWord)
;$oWord.Selection.TypeText ($text)
$oWord.Selection.Paste
;_Word_DocSaveAs($oDoc, "d:\"& $txt_Filename,12) ; save as docx")
Local $iFileExists = FileExists($savePath & $txt_Number & ".doc")
If $iFileExists Then
$ja_nein = MsgBox(4, "", "The file exists." & @CRLF & "Überschreiben Ja/Nein")
IF $ja_nein = 6 Then _Word_DocSaveAs($oDoc, $savePath & $txt_Number) ; save as doc")
IF $ja_nein = 7 Then MsgBox(0,"","Datei wird nicht gespeichert!")
Else
_Word_DocSaveAs($oDoc, $savePath & $txt_Number) ; save as doc")
EndIf
_Word_Quit($oWord)
EndFunc
Func _get_Text()
; Titel of Window
$wintitle = "Fenstertitel"
; activate window
WinActivate($wintitle)
; wait max 10 seconds for window to become active
If WinWaitActive($wintitle,"",5) = 0 then
Msgbox(16,"Timeout","Konnte Fenster nicht finden!")
Exit 1
EndIf
; retrieve text of control
;$text = ControlGetText($wintitle,"","[CLASS:TwwDBRichEdit; INSTANCE:1]")
Sleep (2000)
Send("^a"); alles markieren
Sleep (1000)
Send("^c"); kopieren
$text = ClipGet()
;MsgBox(0,"",$text)
EndFunc
Alles anzeigen
Danke nochmals und schöne Grüße,
imebro
bitte ... kannst im ersten Post noch auf gelöst setzen ..
Grüße zurück ...
gmmg
Hallo "gmmg",
habe das Thema nun als gelöst markiert
Danke und schöne Grüße (auch von den Kolleg-/innen)
imebro
Hätte doch nochmal ne Frage
in - sagen wir - 90% der Fälle wird das Textfeld sofort ausgelesen, wenn man in der GUI auf "Memo einlesen" klickt.
Seltsamer Weise muss man aber manchmal 2 x darauf klicken, damit eingelesen wird.
Zur Info:
Die GUI ist zwar deaktiviert (Titelleiste grau statt blau), aber wie gesagt, funktioniert es meist mit einem Klick.
Manchmal aber eben nicht... und das liegt offenbar nicht daran, dass die GUI nicht aktiviert ist (blaue Titelleiste).
Gibt´s dafür noch ne Lösung oder ne Idee?
LG
imebro
Nach dem aufruf dein Fenster wieder aktivieren (WinActivate($AutoIT)).
Bei dir also ans Ende von _get_Text()
Danke zunächst @ "Kanashius".
Das GUI-Fenster bleibt bei uns immer offen.
Wir schieben die kleine GUI an den Rand des Monitors und in der Mitte läuft das Programm, aus dessen Fenster dann der Inhalt ausgelesen wird.
Muss ich dennoch so vorgehen, wie von Dir eben beschrieben?
LG
imebro
In deinem Script wird das andere Fenster in den Vordergrund geholt. Demnach ist die Gui nicht mehr aktiv -> sie muss wieder in den Vordergrund geholt werden, also ja.
Habe Deinen Code eben mal in Zeile 10 und später auch in Zeile 19 eingegeben.
Beide Tests funktionierten nicht.
Func _get_Text()
; Titel of Window
$wintitle = "Stiftungsanträge / Einzelfallhilfen"
; activate window
WinActivate($wintitle)
; wait max 10 seconds for window to become active
If WinWaitActive($wintitle,"",5) = 0 then
Msgbox(16,"Timeout","Konnte Fenster nicht finden!")
Exit 1
EndIf
; retrieve text of control
;$text = ControlGetText($wintitle,"","[CLASS:TwwDBRichEdit; INSTANCE:1]")
Sleep (500)
Send("^a"); alles markieren
Sleep (500)
Send("^c"); kopieren
$text = ClipGet()
;MsgBox(0,"",$text)
WinActivate($AutoIT)
EndFunc
Alles anzeigen
Der Vorgang ist ja so:
Wir befinden uns in einem Programm
Dort gibt es ein Memofeld
In diesem befindet sich unser Cursor
Dieses Memofeld soll nun ausgelesen werden.
Dazu klicken wir dann rechts am Rand in die GUI von AutoIt auf den Button "Memo einlesen"...
So ist der Ablauf.
Die GUI müßte also auch aktiv bleiben, wenn wir uns in dem Memo-Textfeld unseres Programms befinden.
Somit wären dann quasi beide (Programm und AutoIt-GUI) aktiv.
Geht das?
LG
imebro
Nach Windows (siehe MSDN) kann nur EIN Fenster aktiv sein. Wird ein anderes Fenster aktiviert, werden alle anderen Deaktiviert.
Ist eine der Grundsäulen von Windows, da da aktive Fenster auch die passenden Messages bekommt, etc.
Pack das WinActivate nochmal ans Ende von _Save_to_Word(). Hab grad gesehen, dass das Word Fenster visible gemacht wird und somit evtl. auch den Fokus bekommt.
Danke @ "Kanashius".
Habe das gerade mal versucht.
Leider brachte auch das nicht den gewünschen Erfolg.
Ich hatte es so eingetragen:
Func _Save_to_Word()
$savePath = "S:\ARCHIV\Mittelvergabe\Memos\" ; Pfad zum Speicher der Dokumente
;~ ; Word starten
;~ $oWord = ObjCreate("Word.Application")
;~ ; leeres Dokument hinzufügen
;~ $oDoc = $oWord.Documents.Add()
;~ ; make word visible
;~ $oWord.Visible = true
;~ ; insert text into document
;~ $oDoc.Content.Text = $text
$oWord = _Word_Create(1)
$oDoc = _Word_DocAdd($oWord)
;$oWord.Selection.TypeText ($text)
$oWord.Selection.Paste
;_Word_DocSaveAs($oDoc, "d:\"& $txt_Filename,12) ; save as docx")
Local $iFileExists = FileExists($savePath & $txt_Number & ".doc")
If $iFileExists Then
$ja_nein = MsgBox(4, "", "Die Datei existiert bereits." & @CRLF & "Überschreiben Ja/Nein")
IF $ja_nein = 6 Then _Word_DocSaveAs($oDoc, $savePath & $txt_Number) ; save as doc")
IF $ja_nein = 7 Then MsgBox(0,"","Datei wird nicht gespeichert!")
Else
_Word_DocSaveAs($oDoc, $savePath & $txt_Number) ; save as doc")
EndIf
_Word_Quit($oWord)
WinActivate($AutoIT)
EndFunc
Alles anzeigen
...siehe Zeile 25.
LG
imebro