Sehr schön.
Kann man sehr gut gebrauchen. Habe ich mir immer schon gewünscht.
ALLERDINGS:
Es fehlt noch ein #include <File.au3> im DownloadScript. Zumindest funktioniert es bei mir sonst nicht.
Gruß und besten Dank
Autoirrer
Sehr schön.
Kann man sehr gut gebrauchen. Habe ich mir immer schon gewünscht.
ALLERDINGS:
Es fehlt noch ein #include <File.au3> im DownloadScript. Zumindest funktioniert es bei mir sonst nicht.
Gruß und besten Dank
Autoirrer
Also die Lösung von GTASpider funktioniert schon einwandfrei.
Aber man ist ja nie zufrieden mit dem was man schon hat.
Jetzt bekommt man das hin das man in der
[autoit]func gui_schliessen()
[/autoit]
die Zeile herausfindet wo der blaue Balken steht Kann ich aber auch den blauen Balken auf eine andere Zeile setzen (z.B. auf die nächste Zeile?)
Gruß Autoirrer
Das klappt zwar nicht, aber @cr mit @CRLF ersetzen klappt.
Danke
Hallo
Ich importiere ein Text aus Word in ein GUICtrlCreateEdit Feld in Autoit. Jetzt erscheint aber in meinem Edit Feld statt einem Zeilenumbruch ein kleines Kästchen.
Wie kann ich das wieder durch einen Zeilenumbruch ersetzen. Habe vesucht dieses Kästchen zu kopieren und dann in Scite in einer Stringreplace Zeile einzufügen. Das Kästchen kann man aber nicht kopieren. Scite macht aus diesem Kästchen wieder einen Zeilenumruch.
Gibt es da einen Trick?
Gruß Autoirrer
Argh
Das war zuviel des guten. Danke jetzt klappt es so wie gewünscht.
Schönes Wochenende
Gruß Autoirrer
mhhh
Bei mir klappt das nicht, oder hab ich da noch was falsch. Mein Test Code
#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]Opt("GUIOnEventMode", 1)
$Hauptform = GUICreate("Multiline", 924, 492, 193,115)
$Uebersicht = GUICtrlCreateEdit("Hier bitte einen langen Text eingeben", 8, 40, 905, 297, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL,$ES_WANTRETURN,$WS_VSCROLL,$ES_MULTILINE))
GUISetState(@SW_SHOW)
While 1
Sleep(100)
WEnd
Wenn ich dann einen langen Text eingebe wandert der Text aus dem Fenster und wird nicht am Fensterrand umgebrochen. Wo liegt mein Fehler?
Gruß Autoirrer
Hallo
Ich importiere ein Text von einer Word Datei ine in GUICtrlCreateEdit Feld. In diesem Feld editere ich den Text.
Wenn der Text allerdings zu lang ist für das Edit Feld, wird nicht automatisch ein Zeilenumbruch eingefügt. Eigentlich will ich auch keinen echten Zeilenumbruch sondern nur das der Text in dem Edit Feld dann zweizeilig dargestellt wird. Wenn ich nachher den Text wieder von dem Edit Feld in ein anderes Textbearbeitungsprogramm einfügen will, soll hier kein Umruch an der Stelle sein. Es sollen nur echte Zeilenumbrüche die ich im Edit Feld durch Enter eingebe übernommen werden.
Bekommt man das mit einem Edit Feld hin?
Wenn ja wie?
Gruß Autoirrer
Hallo
Was muss ich im unteren Beispiel in der Funktion "gui_schliessen()" eintragen damit mir beim schliessen angezeit wird auf welche Zeile der Cursor (also der blaue Balken) in der Liste steht?
Hatte das schon mit _GUICtrlListView_GetItemSelected probiert. Das klappt aber nicht.
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
Opt("GUIOnEventMode", 1)
Opt('MustDeclareVars', 1)
Global $hListView
Example_External()
Func Example_External()
Local $GUI, $hListView
$GUI = GUICreate("(External) ListView Get Checked State", 400, 300)
GUISetOnEvent($GUI_EVENT_CLOSE, "gui_schliessen")
$hListView = _GUICtrlListView_Create ($GUI, "", 2, 2, 394, 268)
_GUICtrlListView_SetExtendedListViewStyle ($hListView, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES))
GUISetState()
; Add columns
_GUICtrlListView_AddColumn ($hListView, "Column 1", 100)
_GUICtrlListView_AddColumn ($hListView, "Column 2", 100)
_GUICtrlListView_AddColumn ($hListView, "Column 3", 100)
; Add items
_GUICtrlListView_AddItem ($hListView, "Row 1: Col 1", 0)
_GUICtrlListView_AddSubItem ($hListView, 0, "Row 1: Col 2", 1)
_GUICtrlListView_AddSubItem ($hListView, 0, "Row 1: Col 3", 2)
_GUICtrlListView_AddItem ($hListView, "Row 2: Col 1", 1)
_GUICtrlListView_AddSubItem ($hListView, 1, "Row 2: Col 2", 1)
_GUICtrlListView_AddItem ($hListView, "Row 3: Col 1", 2)
; Check item 2
_GUICtrlListView_SetItemChecked ($hListView, 1)
_GUICtrlListView_SetItemChecked ($hListView, 0)
_GuiCtrlListView_SetItemFocused ($hListView, 1)
_GUICtrlListView_SetItemSelected ($hListView, 1)
While 1
Sleep(100)
WEnd
EndFunc ;==>Example_External
func gui_schliessen()
EndFunc
Gruß Autoirrer
Danke TrueMu.
Da ich mich einigermassen mit VBA auskenne habe ich eine andere Lösung gefunden. Bei der Umsetzung zu AutoIt hapert es allerdings noch manchmal!
Hier also die Lösung die zumindest bei mir funktioniert:
$aktuellesFormfield = $oDok.Bookmarks.Exists("doc_Tagessatz")
if $aktuellesFormfield <> 0 Then
msgbox(0,"Feld ist vorhanden!","")
Endif
Gruß Autoirrer
Hallo
Ich lese über AutoIt eine Word Datei aus. Dieses mache ich indem ich die Formularfelder auslese und den Inhalt in ein Array abspeichere. Siehe folgenden Code:
$oWord = ObjCreate("Word.Application")
$oWord.Visible = 1
$oWordDocuments = $oWord.Documents
$oDok = $oWord.Documents.Open("c:\test.doc")
$fftext = $oDok.FormFields("doc_Berichtsnummer")
$array_doc_[0] = $fftext.Result
$fftext = $oDok.FormFields("doc_Tagessatz")
$array_doc_[1] = $fftext.Result
Nun habe ich in manchen Word Dateien allerdings nicht das Formularfeld "doc_Tagessatz". Das Formularfeld existiert nicht. Mein AutoIt Script hält hier dann mit einer Fehlermeldung an.
The requested action with this object has failed.:
$fftext = $oDok.FormFields("doc_Tagessatz")
$fftext = $oDok.FormFields("doc_Tagessatz")^ ERROR
Wie kann ich das abfangen, das der Code in AutoIt weiterbearbeitet wird. Kann ich vorher prüfen ob es das Forumlarfeld in meiner Word Datei gibt?
Gruß Autoirrer
Hallo
Ich brauche mal wieder eure Hilfe.
Habe folgende Situation:
Ich habe eine Textdatei in der z.B. folgendes steht.Hier steht nur eine Zeile. Es sind etliche Zeilen in der Datei aber mit immer unterschiedlichen Orten usw.
Tel.:08152/12882-11 Maschnr.:14 Typ:Borhmaschine Kunde:Müller GmbH Strasse:Bonner Straße 257 Plz.:23232 Ort:Köln Land:DE
Habe mir jetzt folgendes Script gebastelt:
Global $suchtext
Global $gesamttext
$gesamttext = ""
If Not IsDeclared("sInputBoxAnswer") Then Local $suchtext
$suchtext = InputBox("Kundensuche","Wonach soll gesucht werden?",""," ","-1","-1","-1","-1")
Select
Case @Error = 0 ;OK - The string returned is valid
suchen()
Case @Error = 1 ;The Cancel button was pushed
Exit
Case @Error = 3 ;The InputBox failed to open
MsgBox(0,"Kundensuche", "Fehler beim eingeben des Suchtextes aufgetreten")
Exit
EndSelect
func suchen()
$file = FileOpen(@ScriptDir & "\Maschinennummern mit Adresse und Telefon.txt", 0)
If $file = -1 Then
MsgBox(0, "Fehler beim öffnen der Datei:", @ScriptDir & "\Maschinennummern mit Adresse und Telefon.txt")
Exit
EndIf
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
if StringInStr($line,$suchtext) >= 1 Then
$gesamttext = $gesamttext & $line & chr(10)
EndIf
Wend
if $gesamttext <> "" Then
MsgBox(262144,"Gefunden",$gesamttext)
Else
MsgBox(0,"Nichts gefunden mit folgendem Text",$suchtext)
EndIf
EndFunc
Mit diesem Script kann ich z.B. alle Zeilen in der Messagebox ausgeben indem sich der Begriff befindet den ich suche.
Da wird aber alles unübersichtlich in einer Textbox untereinandergeschrieben.
Jetzt möchte ich das in eine Listbox satt in einer Messagebox ausgeben.
Habe mir folgendes Script geschrieben mit einer Gui und passender Listbox.
#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1)
$form_ergebnis = GUICreate("Kundensuche Ergebnis", 1005, 171, 5, 500, -1, BitOR($WS_EX_TOOLWINDOW,$WS_EX_TOPMOST,$WS_EX_WINDOWEDGE))
GUISetOnEvent($GUI_EVENT_CLOSE, "form_ergebnisClose")
$gefundenliste = GUICtrlCreateListView("Telefon|MaschNr.|Typ|Kunde|Strasse|Plz|Ort|Land", 8, 8, 985, 153)
$gefundenliste_0 = GUICtrlCreateListViewItem("1-Telefon|1-Maschinennummer|1-Typ|e-Kunde|1-strasse|1-plz|1-ort|1-land", $gefundenliste)
$gefundenliste_1 = GUICtrlCreateListViewItem("2-telefon|2-maschinennummer|2-Typ|e-Kunde|2-strasse|2-plz|2-ort|2-land", $gefundenliste)
GUICtrlSetOnEvent(-1, "gefundenlisteClick")
GUISetState(@SW_SHOW)
While 1
Sleep(100)
WEnd
Func form_ergebnisClose()
Exit
EndFunc
Func gefundenlisteClick()
EndFunc
[/autoit]
Wie bekomme ich jetzt die Listbox mit meinen gefundenen Zeilen aus dem ersten Script in meine Listbox.
Ich könnte ja
$gefundenliste_0 = GUICtrlCreateListViewItem($var1 & "|" & $var2 &"|" & ...usw. , $gefundenliste)
[/autoit]
programmieren. Dann für die nächste gefundene Zeile mit $gefundenliste_1 usw. weitermachen.
Das ist aber sehr Müheselig und mit Sicherheit nicht elegant. Wie ich Autoit kenne geht das mit Sicherheit besser.
Da ich auch nicht vorhersagen kann wieviele Zeilen mit dem gewünschten Text gefunden werden, weiss ich bei meiner Müheseligen Variante auch nicht wieviele $gefundenliste_... ich programmieren soll.
Bin wie immer um Hilfen sehr dankbar.
Gruß Autoirrer
Ich kenne mich recht gut mit Visual Basic aus (naja zumindest so das ich mir einiges zusammenbauen kann).
Ich muß ehrlich gestehen das ich mittlerweile AutoIt liebe. Es ist von der Syntax her sehr einfach zu verstehen. Aber ich bin auch noch Anfänger und habe deshalb oft noch einen zu starken Bezug zu Visual Basic. Da fällt mir dann das umdenken schwer.
Gruß Autoirrer
Jetzt bin ich platt.
Das funktioniert. Ihr habt echt ein geniales Forum. Nach 7 Minuten hat man hier eine Lösung die funktioniert.
Das man das SET einfach weglassen kann, hätte ich nicht gedacht. Schon fast zu einfach.
Ich danke Dir.
Schönen Sonntag noch.
Moin
Da ich Probleme habe ein Word Formular mit "Controlsend" usw auszufüllen, versuche ich jetzt die Dokumentenfelder direkt anzusprechen.
Jetzt müsst ihr mir auf die Sprünge helfen.
Was ich jetzt hinbekommen habe ist folgendes:
Über diesen Code bekomme ich meine Word Datei geöffnet:
Dim $infilename
$infilename = "C:\Dokumente und Einstellungen\test\Eigene Dateien\Blanko.doc"
$oWord = objCreate("Word.Application")
$oWord.Visible = 1
$oDok = $oWord.Documents.Open($infilename)
In Word habe ich folgendes Makro um eine Feld im Formular zu beschreiben:
Was muß ich in AutoIt schreiben damit ich direkt über AutoIt (also ich möchte nicht das Makro in Word starten) das Feld ausfüllen kann.
Wie bekomme ich also diese drei Zeilen in mein AutoIt?
Dim fftext As FormField
Set fftext = ActiveDocument.FormFields("Text200")
fftext.Result = "Testeintrag"
(Bin noch nicht so fit in AutoIt um das alleine rauszufinden, habe schon einige Varianten durch. Aber ich habe keine Ahnung wie ich das "Set" umsetzen soll.)
Gruß Autoirrer
Also eine Tabelle öffnen und beschreiben und wieder speichern kann ich in Excel 2007.
Ich bekomme das aber nicht in die Gui eingebaut.
So öffne ich eine Datei, beschreibe diese und schliesse diese auch wieder. Das alles klappt wunderbar.
Dim $infilename
$infilename = "c:\test\test.xls"
$oExcel = objCreate("Excel.Application")
$oExcel.Visible = 0
$oBooks = $oExcel.Workbooks.Open($infilename)
$oSheet = $oBooks.Worksheets(1)
$oSheet.Range("C3").Value = "neu eintragen"
msgbox(0,"Debug",$oSheet.Range("C3").Value)
$oBooks.Save
$oBooks.Saved = True
$oBooks.Close
$oExcel.Quit
Was muß ich denn jetzt bei dem "OWC" in AutoIt eintragen?
Gruß Autoirrer
"ControlSetText" funktioniert in Word nicht (zumindest bei mir nicht in Formularen).
Gut die ID des Controls mit angeben das mache ich jetzt auch. Allerdings ist der ganze Bearbeitungsbereich in Word eine ID.
Irgendwie klappt das immer noch nicht. Sporadisch wird der Text immer noch falsch eingegeben.
Muß mir glaube wohl was anderes einfallen lassen. Zumindest bei mir klappt das mit AutoIt nicht immer.
Trotzdem Danke für die Tips.
Gruß Autoirrer
Gut teste ich mal.
Allerding bin ich erst auf das Handle gekommen, da ich mit dem Titel die gleichen Probleme hatte.
Wenn man die Sleeps weglässt und der Rechner ein bischen langsamer ist dann bleibt aber der gesamte Text Teilweise weg.
Gruß Autoirrer
Hallo
Habe immer wieder folgendes Problem. Ich nutze Autoit oft um in irgendwelchen Programmen etwas einzutragen das ich zuvor über AutoIt kopiert oder in einer Gui erstellt habe.
Habe sporadisch das Problem das die Daten nicht oder nicht richtig eingetragen werden.
Habe schon mit "Send" und "SendKeepActive" sowie "controlsend" alles mögliche getestet. Es passiert trotzdem sporadisch immer wieder.
Ich habe mal zwei unterschiedliche Beispiele angehangen in denen ich in Word in einem Formular etwas eintrage (passiert aber auch bei anderen Programmen):
Opt("WinTitleMatchMode", 2)
$wordeingabeverzoegerung = 100
$mbnameanfang = "Word"
If Not WinActive($mbnameanfang,"") Then WinActivate($mbnameanfang,"")
WinWaitActive($mbnameanfang,"")
$handle_Word_Montagebericht = WinGetHandle($mbnameanfang,"")
sleep(300)
ControlSend($handle_Word_Montagebericht,"", "","Erster Text der in Word eingegeben werden soll")
sleep($wordeingabeverzoegerung)
ControlSend($handle_Word_Montagebericht, "", "","{tab}")
ControlSend($handle_Word_Montagebericht,"", "","Zweiter Text der eingegeben werden soll")
sleep($wordeingabeverzoegerung)
ControlSend($handle_Word_Montagebericht, "", "","{tab}")
Bei dem oben gezeigten Beispiel habe ich das Problem das aus irgendeinem Grund sporadisch von dem Eintrag die ersten Zeichen fehlen oder sogar das bei dem ersten groß geschriebenen Wort "erster" statt "Erster" eingetragen wird.
Mein zweiter Versuch:
Opt("WinTitleMatchMode", 2)
$wordeingabeverzoegerung = 100
$mbnameanfang = "Word"
If Not WinActive($mbnameanfang,"") Then WinActivate($mbnameanfang,"")
WinWaitActive($mbnameanfang,"")
$handle_Word_Montagebericht = WinGetHandle($mbnameanfang,"")
sleep(300)
ClipPut("Erster Text der in Word eingegeben werden soll")
ControlSend($handle_Word_Montagebericht,"", "","^v")
sleep($wordeingabeverzoegerung)
ControlSend($handle_Word_Montagebericht, "", "","{tab}")
sleep($wordeingabeverzoegerung)
ClipPut("Zweiter Text der in Word eingegeben werden soll")
ControlSend($handle_Word_Montagebericht,"", "","^v")
sleep($wordeingabeverzoegerung)
ControlSend($handle_Word_Montagebericht, "", "","{tab}")
Bei diesem Beispiel habe ich das Problem das sporadisch statt dem Text nur ein "v" eingetragen wird. Also scheinbar bekommt der PC das "String" nicht mit.
Wie macht Ihr sowas? Gibt es noch eine ganz andere Lösung?
Gruß Autoirrer