Beiträge von f705185@rppkn.com

    Also du willst in der Schleife immer und immer wieder AnyDesk in den Vordergrund bringen und dann "Annehmen" klicken, egal ob das bereits passiert ist.
    Das wird so nicht funktionieren.


    Kannst du bitte mal diese Version an Code ausprobieren:

    Ich gehe hier davon aus, dass ein Fenster mit Titel "AnyDesk" aufpoppt und erst wenn dieses aufpoppt/aktiv/im Vordergrund ist, dann wird der Button "Annehmen" gewählt.

    Viele Grüße
    Sven

    Ja, richtig. Man muss dieses neue Fenster sogar nicht mal aktiv in den Vordergrund bringen, es erscheint autom. "ganz nach vorne".

    Streng genommen muss man es sogar nicht irgendwohin verschieben, da es immer gleich groß und an der gleichen Stelle ist, wenn es erscheint.


    Obiger Code klappt leider auch nicht. Ich gebe es aber auf, das wird so nicht klappen. Wahrscheinlich irritiert den das, dass beide Fenster den gleichen Titel oder so haben.


    Ich bedanke mich nochmals sehr bei dir für deine Zeit & Mühen!

    Ich versuche es schon, so ist das nicht!


    Folgendes habe ich probiert, vielleicht kannst du ja direkt den Fehler erkennen:

    Ich habe jetzt bei allen die Klasse zu der vom Advaned gemacht.

    Natürlich. So sieht das dann aus, bin gespannt, wie das gelöst wird.

    Ja, ok, dann wäre ja alles klar. Tut mir leid für die Verwirrung!

    Nein, woher auch? Wie wäre es wenn du beschreibst wo du diese Angaben her hast oder siehst? Geht es um das Au3Info Tool, welches dir diese Klassen anzeigt, wenn du über das aufpoppende AnyDesk Fenster hoverst? Vielleicht ich es dir nicht bekannt, doch ein Fenster kann auf Grund seines Aufbaus (bspw. der darunter liegenden Programmiersprache oder des verwendeten Frameworks (wie Swing, Qt etc.)) völlig unterschiedliche Controls/Elemente bzw. Klassen aufweisen. Also daher ist mir kein Basic Window Info oder Basic Control Info bekannt.

    Auch hierzu bitte Screenshots, damit man zumindest Versuche starten kann. Es ist nicht so, als würde ich mir extra AnyDesk installieren um dein Szenario durchzuspielen, ein wenig mehr Zuarbeit braucht es schon - schließlich bist du hier der Fragende, meinst du nicht?


    Bitte nicht falsch verstehen, doch Forderungen finde ich unangebracht.


    Viele Grüße
    Sven

    Ach nein, ich meinte das nicht bezogen auf meine Anwendung sondern i.A. also generell.

    Das Tool heiß Autoit Window Info. Dort gibt es eben diese 2 Kategorien

    Kannst du daher mal ein paar Screenshots machen in denen du deutlich machst, was du manuell genau tun würdest? Dann sind die Vorschläge sicherlich auch besser.

    Sehr gerne.

    Also, das normale Anydesk Fenster läuft ja, und wenn es nicht läuft, dann wird es gestartet. Das klappt alles, da muss auch am Code nichts verändert werden.

    So, nun ist es so, dass, wenn sich ein anderes Gerät verbinden möchte, dann ein neues Fenster erscheint. Dafür soll es in der gleichen while Schleife auch eine Bedingung geben, dass diese Anfrage jederzeit angenommen wird (sei es um 3 oder um 19 Uhr).

    Im Anhang ist ein Bild, wie diese Anfrage aussieht.

    Kurz: es soll einfach nur auf annehmen drücken, sobald eine Verbindungsanfrage erscheint.


    Und könntest du mir bitte endlich mal den Unterschied zwischen der Klasse von "Basic Window Info" und "Basic Control Info" sagen? Danke.

    Vielen lieben Dank für deine sehr ausführliche Antwort!!


    Aber ich denke, du hast mich da leider falsch verstanden.


    Und zwar soll Anydesk immer im Hintergrund laufen, und wenn es nicht läuft bzw. geschlossen wird, dann soll es laufen.

    Das geschieht ja soweit gut mit folgendem Code:

    AutoIt
        If Not ProcessExists('AnyDesk.exe') Then
            Run('C:\Program Files (x86)\AnyDesk\AnyDesk.exe')
        EndIf
    
        Sleep(250)


    Dann ist es ja so, dass ein zusätzliches Fenster erscheint, wenn eine Verbindungsanfrage von einem Gerät kommt.

    Da möchte ich es so haben, dass im zusätzlichen Pop-up auf annehmen gedrückt wird.

    Und genau da ist mein Problem:

    Ich weiß 1) nicht, ob ich die Klasse von "Basic Window Info" oder von "Basic Control Info" nehmen muss.

    2) Wie ich das am besten per ControlClick implentieren soll.


    Ich glaube, dein Code ist da wirklich sehr ausführlich, ich glaube sogar fast schon zu sehr ausführlich.

    Das geht bestimmt kürzer, mir fehlt da sogar (mit dem ersten Code im Anfangspost verglichen) glaube ich nur eine Zeile, die korrigiert werden muss.

    Abend Sven,


    genau, wenn Anydesk noch nicht läuft, dann soll es laufen.

    Und wenn da eine Verbindungsfrage kommt, soll er es annehmen.

    Das alles in einer unendlichen While Schleife, damit das auch immer klappt.


    Den Rest schaue ich mir morgen früh mal genauer an. Danke schonmal!

    Anlehnend an meinen anderen Thread: Programm schreiben, das überprüfen soll ob .exe im Hintergrund läuft (vielen Dank an dieser Stelle für die zahlreichen Antworten!) möchte ich auf eine bestimmte Stelle klicken, wenn ein bestimmtes Fenster erscheint.

    Allerdings soll das in einer while-Schleife passieren. Meine will nicht so ganz klappen:

    Also, das erste Problem hierbei ist, dass das erste if-Statement nur einmal ausgeführt wird. Kann mir vorstellen, dass es daran liegt, dass er beim zweiten hängenbleibt.

    Das zweite Problem ist, dass ich beim MousClick nicht per Koordinaten klicken möchte, da diese sich immer wieder verändern können.

    Ich glaube, die Lösung ist es, per Klassen zu arbeiten. Allerdings weiß ich nicht, ob ich die Klasse von "Basic Window Info" oder von "Basic Control Info" nehmen muss.

    Wenn ich bestimmte klickbare Teile innerhalb des Fensters auswähle, dann ändert sich eine Klasse, die andere bleibt gleich. Heißt, es müsste die änderbare, also Basic Control Info sein, denke ich mal: basic_button#9


    Was habe ich also falsch gemacht?

    Hallo,

    ich möchte ein kurzes Programm schreiben, das überprüft, ob ein Programm im Hintergrund läuft und falls nicht, das es dann einmal startet (also in ner Schleife).

    Folgendes klappt mit dem Text-Editor wunderbar:

    AutoIt
    While 1
    If Not ProcessExists("notepad.exe") Then    
    Run("notepad.exe")
    EndIf
    WEnd

    Es startet den Text Editor genau einmal, wenn es nicht geöffnet wird.

    Mache ich allerdings in die "" nicht notepad.exe rein, sondern "C:\Program Files (x86)\AnyDesk\AnyDesk.exe" dann startet es das Programm unendlich oft, auch wenn es bereits läuft.

    Ich kann mir vorstellen, dass es i-was mit dem Pfad zu tun hat, weil oben bei Notepad habe ich nur die .exe angegeben.
    Anydesk in win32 zu verschieben, würde glaube ich keinen Sinn ergeben. Wie sähe das also richtig aus?

    Das ist für mich extrem unintuitiv. Warum muss ich das angeben, was ich nicht matchen will ("alles, was kein Wort trennt")?

    Nach meinem Verständnis von RegEx sollte man explizit angeben, was man matcht und nicht, was man nicht matcht. Will sagen: Was ich in meinem Pattern nicht angebe, soll auch nicht da sein. \b vor und nach jedes Zeichen (bzw. in meinem Fall zu machtende Wort) zu setzen macht den Code extrem unleserlich und ich kann beim besten Willen nicht verstehen, was sich ein Sprachdesigner dabei gedacht hat. Schließlich ist es StringRegEx und nicht SubStringRegEx.

    Immerhin geht "\A(a|b|c)\Z". Ist zwar hässlich und wird mich irgendwann zwingen \A und \Z nachzuschlagen, wenn ich den Code überarbeite, aber scheinbar muss das in Autoit dann so. Danke.

    Wie gesagt, ich matche a, nicht .*a.* - offenbar ergänzt Autoit .* auf beiden Seiten Seite automatisch bzw. interpretiert die RegEx als Substring, weil auf "dabc" ebenso die Regex "a" matcht


    Was ich erwarte und warum habe ich doch schon beschrieben - mir ist nicht klar, wie ich es anders formulieren soll. Ich versuche es dennoch nochmal

    Code
    StringRegExp("abc", "a")

    sollte False/0 sein

    Code
    StringRegExp("abc", "a.*")

    sollte True/1 sein

    Es war viel einfacher als ich dachte. Ich muss einfach jedesmal ein neues Objekt erstellen. Hier der Code:


    Dim $var1=ObjCreate("Scripting.Dictionary")
    Dim $var2=ObjCreate("Scripting.Dictionary")


    $var1.add("farbe","grün")
    $var1.add("eigenschaft","fest")
    $var2.add(1,$var1)


    ;$var1.RemoveAll alter Code


    $var1=ObjCreate("Scripting.Dictionary") ;neu
    $var1.add("farbe","gelb")
    $var1.add("eigenschaft","flüssig")
    $var2.add(2,$var1)


    Dim $var3=ObjCreate("Scripting.Dictionary")
    Dim $var3 = $var2.Item(1)
    msgbox(48,"Eigenschaft",$var3.Item("eigenschaft"));

    Danke schonmal für die prompte und ausführliche Antwort. Call by Value und Call by Reference sind mir von C geläufig. Ich hatte vermutet, dass es damit zusammenhängt.

    Zitat

    Das heißt du musst also immer ein neues Dictionary erstellen anstatt immer wieder auf das selbe zu verweisen.

    Ich schildere mal mein Problem etwas abstrakt. Ich habe mehrere Autos. Die Eigenschaften eines Autos lege ich in ein Dictionary. Meine gesamten Autos möchte ich nun in einem weiteren Dictionary als Fuhrpark zusammenfassen. Diesen Fuhrpark möchte ich nun an eine Funktion übergeben, die z.B. den Fuhrpark einfach nur ausgibt. Die einzelnen Autos zu übergeben macht da also wenig Sinn.
    Wie löse ich diese Aufgabe am besten?

    Hier mein Skript


    Erwartet wird, dass in der Messagebox "fest" steht, stattdessen erscheint "flüssig". Was mache ich falsch? Wie kann ich es besser lösen? Danke für die Hilfe im Voraus.