1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. alpines

Beiträge von alpines

  • Bildschirmausschnitt als bmp zum Drücken

    • alpines
    • 3. Juli 2019 um 21:46
    Zitat von Kanashius

    Es wäre doch viel einfacher direkt in AutoIt nen IE-Fenster zu erstellen (oder meine Preferenz: JavaFX). Die Steuerung wäre leichter umzusetzen und du hättest die komplette Kontrolle über praktisch alles.

    Wenn du ne komplett Beschreibung von dem Programm erstellt, also alles was es können soll, wie es aussehen soll,... würde ich am Wochenende ggf. schauen, dass ich das Programmiere.

    Es macht letzlich keinen Unterschied ob du das mit Excel VBA oder AutoIt realisierst.

    Statt einer gewrappten UDF verwendest du halt die Objekte direkt, und das müsstest du in AutoIt teilweise sowieso, da eval() ja nicht funktioniert.

    Ein paar Helpermethoden und fertig.

    Wenn man schon knietief drinsteckt stellt sich die Frage ob man das ganze wirklich neuschreiben möchte oder einfach noch fertigbringen will.

    Und da scheinbar schon sehr sehr viel Arbeit drin steckt erübrigt sich die Frage (in diesem Fall).

  • Bildschirmausschnitt als bmp zum Drücken

    • alpines
    • 3. Juli 2019 um 21:05

    Das kannst du dir doch alles schenken? Du musst noch nicht mal auf YouTube navigieren.

    Schau mal hier rein: https://developers.google.com/youtube/iframe_api_reference?csw=1

    Das ist die iframe-API die dir YouTube anbietet um mit dem Player zu interfacen. Wenn du möchtest kannst du einfach eine blanke Seite nur mit dem Player laden und dieser ist dann immer an der selben Stelle.

    Mit der API kannst du auch die Wiedergabegeschwindigkeit anpassen also musst du nicht mit der Maus umherklicken.

    Die gleiche API habe ich auch verwendet um den aktuellen Zeitpunkt auszulesen, das hatte ich bereits im anderen Thread gepostet.

  • CDATA aus XML auslesen

    • alpines
    • 3. Juli 2019 um 17:39

    Was schmeißt du dann in _StringBetween rein? $oXML. Und was ist das? $oXML=("https://www.hersteller.com/xmlapi/api.php?command=product&model="&$Artnr&".xml")

    Du suchst in dem String https://www.hersteller.com/xmlapi/api.php?command=product&model="&$Artnr&".xml nach deinen Daten. Das wird vermutlich nicht richtig sein oder?

  • Mit Hex werte´n Rechnen ??

    • alpines
    • 3. Juli 2019 um 17:34
    Zitat von no@name

    alles gut .

    hab dein deine antwort net lesen könn, weil wenn schreiben dann forum net aktuell .

    Du kannst auch vor dem Posten nochmal kurz F5 drücken und nachschauen ob vielleicht in der Zeit nicht noch was reingekommen ist.

    Und fürs nächste Mal:

    Wir pflegen in diesem Forum einen gewissen Umgangston. Dazu gehören vollständige Sätze und vernünftige Rechtschreibung.

    Wenn du Hilfe bekommen möchtest und deine Posts nur so hinschmierst motivierst du nicht sehr viele Leute dir zu helfen.

  • CDATA aus XML auslesen

    • alpines
    • 3. Juli 2019 um 16:53

    Du postest ein Skript mit einer UDF die in der Standard-AutoIt-Installation nicht enthalten ist, viel Hilfe brauchst du dabei nicht zu erwarten.

    Außerdem verwendest du _StringBetween völlig falsch, schau dir mal in der Hilfe an was für einen Rückgabewert du erhältst und was du auszugeben versuchst.

  • Mit Hex werte´n Rechnen ??

    • alpines
    • 3. Juli 2019 um 16:51

    Nimm dir bitte zum nächsten Mal die geposteten Beiträge zu Herzen bevor du

    Zitat von no@name

    ich meine kann doch net so schwer sein ????

    postest. Mein Beispiel hatte dir gezeigt wie du Hex-Werte verrechnen kannst, offenbar hast du es nicht gelesen.

  • Mit Hex werte´n Rechnen ??

    • alpines
    • 3. Juli 2019 um 16:11
    Code
    Local $var1 = 0xDEAD
    Local $var2 = 0xBEEF
    
    MsgBox(0, 0, Hex($var1 + $var2))
  • Bildschirmausschnitt als bmp zum Drücken

    • alpines
    • 2. Juli 2019 um 23:42

    Generell sollte man die Finger von ImageSearch lassen.

    Zitat von stef26

    Dies hat jedoch den Nachteil, wenn Fenster verschoben sind oder andere Bildschirmauflösung, dann drückt die Maus ins leere.

    Ich hab in einem Youtub Video gesehen, dass man auch ein Bild machen kann, welches dann gesucht wird und gedrückt werden kann.

    Selbst mit ImageSearch würde das nicht funktionieren, da wenn die Auflösung anders ist, die Buttons entsprechend anders aussehen sollten.

    Werty hat dir bereits im ersten Beitrag das Stichwort gegeben: MouseCoordMode.

    Lokalisier die Koordinaten relativ zum Fenster und dann brauchst du nur die relativen Koordinaten anzugeben.

    AutoIt nimmt vom aktiven Fenster die Position und addiert deine Koordinaten drauf, so kann das Fenster gedrückt werden egal wo es sich gerade befindet.

    Je nach Programm kannst du auch ControlClick verwenden, das dürfte ne Ecke sicherer sein.

  • Mit Send Befehlkopieren

    • alpines
    • 1. Juli 2019 um 11:39
    Zitat von stef26

    dein Code bringt schonmal die Zeit eines Videos. Jetzt muss ich mir das mal ansehen, wie ich den Code bearbeiten muss, so dass dieser im bereits laufenden Video mir angezeigt wird...

    Du hättest den Code fast 1zu1 übernehmen können.

    Ich bin mit Excel VBA überhaupt nicht vertraut, also die Automatisierungsfehler wegklicken. Debuggen anklicken. Stoppen und einfach das ganze oben mit Play starten.

    Dann sollte dir das Label die aktuelle Zeit anzeigen, den Rest kriegst du ja selber hin.

    Dateien

    Mappe1.rar 21,94 kB – 277 Downloads
  • Mit Send Befehlkopieren

    • alpines
    • 30. Juni 2019 um 19:53

    Sorry für den wirklich hässlichen Code aber ich muss gleich los und wollt noch gerne meinen Senf dazu geben.

    Da ich mit document.parentwindow.eval es nicht hinbekommen habe den Wert zurückzubekommen musste ein Control dafür herhalten.

    Es wäre auch möglich gewesen direkt das Control mit der Klasse "ytp-time-current" auszulesen (welches sogar die korrekte Zeit beinhaltet) allerdings wird das nicht mehr aktualisiert,

    wenn es einmal den Fokus verloren hat - erst wenn wieder die Maus drüber ist.

    Der Code sollte auch in VBA machbar sein, da hier fast alles direkt auf das IE-COM-Objekt zugreift.

    Code
    #include <IE.au3>
    
    Do
        ProcessClose("iexplore.exe")
        $oIE = _IECreate("https://www.youtube.com/watch?v=ZZcsacWaD0w")
    Until IsObj($oIE)
    
    Local $oTags = _IETagNameAllGetCollection($oIE)
    Local $oOpfer
    
    For $o In $oTags
        If $o.ClassName == "ytp-time-current" Then
            $oOpfer = $o
            ExitLoop
        EndIf
    Next
    
    While Sleep(100)
        $oIE.document.parentwindow.execScript("document.getElementsByClassName(""ytp-time-current"")[0].innerText = document.getElementById(""movie_player"").getCurrentTime();")
        ConsoleWrite("Aktuelle Zeit des Tracks: " & $oOpfer.innerText & @CRLF)
    WEnd
    Alles anzeigen
  • Mit Send Befehlkopieren

    • alpines
    • 30. Juni 2019 um 16:05

    Hast du die Zeilennummern mitkopiert? Ab und zu versteckt WBB auch unsichtbare Zeichen im Quellcode.

    Wenn in der Konsole bei Fehlermeldungen Fragezeichen auftauchen am besten die Zeile löschen und per Hand eintippen.

  • Mit Send Befehlkopieren

    • alpines
    • 30. Juni 2019 um 09:41

    Hallo Stefan und willkommen im AutoIt.de-Forum.

    Viele der User (besonders neue) sehen ab und zu den Wald vor lauter Bäumen nicht, weil sie in ihrem Weg festgefahren und gute Alternativen nicht erkennen.

    Erklär uns doch bitte warum du die YouTube-Zeit aus einem embeddeden Excel-Objekt rauskopieren und in die Tabelle eintragen musst?

    Es wird ja sicherlich einen Grund haben warum du das ganze überhaupt in Excel machst. Was soll mit Hilfe deines Programmes erreicht werden?

    Zu guter Letzt bleibt noch zu sagen:

    Zitat von stef26

    Habe schon folgendes probiert:

    send ("{LCTRL}c");copy

    send ("^c");copy

    Aber irgendwie kopiert er mir den Text nicht.

    Wenn dieser Einzeiler dein gesamtes Skript war kann das natürlich auf keinen Fall funktionieren.

    Also Faustregel: Willst du Hilfe zu deinem Skript - poste es.

  • Return (zur Hauptschleife)

    • alpines
    • 29. Juni 2019 um 12:17

    Du könntest deine Funktionen mit einem Wrapper.... wrappen. Dann eine Flag setzen und fertig. Vielleicht hilft dir das ja auch noch auf die Sprünge.

    So ähnlich hab ich es bei einem Server Controller als Pluginsystem implementiert:

    Code
    Local $aMyFuncs[4] = [ _MyFunc1, _MyFunc2, _MyFunc3, _MyFunc4 ]
    Local $aParamList[4] = [ "Text1", "Ananas", "AutoIt", "Script" ]
    Local $bMyFuncFailedFlag = False
    
    ConsoleWrite(@CRLF)
    
    ConsoleWrite("+Starte Ausführung der Funktionen." & @CRLF)
    If _ExecuteMyFunctionsAndReturnToMainScriptIfOneOrMoreOfThemHaveFailed($aMyFuncs, $aParamList) Then
        ConsoleWrite("+Ausführung erfolgreich beendet." & @CRLF)
    Else
        ConsoleWrite("!Ausführung wurde nicht erfolgreich beendet." & @CRLF)
    EndIf
    
    ConsoleWrite(@CRLF)
    
    Func _ExecuteMyFunctionsAndReturnToMainScriptIfOneOrMoreOfThemHaveFailed($aMyFuncs, $aParamList)
        For $i = 0 To UBound($aMyFuncs) - 1
            Local $pMyFunc = $aMyFuncs[$i]
    
            $pMyFunc($aParamList[$i])
            If $bMyFuncFailedFlag Then
                ConsoleWrite("!MyFuncFailedFlag wurde gesetzt bei $aMyFuncs[" & $i & "]. Springe zum Hauptskript zurück." & @CRLF)
                Return False
            EndIf
        Next
    
        Return True
    EndFunc
    
    Func _MyFunc1($sString)
        ConsoleWrite("-_MyFunc1: " & $sString & @CRLF)
    EndFunc
    
    Func _MyFunc2($sString)
        ConsoleWrite("-_MyFunc2: " & $sString & @CRLF)
    EndFunc
    
    Func _MyFunc3($sString)
        ConsoleWrite("-_MyFunc3: " & $sString & @CRLF)
        $bMyFuncFailedFlag = True
    EndFunc
    
    Func _MyFunc4($sString)
        ConsoleWrite("-_MyFunc4: " & $sString & @CRLF)
    EndFunc
    Alles anzeigen
  • Return (zur Hauptschleife)

    • alpines
    • 29. Juni 2019 um 12:08

    Gott sei Dank gibt es in AutoIt kein goto, da das Forum hier sonst mit solchen Fragen übersäht wäre. Nein, du kannst nicht einfach alles terminieren.

    Du könntest eine Fehlerroutine starten (_HandleMyError) und dort die gegebenen Schritte einleiten um das Skript am aktuellen Stand wieder lauffähig zu machen,

    oder du könntest die Fehlermeldung einfach anzeigen und das Skript anschließend beenden (bzw. alle besuchten Funktionen verlassen und von neu anfangen).

    Grundsätzlich stellt man so eine Frage allerdings wenn man seinen Code nicht gut strukturiert hat. Für gewöhnlich ist man nämlich nicht tiefer als kaum eine handvoll Funktionen im Skript und muss sich darum keine Sorgen machen.

    Schau dir deinen Code nochmal sorgfältig an (oder zeig uns einfach ein abgespecktes Beispiel) um zu sehen ob du vielleicht nicht das eine oder andere noch verschieben kannst.

  • PassIt2 1.1.0 - Dateien zwischen PCs einfach und bequem übertragen!

    • alpines
    • 28. Juni 2019 um 19:52

    Blöder WinDefender.

    Eine Extraabfrage ob die Worker-Exe existiert bzw. gestartet wurde werde ich hinzufügen.

    Wollte mir da generell noch Gedanken machen, da es sein kann, dass der Background Worker nicht startet wenn eine Datei gerade gesendet wird.

    Die nächste Version werde ich dann auch mal beim WinDefender Team einschicken damit diese sie dann als sicher markieren können.

  • StdoutRead-Beispiel @CRLF

    • alpines
    • 28. Juni 2019 um 14:30
    Zitat von Professor Bernd

    Die beiden Klammern machen aus dem Ganzen einen boolschen Ausdruck. Eigentlich müsste es aber eine Zuweisung sein ("="), da ich kein "If" sehen kann!?

    Zitat von Professor Bernd

    Die Logik ist mir klar. Was ich gerne wissen möchte ist, wo kommt das "?" her, und der ":" ? Mit welchem Suchbegriff kann man das in der AutoIt-Hilfe finden? (Mit "?" auf jeden Fall nicht.)

    Das hatte ich bereits im Post erwähnt, "ternärer Operator": https://www.autoitscript.com/autoit3/docs/keywords/Ternary.htm

    Die Klammern machen daraus keinen boolschen Ausdruck, sie dienen lediglich dazu, den Ausdruck vorher zu evaluieren, damit nichts falsches geparst wird.

    Einige Ausdrücke haben den selben Rang in der Operatorenpräferenz und deshalb ist es immer gut ternäre Ausdrücke als ganzes, und noch mal einzeln zu umschließen, damit das deutlich wird.

    Code
    $b = True
    MsgBox(0, 0, $b ? "Bla" : "Blubb" & "Ende")
    $b = False
    MsgBox(0, 0, $b ? "Bla" : "Blubb" & "Ende")

    Die Zeichen ? : sind dafür gewählt, und sind auch in anderen Sprachen gleich.

    Übrigens eine Zuweisung gibt es in AutoIt NUR als "Oberbefehl" in einer Zeile. $a = bla ist eine Zuweisung.

    Du kannst nämlich auch boolche Ausdrücke in Variablen speichern, in etwa so:

    Code
    Local $a = 100
    Local $b = 50
    
    Local $kleiner = $a < $b
    Local $gleich = $a = $b
    Local $groesser = $a > $b
    
    MsgBox(0, 0, _
        "Kleiner: " & $kleiner & @CRLF & _
        "Gleich: " & $gleich & @CRLF & _
        "Groesser: " & $groesser _
    )
    Alles anzeigen
  • StdoutRead-Beispiel @CRLF

    • alpines
    • 27. Juni 2019 um 22:19

    Das passiert wenn man im Forumeditor Quellcode frei nach Gedanken tippt ohne ihn vorher auszuführen. :rolleyes_:

  • StdoutRead-Beispiel @CRLF

    • alpines
    • 27. Juni 2019 um 21:38
    Zitat von Professor Bernd

    Tut mir leid, aber da blicke ich nicht durch. Sorry. Ebenso mit Zeile 15. Wo findet man denn Informationen darüber? Was machen denn das "?" und der ":" z. B.?

    Das ist der ternäre Operator, ein "in-line-if-statement" wenn man so möchte.

    Für das Skript mal aus:

    Code
    Local $bMyVar = True
    
    MsgBox(0, 0, (($bMyVar = False) ? "My Var ist False" : "My Var ist True))

    Zeile 13 ist ein regulärer Ausdruck und nichts wildes. (.+?)\R?bedeutet einfach nur, matche alles bis ein Zeilenumbruch kommt (oder auch nicht) für jede Zeile.

  • XML einlesen und per URL übergeben

    • alpines
    • 27. Juni 2019 um 15:51

    Das liegt am ShellExecute. Das parst die Gänsefüßchen so, dass Parameter als ganzes übergeben werden können. Beispiel:

    Wenn du einen Pfad C:\Ordner 1\Bla.pdf an eine Exe übergeben möchtest und du sie so callst 123.exe C:\Ordner 1\Bla.pdf wird die Windows Shell den Parameter aufteilen.

    Es kommen zwei Werte an: einmal C:\Ordner in $CMDLine[1] und 1\Bla.pdf in $CMDLine[2]. Ersetz die Gänsefüßchen mal mit %22 welches der URL-Encodierung davon entspricht.

  • XML einlesen und per URL übergeben

    • alpines
    • 27. Juni 2019 um 15:08

    Dir ist schon klar, das du mit StringStripWS die XML-Formatierung komplett über den Haufen wirfst? in-tag-Parameter werden vermischt.

    <tag name="bla" /> würde zu <tagname="bla"/> werden.

    StringReplace mal deine @CRLFs komplett weg.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™