Fragen zur Syntax oder Hilfe zur Selbsthilfe

  • Hallo an alle,
    ich habe hier mal einige Frage die Syntax betreffend. Ich stelle sie hier, weil mir die Hilfe nicht immer eine war.

    Die Grundstruktur eines Befehles/ einer Funktion ist fast immer: Funktionsname( "Title", "Text", ControlID, [ weitere Parameter])
    Die Hilfe-Beispiele laufen zu 90% so ab: Funktionsname("[CLASS:Notepad]", "") gibt etwas zurück oder meist 0 im Fehlerfall.


    a) Kann man immer den Handle des Fensters statt der CLASS-Syntax verwenden? (Klare Ausnahme bei WinGetHandle)
    b) Welcher Aufruf ist korrekt? Beispiel:

    In der Hilfe steht: ControlFocus("[CLASS:Notepad]", "", "Edit1")


    $strClassName = " Edit"
    $ClassNN= 1
    $OK = ControlFocus($HWndFenster, "", $strClassName & $ClassNN) ; Funktioniert
    $OK = ControlFocus($HWndControl, "", "") ; Funktioniert nicht immer
    $OK = ControlFocus($HWndFenster, "", $HWndControl) ; Funktioniert anscheinend nicht

    Wo und wie finde ich heraus, außer durch rumprobieren, wann man welche Schreibweise bzw. Ersetzung der Parameter vornehmen kann.
    Diese 0815-Beispiele mit dem Notepad sind da eher weniger hilfreich. Also wenn mir da jemand die richtigen Antworten geben könnte, das wäre schon super.

    Noch eine Frage zum Forum selbst: Wie kann ich Programmcode posten, ohne dass die Formatierung verloren geht? (Export als Html und dann Quelltext und einfügen ? Bisher war nach dem Einfügen immer alles schön linksbündig.

    Danke vorab für Eure Hilfe
    MsDotz

  • Zitat

    a) Kann man immer den Handle des Fensters statt der CLASS-Syntax verwenden? (Klare Ausnahme bei WinGetHandle)


    Klar ;).

    Zitat

    b) Welcher Aufruf ist korrekt? Beispiel:


    Naja... Das kommt darauf an was du machen willst. Allerdings solltest du beachten, das ein Handle sich beim neustart eines Programms ändert (du müsstest es also immer wieder aufs Neue herrausfinden).

  • Noch eine Frage zum Forum selbst: Wie kann ich Programmcode posten, ohne dass die Formatierung verloren geht? (Export als Html und dann Quelltext und einfügen ? Bisher war nach dem Einfügen immer alles schön linksbündig.

    Indem du den Autoit Quellcode Button verwendest -->
    Bei umfangreicherem Quellcode empfhielt sich zusätzlich noch ein Spoiler -->

    Code
    [spoiler][autoit]; dein Quellcode[/autoit][/spoiler]


    schaut dann so aus:

    Spoiler anzeigen
    [autoit]

    ; dein Quellcode

    [/autoit]

    Sollte die Formatierung dennoch verloren gehen liegt das an deinem Browser, in diesem Falle den IE oder FF verwenden und ggf JavaScript für autoit.de erlauben.

  • Danke für die schnelle Antwort. Das mit der Lebenserwartung eines Handles ist mir schon bewußt.
    Habe schließlich seit Anfang an Windowssoftware erstellt.
    Deshalb eiere ich ja auch so rum mit Autoit. Ich dachte, der Name sei hier der Zweck (Automate It).
    Bin da etwas ernüchtert mittlerweile. Ich versuche eine fremde Anwendung zu automatisieren.
    Für "statische Fenster", die keine, während der Laufzeit erzeugten Controls beinhalten, funktioniert alles prächtig.
    Aber wehe wenn, dann geht das Probieren los.
    Ich benutze z.B. eine aufgebohrte Version von _WinGetcontrols hier aus dem Forum, die mir sehr hilfreich ist (danke an die Autoren).
    Ich habe nur das Rückgabe-Array aufgebohrt, d.h es liefert mir jetzt auch den Text und die Position (x,y,Width,Height) zurück.
    Dachte halt, wenn ich Classname, ID, NN, Handle, Position und Text habe, dann sollte ja ein SetFocus und ein ControlClick nicht mehr vom Zufall
    abhängig sein. Dachte ich. Bin noch nicht vom Gegenteil überzeugt.
    Kann ich gerne posten, sobald mir einer das mit der Formatierung erklärt hat ;) .

  • Zitat

    Dachte halt, wenn ich Classname, ID, NN, Handle, Position und Text habe, dann sollte ja ein SetFocus und ein ControlClick nicht mehr vom Zufall
    abhängig sein. Dachte ich. Bin noch nicht vom Gegenteil überzeugt.


    Das ist dann auch nicht vom Zufall abhängig. Ohne ein Stück Code oder die entsprechenden Informationen kann ich allerdings nur raten, wieso es nur manchmal funktioniert...

  • Hallo msdotz,


    a) Kann man immer den Handle des Fensters statt der CLASS-Syntax verwenden? (Klare Ausnahme bei WinGetHandle)
    b) Welcher Aufruf ist korrekt? Beispiel:

    In der Hilfe steht: ControlFocus("[CLASS:Notepad]", "", "Edit1")


    In der Hilfe steht auch:

    Code
    Parameter
    
    
    title        |    Der Titel des Fensters, auf das zugegriffen werden soll.
    ...
    ControlID    |    Die ID des Controls, das beeinflusst werden soll. ...


    "title" ist also immer das Parentfenster. Für diesen Parameter kannst Du ein Handle übergeben.

    [autoit]

    $strClassName = "Edit"
    $ClassNN= 1
    $ID_EDIT = 15

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

    $OK = ControlFocus($HWndParent, "", $strClassName & $ClassNN) ; Funktioniert
    $OK = ControlFocus ($HWndParent, "", $ID_EDIT) ; Funktioniert
    $OK = ControlFocus($HWndParent, "", $HWndControl) ; Funktioniert nicht !
    $OK = WinActivate ($HWndControl, "", "") ; Könnte schon eher funktionieren ...

    [/autoit]


    Wo und wie finde ich heraus, außer durch rumprobieren, wann man welche Schreibweise bzw. Ersetzung der Parameter vornehmen kann.
    Diese 0815-Beispiele mit dem Notepad sind da eher weniger hilfreich. Also wenn mir da jemand die richtigen Antworten geben könnte, das wäre schon super.


    Herumprobieren muss man immer, leider bringt AutoIt keinen brauchbaren Debugger mit.

    Beispiele findest Du genug im Forum, Stichwort "Installationsskripte". ;)
    Oder hier ...

    EDIT:
    Dieser Beitrag hilft Dir vllt auch weiter ...

    Gruß und viel Spaß mit AutoIt
    Greenhorn


    2 Mal editiert, zuletzt von Greenhorn (6. Juli 2011 um 18:58)

  • name22:

    ich stelle hier mal den code ein, den ich zum Control finden verwende. Die _WinGetControls - Funktion stammt hier aus dem Forum (Grossvater?).
    Ich habe nur etwas erweitert. Die Funktion PositionsDatenErmitteln ist von mir. Ich suche damit das EditControl, das den Text $strText enthält ($iModus=1).
    Im $iModus=2 suche ich das EditControl in der selben Zeile, von dem ich nur weis, wo die X-Pos liegt.

    Spoiler anzeigen

    Mit den Rückgabewerten dieser Funktion versuche ich eine neue Zeile in einer dynamisch erzeugten Eingabezeile korrekt zu befüllen. Das Ganze ist eine Positionserfassung in einem Warenwirschaftssystem. Fertig erfasste Zeile bewirkt automatisch die Erzeugung einer neuen leeren Eingabezeile.
    Mit den Rückgabewerten meiner Funktion versuche ich einen MouseClick, aber da stimmen die Koordinaten nicht ganz. Aber ein ControlFocus sollte funktionieren. Ein ControlSend klappt auch nicht immer, obwohl ich lange Sleeps eingebaut habe.

    Grüsse
    MsDotz

    2 Mal editiert, zuletzt von msdotz (6. Juli 2011 um 23:23)