Hauptfenster - Kindfenster - Maus setzen - Text einfügen

  • Hallo Freunde der automatisierten Schritte,

    über eine eigentlich kleine Hürde komme ich einfach nicht drüber:

    angelehnt an eine andere Programmiersprache

    STW\tfrm_main\pc-notizz ; Hauptfenster aktivieren = WinActivate (ggf. verbunden mit WinWaitActivate)
    GCW\\5\ttreeview\* ; Kindfenster (laut FensterKlasse) vom Hauptfenster aktivieren - ???
    TVS\test&& ; im Kindfenster ist ein TreeView - Treeview selektieren - Zeile Beschriftung "test" - ???


    STW\tfrm_main\pc-notizz ; Hauptfenster - klar
    GCW\\6\tedit\* ; Kindfenster - (laut Fensterklasse tedit) - ???
    RST\$$clp|0,-1 ; Text im Kindfenster ersetzen durch Inhalt der Variablen - ???

    Ich komme vereinfacht gesagt nicht weiter, bei der Kindfensterlokalisierung und dem Handling von Kindfenstern hinsichtlich Text ersetzen, Treeview auswählen.

    Au3Record zeichnet nur die Mausklicks und Tasten auf - leider. Gibt es eine Alternative, die auch die Fensteraktivierungen inkl. Kindfenster mit aufzeichnet?
    Autoit Window Info - liefert zwar die Klassenbeschriftung wie:

    [CLASS:TEdit; INSTANCE:2]


    WinActivate("PC-Notizz","")
    WinActivate([CLASS:TEdit; INSTANCE:2])
    MouseMove (,1)

    komme ich nicht an die Stelle, wo ich hin will. (Auf Grund der Kürze der Zeilen habe ich die direkt eingefügt - hoffe, ist o.k.)

    Viele Grüße
    AutoMit

  • Hi,

    Autoit Window Info - liefert zwar die Klassenbeschriftung wie:

    [CLASS:TEdit; INSTANCE:2]

    ist schon der richtige Ansatz.
    In der (auch deutschen) Hilfe ist ausführlichst und an ausführbaren Beispielen erklärt, wie man die mit AutoIt-Window-Info gewonnenen Informationen in eigene Scripte bringt.

    Die einzelnen (Child-) Fenster bekommst du mit AutoIt schon aktiviert?
    Bei der Treeview kann es je nach Programm kniffelig werden, da wäre ein Screenshot und ggf. dein bisheriges Script hilfreich.

    Poste doch mal Screens der zu aktivierenden Fenster und die dazugehörenden Ausgaben von AutoIt-Window-Info.

  • Die einzelnen (Child-) Fenster bekommst du mit AutoIt schon aktiviert?

    Genau da liegt das erste Problem - klar Antwort - "Nein" ;-):

    gebe ich in die deutsche Autoit Hilfe unter Suche "child window" ein, erscheint nur was zu GUI erstellen. Und für "Kindfenster" als Suchbegriff erscheint nichts.
    Ich möchte externe Programme mit AutoIt steuern.

    Wie lautet der Befehl fürs Kindfenster, nachdem ich das Hauptfenster lokalisiert habe?

    Ich würde mich da gerne einlesen und falls ich nicht weiterkomme, dann die Screenshots posten.

  • Ich möchte externe Programme mit AutoIt steuern.

    Welche Programme? Ggf. gibt es dafür schon sog. UDF (UserDefinedFunctions), oder aber gänzlich andere Lösungen (silent Install bspw.)

    Generell gibt es mehrere Möglichkeiten "fernzusteuern". Ich persönlich nutze oft das "Send()" von Tasten(kombinationen), da dadurch idR. sämtliche Funktionen erreicht werden können.
    Schreib dir einfach den "Weg" auf, d.h. welche Buttons, Tastenanschläge, Mausklicks usw du benutzt.
    Zeig einfach mal deine bisherigen Script-Versuche, vom Start des Programms angefangen.

  • Auf geht's

    Hier ist der Screenshot mit den Fensterklassen, die ich ansteuern möchte, sprich, ich möchte

    bei (1) per Send-Befehl einen Text einfügen

    bei (2) einen bestimmten Unterzweig im Treeview aufrufen

    bei (3) ... wie bei (1) möchte ich per Send-Befehl einen Text einfügen

    bei (4) möchte ich einen bestimmten Text aus der Liste auswählen

    [Blockierte Grafik: http://picload.org/thumbnail/ilraowl/sshot-2015-06-08-21-29-28-pcn-.jpg]

    Was mir fehlt, ist die Ansteuerung der Positionen (1) bis (4) über Fenstertitel und Fensterklasse ausgehend vom Hauptfenster.
    Und die Mauspositionierung genau auf jene Stellen bei (1) bis (4).

    Status:

    WinActivate("[CLASS:Tfrm_Main; TITLE:PC-Notizz]")

    ... Kindfenster lokalisieren (siehe (1) bis (4) fehlt) ...

    Send("$text")

    Die Eingabefelder wie Kategorie, Stichworte etc. lassen sich nicht direkt per Hotkey ansteuern. Wobei das auch nicht mein Ziel ist. Ich möchte grundlegend lernen, wie ich die Kindfenster (hier (1) bis (4)) ansteuern und mit Informationen füllen bzw. die Maus (unabhängig von Fensterkoordinaten sondern auf Grund der Position und Größe der jeweiligen Kindfenster-Elemente) positionieren kann.

    Wie das bei einer anderen Programmiersprache geht, habe ich oben geschrieben, Hauptfenster, Kindfenster, Treeview bzw. Text senden. Nur wie geht das bei Autoit?

    Einmal editiert, zuletzt von AutoMit (8. Juni 2015 um 23:23)

  • Servus, die beiden Input Controls kannst du mit ControlSend() oder auch ControlSetText() befüllen. Da du sowohl die Klasse als auch die Instanz der Controls hast, kannst du diese damit eindeutig bestimmen, diese musst du lediglich nur in den entsprechenden Parametern einfügen:

    ControlSend(*Handle des Fensters*, '', '[CLASS:TEdit; INSTANCE:3] (oder) [CLASS:TEdit; INSTANCE:1]', 'Text der gesendet werden soll')

    Zu dem TreeView: Sobald du das Handle des TreeView hast, kannst du dieses komplett mit der GUITreeView UDF ansteuern, so als ob's dein eigenes wäre. ^^
    z.B. kannst du mit _GUICtrlTreeView_SetFocused() den Fokus auf ein bestimmtes Item legen. Um das Handle zu bestimmen kannst du mit ControlGetHandle() arbeiten. Über die Klasse und Instance (oder auch einfach der ID) hast du die Möglichkeit das sich wechselnde Handle immer wieder neu zu bestimmen.

    Zu deinem List Control, schau mal ob du mit _GUICtrlListBox_SelectString() weiterkommst, gleiches Prinzip wie beim TreeView. :)


    €dit:
    Hier mal ein einfaches Beispiel mit Notepad, du kannst die UDF Funktionen so für jedes Control nutzen, das sollte die Ansteuerung erheblich erleichtern:

    [autoit]

    #include <GuiEdit.au3>

    [/autoit][autoit][/autoit][autoit]

    $hWnd = WinWait('[CLASS:Notepad]') ; Handle des Fensters
    $hEdit = ControlGetHandle($hWnd, '', '[CLASS:Edit; INSTANCE:1]') ; Handle des Controls

    [/autoit][autoit][/autoit][autoit]

    _GUICtrlEdit_AppendText($hEdit, @CRLF & 'Make-Grafik') ; Funktion benutzen

    [/autoit]

    Einmal editiert, zuletzt von Yjuq (8. Juni 2015 um 23:39)

  • Mir war gerade noch langweilig, also habe ich mir die Demo des Programmes heruntergeladen. Hier mal ein Beispielcode angepasst auf das Programm. Konnte es aber nur mit der Version 7.1 testen, musst du ggf. etwas anpassen. ^^

    [autoit]

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
    ; * Getestet mit: PC-Notizz! 7.1

    [/autoit][autoit][/autoit][autoit]

    #include <GuiListBox.au3>
    #include <GuiTreeView.au3>

    [/autoit][autoit][/autoit][autoit]

    ; Wartet auf Programmstart um Handles auszulesen:
    Global $hWnd = WinWait('[CLASS:Tfrm_Main]')
    Global $hKategorie = ControlGetHandle($hWnd, '', '[CLASS:TEdit; INSTANCE:2]')
    Global $hStichwoerter = ControlGetHandle($hWnd, '', '[CLASS:TEdit; INSTANCE:1]')
    Global $hTreeView = ControlGetHandle($hWnd, '', '[CLASS:TTreeView; INSTANCE:1]')
    Global $hTreeViewItem = _GUICtrlTreeView_FindItem($hTreeView, 'Beispiel-Kategorie')
    Global $hListBox = ControlGetHandle($hWnd, '', '[CLASS:TStringGrid; INSTANCE:1]')
    Global $iListBoxItem = _GUICtrlListBox_FindString($hListBox, 'Beispiel-Stichwort')

    [/autoit][autoit][/autoit][autoit]

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    [/autoit][autoit][/autoit][autoit]

    ControlSetText($hWnd, '', $hKategorie, 'Beispiel-Kategorie')
    ControlSetText($hWnd, '', $hStichwoerter, 'Beispiel-Stichwort')

    [/autoit][autoit][/autoit][autoit]

    _GUICtrlTreeView_SelectItem($hTreeView, $hTreeViewItem)
    ConsoleWrite(_GUICtrlTreeView_GetText($hTreeView, $hTreeViewItem) & @CRLF)

    [/autoit][autoit][/autoit][autoit]

    _GUICtrlListBox_ClickItem($hListBox, $iListBoxItem, 'right')

    [/autoit][autoit][/autoit][autoit]

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

    [/autoit]
  • Danke für die Tipps :)

    Mir war gar nicht langweilig. Habe mich erfolgreich die letzten 2 Stunden langsam durch die Themen Handle *schwitz* (ActivateWindow liefert Handle nicht so zurück, wie in der Hilfe beschrieben) ... Problem gelöst, weiter durch Kategorien und Stichworte gekämpft ... und hänge gerade am TreeView, da sehe ich Deine super Zeilen !!

    Habe viel über Controls gelernt - ein mächtiges Werkzeug. Besonderen Dank Make-Grafik für den Wink in die richtige Richtung (Controls). :)

    Nun werde ich noch die Nuss mit dem TreeView knacken :)

    Es ist enorm, wie mächtig Autoit ist, wenn man nur die richtigen Befehle findet :)

    3 Mal editiert, zuletzt von AutoMit (9. Juni 2015 um 02:07)