ControlClick Problem

  • 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.

    AutoIt
    WinActivate("Winitas", "")
    WinWaitActive("Winitas","")
    Global $hWnd = WinGetHandle("Winitas")
    ControlClick($hWnd, "", "[Class:OFormSub; Instance:11]", "Left", 1 , 104, 555)
    Sleep (2000)
    Ausgabe des AutoIt Window Info Tools

    >>>> 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

    Einmal editiert, zuletzt von Musashi (26. Januar 2020 um 15:02) aus folgendem Grund: EDIT : Musashi : Quellcode und Info in Code- bzw. Spoiler gepackt

  • Hallo Windi !

    Könntest Du zukünfig den Quellcode bitte mittels Code-Tags einfügen -> siehe Headerzeile --> </>

    Analog das Symbol für Spoiler (direkt neben Code) bei längeren Textausgaben, wie z.B. beim WindowInfoTool, verwenden. Damit wird der Thread leichter zu lesen ;).

    (ich habe Deinen Beitrag hier mal editiert)

    Danke und Gruß, Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    • Offizieller Beitrag

    Überprüfe immer Schritt für Schritt ob und was an Werten zurückgegeben wird und vergleiche mit dem, was du erwartest.

    AutoIt
    WinActivate("Winitas", "")
    Global $hWnd = WinWaitActive("Winitas","")
    ; sofort testen, ob ein Handle zurückgegeben wird und vergleichen ob es dasselbe wie vom InfoTool ist
    If IsHWnd($hWnd) Then
        MsgBox(0, 'Handle', $hWnd)
        ; ControlClick($hWnd, "", "[Class:OFormSub; Instance:11]", "Left", 1 , 104, 555) ; die Klickkoordinaten sind hier nicht sinnvoll
        ControlClick($hWnd, "", "[Class:OFormSub; Instance:11]")
    Else
        MsgBox(0, 'Handle', 'Handle wurde nicht erkannt')
    EndIf


    Edit:

    Habe gerade erst gelesen: "..da die Buttons nicht angezeigt werden..." - Ja, von was sind denn dann die Angaben des Info-Tools?

    Wenn du mit dem Zielkreuz über dem Button bist und dieser nicht eingefangen wird, kannst du ihn nicht mit ControlClick ansprechen.

  • 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.


    Code
    Folgendes kam aus deinem Script:[attach=87582][/attach]
    • Offizieller Beitrag

    Auf den Button Rechnungen soll geklickt werden.

    Das ist schon klar. Die Frage lautet: "Wenn du mit dem Infotool über dem Button bist, wird dieser dann alleine ausgewählt? Oder liegt der Auswahlrahmen auf dem Hintergrundelement mit allen Button?"

    Falls Letzteres zutrifft, kannst du mit _WinAPI_EnumChildWindows versuchen die Elemente zu selektieren.

    • Offizieller Beitrag

    Ob man Zugriff auf die Button bekommt ist fraglich, so kannst du die Childs ermitteln (wenn möglich):

  • 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

  • Hallo Windi,

    füge die dazu benötigte(n) UDF(s) ein. Diese erfährst du aus der Hilfe (F1 bei Cursor über der Funktion), z.B.:

    Zitat

    Function _WinAPI_EnumChildWindows

    #include <WinAPISysWin.au3>

    sollte die WinAPISysWin.au3 nicht ausreichen musst du dies für alle dann noch angemeckerten undefined function(s) wiederholen,

    mfg (auto)Bert

  • 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.

    mfg Windi

  • #include <WinAPISys.au3>

    Binde mal :

    #include <WinAPISysWin.au3>

    #include <WinAPIDlg.au3>

    ein !

    Welche Version von AutoIt verwendest Du ?

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Zu :

    error: _WinAPI_EnumChildWindows(): undefined function. 

    error: _WinAPI_GetParent(): undefined function. 

    error: _WinAPI_GetDlgCtrlID(): undefined function.

    3.3.14.5 (16th March, 2018) (Release). Hab neu installiert. Fehler noch der selbe.

    Was passiert, wenn Du die Beispielskripte aus der Hilfe zu _WinAPI_EnumChildWindows und _WinAPI_GetDlgCtrlID ausführst ?

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    • Offizieller Beitrag

    Es gab (leider) mit der letzten Version von AutoIt eine Änderung in den WinAPI-UDF. Funktionen wurden in andere UDF-Gruppen verschoben, neue UDF-Gruppen kamen hinzu. Deshalb lasse ich die Includes immer weg, kann dann jeder nach seiner Version passend hinzufügen (ich bleibe vorerst bei 3.3.14.2).

    Gehe also zu allen _WinAPI-Funktionen aus meinem Skript in die Hilfe und übernimm das zugehörige Include - dann bekommst du auch keine Fehler mehr.

  • Gehe also zu allen _WinAPI-Funktionen aus meinem Skript in die Hilfe und übernimm das zugehörige Include

    Das müsste dann wie folgt aussehen :

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • ich habe alle Instance durchprobiert.

    Es kommt überall der gleiche Fehler :

    Sub Window nicht ermittelbar

    ich weiß auch nicht, ob das gemeint war den ich bin absoluter Anfänger.

    Gruß Windi