History
3.3.14.5 (16th March, 2018) (Release)
Hab neu installiert.Fehler noch der selbe.
Gruß Windi
History
3.3.14.5 (16th March, 2018) (Release)
Hab neu installiert.Fehler noch der selbe.
Gruß Windi
Danke (auto)Bert,
aber der Fehler kommt immer noch:
Habe es so eingefügt ich weiß natürlich nicht ob es so richtig ist.
Bin absoluter Anfänger.
#include <WinAPISys.au3>
;Function _WinAPI_EnumChildWindows
Global $classMain = '[CLASS:OMain]'
Global $classSub = '[CLASS:OFormSub; INSTANCE:11]'
; aktiviere Main Window
WinActivate($classMain)
; warte bis aktiv und speichere Handle
Global $hMain = WinWaitActive($classMain)
If Not IsHWnd($hMain) Then Exit MsgBox(0, 'FEHLER', 'Main Window nicht ermittelbar')
; Abfrage Handle SubForm (enthält Button)
Global $hSub = WinGetHandle($classSub)
If Not IsHWnd($hSub) Then Exit MsgBox(0, 'FEHLER', 'Sub Window nicht ermittelbar')
; versuchen auf die in der SubForm enthaltenen Elemente zuzugreifen - das sind Child-Windows der SubForm
; Auflisten der enthaltenen Child-Windows
Global $aEnum = Function_WinAPI_EnumChildWindows($hSub, False) ; "False"=auch nicht sichtbare Childs auflisten
If @error Then
Exit MsgBox(0, 'FEHLER', 'Childs der SubForm lassen sich nicht ermitteln')
Else
ConsoleWrite(StringFormat('! hControl \thParent \t ID \tClassname \tControlText') & @CRLF)
For $i = 1 To $aEnum[0][0]
ConsoleWrite(StringFormat('> %s\t%s\t%7s\t%-15s\t%s', $aEnum[$i][0], Function_WinAPI_GetParent($aEnum[$i][0]), Function_WinAPI_GetDlgCtrlID($aEnum[$i][0]), $aEnum[$i][1], ControlGetText($hSub, '', Function_WinAPI_GetDlgCtrlID($aEnum[$i][0]))) & @CRLF)
Next
EndIf
Alles anzeigen
mfg Windi
Folgende Fehlermeldung wird angezeigt:
>"C:\Program Files (x86)\AutoIt3\SciTE\..\au3check.exe" -q "C:\Users\xx2\Desktop\test klick 1.au3"
"C:\Users\xx2\Desktop\test klick 1.au3"(13,54) : error: _WinAPI_EnumChildWindows(): undefined function.
Global $aEnum = _WinAPI_EnumChildWindows($hSub, False)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"C:\Users\xx2\Desktop\test klick 1.au3"(19,109) : error: _WinAPI_GetParent(): undefined function.
ConsoleWrite(StringFormat('> %s\t%s\t%7s\t%-15s\t%s', $aEnum[$i][0], _WinAPI_GetParent($aEnum[$i][0])
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"C:\Users\xx2\Desktop\test klick 1.au3"(19,146) : error: _WinAPI_GetDlgCtrlID(): undefined function.
ConsoleWrite(StringFormat('> %s\t%s\t%7s\t%-15s\t%s', $aEnum[$i][0], _WinAPI_GetParent($aEnum[$i][0]), _WinAPI_GetDlgCtrlID($aEnum[$i][0])
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Users\xx2\Desktop\test klick 1.au3 - 3 error(s), 0 warning(s)
>Exit code: 2 Time: 0.07282
Es wird kein Button angezeigt.
Er liegt auf dem Auswahlrahmen mit allen Button.
Hab mir mal die Hilfe angeschaut von _WinAPI_EnumChildWindows
Komme damit überhaupt nicht klar.
Hallo BugFix,
Danke für deine Rückmeldung.
Es ist eine MSAcces Software.
Die Maske wurde wahrscheinlich mit VBA ode VB erstellt.
Auf den Button Rechnungen soll geklickt werden.
>>>> Window <<<<
Title: Winitas
Class: OMain
Position: -8, -8
Size: 1936, 1056
Style: 0x17CF0000
ExStyle: 0x00000100
Handle: 0x0000000000030AD8
>>>> Control <<<<
Class: OFormSub
Instance: 11
ClassnameNN: OFormSub11
Name:
Advanced (Class): [CLASS:OFormSub; INSTANCE:11]
ID:
Text:
Position: 3, 156
Size: 196, 879
ControlClick Coords: 40, 313
Style: 0x56000000
ExStyle: 0x00000000
Handle: 0x0000000000050CE0
>>>> Mouse <<<<
Position: 51, 476
Cursor ID: 0
Color: 0xFFFFFF
>>>> StatusBar <<<<
>>>> ToolsBar <<<<
>>>> Visible Text <<<<
MsoDockTop
Ribbon
Ribbon
Kunden
Start
Navigationsbereichshost
ODocTabs
>>>> Hidden Text <<<<
MsoDockLeft
MsoDockRight
MsoDockBottom
Alles anzeigen
Hallo,
komme mal wieder nicht weiter mit ControlClick.
Finde nicht die richtigen Einstellungen, da die Bottuns nicht angezeigt werden.
Bin Anfänger bitte um Hilfe.
WinActivate("Winitas", "")
WinWaitActive("Winitas","")
Global $hWnd = WinGetHandle("Winitas")
ControlClick($hWnd, "", "[Class:OFormSub; Instance:11]", "Left", 1 , 104, 555)
Sleep (2000)
>>>> Window <<<<
Title: Winitas
Class: OMain
Position: -8, -8
Size: 1936, 1056
Style: 0x17CF0000
ExStyle: 0x00000100
Handle: 0x00000000000A0EFE
>>>> Control <<<<
Class: OFormSub
Instance: 11
ClassnameNN: OFormSub11
Name:
Advanced (Class): [CLASS:OFormSub; INSTANCE:11]
ID:
Text:
Position: 3, 156
Size: 196, 879
ControlClick Coords: 93, 393
Style: 0x56000000
ExStyle: 0x00000000
Handle: 0x0000000000051026
>>>> Mouse <<<<
Position: 104, 556
Cursor ID: 0
Color: 0xD80027
>>>> StatusBar <<<<
>>>> ToolsBar <<<<
>>>> Visible Text <<<<
MsoDockTop
Ribbon
Ribbon
Kunden
Start
Auftrag
Vertikal
Navigationsbereichshost
ODocTabs
>>>> Hidden Text <<<<
MsoDockLeft
MsoDockRight
MsoDockBottom
Horizontal
Vertikal
SPTR17
Horizontal
Vertikal
Überweisung
Horizontal
SPTR17
Hallo Musashi,
ganz lieben Dank, es war genau was ich gesucht habe.
Gruß Windi
Hallo ihr Spezilalisten,
ich hätte da mal eine Frage zum Druckerordner.
Wie kann ich auf einen bestimmten Drucker zugreifen und die Druckeinstellungen bearbeiten.
Es handelt sich um einen Etikettendrucker mit verschiedenen Etikettengrößen.
Der Drucker lässt sich nicht wie in früheren Versionen mehrmals einrichten.
Aus diesem Grunde möchte ich eine GUI erstellen.
Ich wäre dankbar wenn ihr mir helfen könntet.
Erklärungen bitte leicht verständlich da ich noch Anfänger bin.
Hier mein Script:
Habe versucht mit Send zu steuern, dieses funktioniert nicht mehr wenn ein Drucker gelöscht oder neu installiert wird.
Run("rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder")
; Drucker Seite öffnen
Global $hWnd = WinGetHandle("Drucker")
WinActivate("Drucker")
WinWaitActive ( "[CLASS:ModernSearchBox; INSTANCE:1]" , "" ,1) ; warte 1 Sekunde
Send(" + {TAB 3} ")
Sleep (500)
Send ("Color Label 900 " )
Sleep (1000)
Send("{Enter}")
Sleep(500)
Send ("!+{D}")
Send("+{DOWN 2}")
Send("{Enter}")
MfG
Windi
Hallo,
ich wollte mich nochmal ganz herzlich bei euch allen bedanken.
Ohne eure Hilfe wäre das nichts geworden.
Es sind noch ein paar kleine Änderungen notwendig aber das kriege ich auch noch hin.
Liebe Grüße
Windi
Hallo BugFix,
Danke für das Beispiel.
ich komme schon wieder nicht weiter.
Wenn ich das 1. Controlclick ausführe mit Mause Koordinaten wird ein neues Fenster geöffnet.
Ab Hier komme ich nicht weiter.
Hier das script:
; Handle abfragen mit Titel
;Global $hWnd = WinGetHandle("Winitas")
Global $hWnd = WinGetHandle("[CLASS:OMain]")
; Controlclick
;Klick Ausgabe
ControlClick($hWnd, "", "[CLASS:NetUIHWND; INSTANCE: 1]" , "Left" , 1 ,700 , 92 )
Sleep(100)
Global $hWnd = WinGetHandle("[OFormNoClose]")
;Klick Ladeliste
ControlClick($hWnd, "", "[CLASS:OFormSub: INSTANCE: 2]" , "Left" , 1 ,762 , 179)
Sleep(100)
Im Bild ist die 1. Position (Ladeliste nach Auftrag)
Die Daten Wininfo:
>>>> Window <<<<
Title: Winitas
Class: OMain
Position: -8, -8
Size: 1936, 1056
Style: 0x17CF0000
ExStyle: 0x00000100
Handle: 0x0000000000050994
>>>> Control <<<<
Class: OFormSub
Instance: 2
ClassnameNN: OFormSub2
Name:
Advanced (Class): [CLASS:OFormSub; INSTANCE:2]
ID:
Text:
Position: 266, 364
Size: 1391, 592
ControlClick Coords: 767, 181
Style: 0x56000000
ExStyle: 0x00000000
Handle: 0x0000000000070DF6
>>>> Mouse <<<<
Position: 1041, 552
Cursor ID: 0
Color: 0xFFFFFF
>>>> StatusBar <<<<
>>>> ToolsBar <<<<
>>>> Visible Text <<<<
MsoDockLeft
MsoDockRight
MsoDockTop
Ribbon
Ribbon
MsoDockBottom
Ausgabe
Auftrag
Start
Einstellungen
Kunden
Navigationsbereichshost
ODocTabs
>>>> Hidden Text <<<<
Horizontal
Vertikal
DM15-2
Horizontal
Vertikal
Horizontal
Vertikal
DM15-2
Horizontal
Vertikal
8,2
C:\Winitas\Serienbrief\SERIENBRIEF.doc
Horizontal
Vertikal
Sonderartikel
Horizontal
Vertikal
19,00%
Horizontal
Vertikal
1
Horizontal
Vertikal
Überweisung
Horizontal
Vertikal
DHL
Horizontal
Vertikal
0,2
Horizontal
Vertikal
Riesling
Horizontal
Vertikal
lieblich
Horizontal
Vertikal
Tafelwein
Vielen Dank für eure zahlreichen Hilfestellungen.
Ich werde entweder mit der Fehlermeldung leben und in der Gui vermerken.
Die Programme laufen ja.
Das alles umschreiben, auf Autoit, ist mir zu stressig da ich von Autoit sehr wenig Ahnung habe.
Eine Option habe ich noch die ich testen will.
Es gibt einen xlsm to exe Converter.
Vielleicht geht es dann über den Run Befehl ohne Fehlermeldung.
Eine Frage hab ich noch:
In #2 Schreibt Oskar.
Im übrigen ist eine Automatisierung mit MouseClick höchst fehleranfällig. Besser wäre ControlClick.
Habe es mit ControlClick probiert bekomme es mit dem Wininfo nicht hin.
Hier die Daten von Winifo:
>>>> Window <<<<
Title: Winitas
Class: OMain
Position: -8, -8
Size: 1936, 1056
Style: 0x17CF0000
ExStyle: 0x00000100
Handle: 0x00000000000C03B4
>>>> Control <<<<
Class: NetUIHWND
Instance: 1
ClassnameNN: NetUIHWND1
Name:
Advanced (Class): [CLASS:NetUIHWND; INSTANCE:1]
ID:
Text:
Position: 0, 0
Size: 1920, 153
ControlClick Coords: 699, 85
Style: 0x57030000
ExStyle: 0x00000000
Handle: 0x00000000001311F6
>>>> Mouse <<<<
Position: 699, 84
Cursor ID: 0
Color: 0xFFFFFF
>>>> StatusBar <<<<
>>>> ToolsBar <<<<
>>>> Visible Text <<<<
MsoDockTop
Ribbon
Ribbon
Auftrag
Vertikal
Start
Kunden
Navigationsbereichshost
ODocTabs
>>>> Hidden Text <<<<
MsoDockLeft
MsoDockRight
MsoDockBottom
Horizontal
Vertikal
DT15
Horizontal
Vertikal
Horizontal
DT15
Danke für deine Rückmeldung!
Die xlsm ist sehr umfangreich.
Sehr viele Userforms, SpinButtons, Funktionen, Module, Barcodeerzeugung und Druckersteuerung.
Wie muß ich denn vorgehen um alles über Autoit zu machen.
Das ist das 1. mal wo ich was mit Autoit mache.
Gruß Windi
Mit AI wird das Makro aufgerufen.
Bearbeitet wird nur mit Userforms und Makros
nicht mit Excel (läuft nur im Hintergrund.)
Wenn das Makro abgearbeitet ist muss ich es ja mit einem Button beenden.
Gebe ich per VBA den Befehl zum beenden, kommt die Fehlermeldung.
Was (BugFix #23) geschrieben hat kann nicht funktionieren.
Irgendwie muss ja AI erfahren wann das Makro beendet ist.
Die Makrodatei wird 2 mal durchlaufen und beim
2. mal beendet.
Ich habe einen Beenden Button in der Datei, der die Einträge in den Datenblätter löscht.
Die Schleife wird 2 mal durchlaufen,
dann wird Excel ohne Fehler beendet.
Jetzt läuft es fehlerfrei, Excel wird nicht beendet und ist in einer Endlosschleife.
Den gleichen Fehler und Excel bleibt offen
>"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\DHL-Versand\Test.au3"
"C:\DHL-Versand\Test.au3" (24) : ==> The requested action with this object has failed.:
$oWorkbook.Run("Versand")
$oWorkbook^ ERROR
>Exit code: 1 Time: 12.07
Habe das Makro so verändert das Excel nicht mehr durch das Makro gespeichert wird.
Folgende Fehler Meldung
>"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\DHL-Versand\Test.au3"
"C:\DHL-Versand\Test.au3" (24) : ==> The requested action with this object has failed.:
$oWorkbook.Parent.Run("Versand")
$oWorkbook.Parent^ ERROR
>Exit code: 1 Time: 10.54
kommt jetzt Makro und Excel werden nicht mehr beendet
Hier das Sript wie gewünscht.
#include <Excel.au3>
#include <MsgBoxConstants.au3>
; ===> COM Errorhandler : Kommentarzeichen bei Bedarf entfernen
;~ Local $oErrorHandler = ObjEvent("AutoIt.Error", "_COMErrFunc")
; Erstellt ein Excel Anwendungs-Objekt oder verbindet zu einer bereits Instanz
Local $oExcel = _Excel_Open()
If @error Then
MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_Open ", _
"Fehler beim Erstellen des Excel Anwendungs-Objekt." & @CRLF & _
"@error = " & @error & ", @extended = " & @extended)
Else
MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_Open ", _
"Excel Anwendung wurde erfolgreich geöffnet." & @CRLF)
; öffnet ein existierendes workbook und gibt den Objectidentifier zurück :
Local $sWorkbook = "C:\DHL-Versand\Versand.xlsm"
Local $oWorkbook = _Excel_BookOpen($oExcel, $sWorkbook)
If @error Then
MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_BookOpen ", _
"Fehler beim Öffnen des Workbooks : " & @CRLF & _
"Dateiname : " & $sWorkbook & @CRLF & _
"@error = " & @error & ", @extended = " & @extended)
_Excel_Close($oExcel)
Exit
Else
$oWorkbook.parent.run("Versand") ; Name des Makros
EndIf
Sleep(2000)
; Schließt das Excel Anwendungs-Objekt
_Excel_Close($oExcel)
If @error Then
MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_Close ", _
"Fehler beim Schließen des Excel Anwendungs-Objekt." & @CRLF & _
"@error = " & @error & ", @extended = " & @extended)
Else
MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_Open ", _
"Excel Anwendung wurde erfolgreich geschlossen." & @CRLF)
EndIf
EndIf
; ===> COM Errorhandler : Kommentarzeichen bei Bedarf entfernen
Func _COMErrFunc($oError)
MsgBox(16, "COM Error", "COM-Error ! " & @CRLF & _
"Number is : " & "0x" & Hex($oError.number) & @CRLF & _
"Retcode is : " & "0x" & Hex($oError.retcode) & @CRLF & _
"Scriptline is : " & $oError.scriptline & @CRLF & _
"Windescription is: " & $oError.windescription & @CRLF & _
"Description is: " & $oError.description)
Return SetError(1)
EndFunc ;==>_COMErrFunc