Variable in WinMove auflösen - viele Varianten - alles Fehler

  • Hallo Freunde der automatisierten Schritte,

    ich möchte bei einem Befehl den Inhalt durch eine Variable ersetzen. Nur wie? Alle Varianten - siehe unten - brachten eine Fehlermeldung. Mit den Zahlenwerten im Befehl funktioniert der Befehl.

    das geht:

    $win = beliebiges Fenster
    WinWaitActive($win, "", 5)
    WinMove ($win, "", 2609, 11, 514, 473)

    das geht nicht

    $xy = "2609, 11, 514, 473" ; geht nicht - Fehler - keine Ahnung, warum nicht
    $xy = 2609, 11, 514, 473 ; geht nicht - Fehler Komma
    $xy = '"' 2609, 11, 514, 473 '"' ; geht nicht - Fehler Anführungszeichen
    $xy = ''2609, 11, 514, 473'' ; geht nicht - Fehler Anführungszeichen
    $xy = 2609 &", "& 11 &", "& 514 &", "& 473 ; geht nicht - Fehler Anführungszeichen

    $win = beliebiges Fenster
    WinWaitActive($win, "", 5)
    WinMove ($win, "", $xy) ;

    Wie kann ich bei "WinMove" die Zahlenwerte in eine Variable auslagern?

    Viele Grüße
    AutoMit

  • Schau dich einfach mal in der Hilfe um..

    Aber um sofort weiter zu kommen, kannst du mal versuchen, jeden Zahlenwert als Variable einzufügen

    $a = 2609
    $b = 11
    $c = 514
    $d = 473"

    WinMove ($win, "", $a, $b, $c, $d)

    Grüße autoiter

  • Ich schaue mich gerne in der Hilfe um, unter welchem Stichwort kann ich suchen (bisher nichts gefunden, danach Thread eröffnet)?

    $a = 2609
    $b = 11
    $c = 514
    $d = 473

    Das ist leider kein Workaround, da ich Daten in eine Variable auslagern will, um 3 Zeilen zu sparen. Das wären dann 3 Zeilen wieder mehr :)

  • Okay. Das war meinerseits etwas hochtrabend.

    Schau, der Befehl lautet WinMove ( "title", "text", x, y [, width [, height [, speed]]] )

    Wenn du nun WinMove ( "title", "text", $xy) schreibst, dann hast du nur einen Parameter gefüllt, auch wenn der String Kommas beeinhaltet.

    Grüße autoiter

  • Vielen Dank für die Erklärung - Schlüsselwort wäre als Array.

    Das ist für einen Anfänger ein sehr komplexes Thema.

    Könnt Ihr mir 1 Beispiel für ein Array, belegt mit 4 Zahlen und ausgegeben mit ConsoleWrite ()?

    In der deutschen chm Hilfe gibt es unter dem Suchbegriff "Array" nichts. Brauche ich dafür die englische Hilfedatei?

    PS: Mag jemand erklären, warum Autoit eine Variable, die durch Komma getrennten Werte enthält, nicht in einzelne für den Befehl notwendige Parameter zerlegt? Ich verstehe, warum es nicht geht, weil Autoit eine Variable als einen Parameter interpretiert - nur warum?. Wenn ein Komma das Trennzeichen ist, sollte da nicht der Inhalt der Variablen in Parameter zerlegt werden (können), da die durch das Komma getrennt sind? Aber das nur am Rande.

    2 Mal editiert, zuletzt von AutoMit (13. Juni 2015 um 18:23)

    • Offizieller Beitrag

    Es ist in AutoIt nicht vorgesehen, dass man mehrere Parameter derart zusammenfassen kann. Über das "warum" musst Du Dich mit den Entwicklern unterhalten.

    So geht es mit einem Array:

  • Zitat

    Du kannst nicht einfach 4 Parameter in eine Variable zusammenfassen.
    Das funktioniert nicht!


    Dann wollen wir doch mal diese Grenze einfach sprengen ^^

    [autoit]

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

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

    $param = '$win, "", 2609, 11, 514, 473'

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

    $win = '' ; beliebiges Fenster
    WinWaitActive($win, '', 5)
    _ParamVar(WinMove, $param)

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

    ; Such dir besser eine passendere Funktionsbeschreibung,
    ; ich bin da gerade zu faul für ^^
    Func _ParamVar($hFunc, $sParam)
    Return Execute(StringFormat('%s(%s)', FuncName($hFunc), $sParam))
    EndFunc

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

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

    [/autoit]

    Je nachdem wie viel Zeit man in dieses sinnlose Unterfangen stecken möchte, kann man die Funktion extrem flexibler machen.
    Naja, wer's braucht ^^

  • Danke Euch - versuche daraus die einfachste Variante zu nutzen.

    ...

    Es scheint so, es ist besser, "WinMove ($win, "", 2609, 11, 514, 473)" zu schreiben, und das dann jeweils in den Tiefen des Codes zu modifizieren, als am Anfang das einfach über eine Variable festzulegen.

    Oder über die zuerst genannte Lösung in 4 Zeilen :)