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

  • VBScript - Ereignis mitbekommen per Schleife?

    • alpines
    • 11. Oktober 2019 um 00:11
    Zitat von Professor Bernd

    So ist es. Mein (Haupt-)Script ruft die externe Funktion genau aus dem Grund auf, um sich selbst zu pausieren.

    Nimm lieber das Standard Sleep / Delay von vbScript oder wenigstens timeout 5 (5 = Sekunden) als Shellbefehl. Einen externen Aufruf brauchst du nicht, aber ich glaub das war ja sowieso nur zum testen.

    (Du kannst damit ja auch externe Sachen parallel laufen lassen wenn du aus dem True ein False machst, bringt dir aber nicht viel weil du auf den Editor keinen Zugriff hast).

    Callst du eigentlich deine TestRoutine grad mit einem Menupunkt? Oder wie rufst du die auf?

    Vielleicht findest du ja im JScript noch Timer, einfach fleißig suchen, irgendwas findest du schon. Und wenn nicht, dann bastelst du einfach einen Workaround bis etwas vernünftiges implementiert ist (über Code-Injection oder ähnlichem).

    Nebenbei bemerkt: Das setzen von wshShell brauchst du doch auch nicht, die Variable sollte doch nach der Funktion ungültig sein oder nicht?

  • VBScript - Ereignis mitbekommen per Schleife?

    • alpines
    • 10. Oktober 2019 um 22:23
    Zitat von Professor Bernd

    Leider doch. Ich erkläre mir das so, dass auch eine ausgelagerte Delay-Funktion im Grunde die Ausführung des Scripts pausiert. Das pausierte Script lässt dann halt das Programm (PSPad) einfrieren usw.

    Kannst du mal den Code dazu posten? Threads sollten völlig unabhängig voneinander laufen. Es sei denn du wartest im Hauptskript auf die Beendigung des Threads, dann ist das Verhalten verständlich.

    Vielleicht hast du ja nur einen kleinen Knicks drinne.

    Zitat von Professor Bernd

    Die Menüpunkte nutzen leider nichts, es geht hier ja um eine Monitoring-Möglichkeit. Das Script soll laufen, sobald PSPad gestartet wird und dann im Hintergrund prüfen, ob dies oder das im Editor passiert. Also z. B. alle 200 ms prüfen, ob der User etwas im Editor markiert hat und dementsprechend eine Aktion ausführen.

    Darauf wollte ich ja hinaus. Notepad++ Addons erlauben beispielsweise Aufruf von Funktionen über Menupunkte, aber lassen den Code parallel laufen, so ist es egal ob Threads gespawnt werden, der Editor friert nur ein wenn auf dem Editorthread pausiert wird.

    Zitat von Professor Bernd

    Interessante Idee! Nicht dass ich nicht selbst schon daran gedacht hätte, :D aber da gibt es mindestens 2 Argumente, die dagegen sprechen. Erstens gibt es keine vernünftige Schnittstelle, um einen PSPad-Hotkey von außerhalb auszulösen (es müsste ein "größerer Hack" her, z. B. per SendMessage). Ansich würde ich das gerne ausprobieren, aber das zweite Argument wird das wohl obsolet machen: Wenn alle 200 ms ein Hotkey ausgelöst wird, zieht das dem User "die Maus unter der Hand weg". Ich denke, das würde die Benutzbarkeit genauso beeinträchtigen, wie die o.g. Sleep-Funktionen.

    Es gänge auch ein bisschen schmutziger, aber sauberer in anderer Hinsicht. Du könntest Code-Injecten und deine Funktion einfach alle x Sekunden aufrufen, das würde aber voraussetzen, dass du die Speicheradressen von PSPad anwählen kannst und das bezweifle ich extrem stark.

    Sowas wäre nur über Drittskript möglich, und würde dazu führen, dass man wenn man den Editor gestartet hat, erst die Timerfunktionalität injecten müsste. Aber lassen wir das mal sein, hat viele andere Nachteile.

    Zitat von Professor Bernd

    Python ist nur im Zusammenhang mit "Regular Expression HOWTO (For Python)" genannt. Keine Schnittstelle. ;(

    Sicher? In der Dokumentation sind doch Beispiele mit Python gegeben? Siehe pspadVersion. vbScript, Javascript und Python.

    Es sind sogar Funktionen als Beispiel genannt wo die Init Funktion in Python gegeben ist wie z.B. bei addMenuItem.

  • VBScript - Ereignis mitbekommen per Schleife?

    • alpines
    • 10. Oktober 2019 um 20:17
    Zitat von Professor Bernd

    Auch habe ich Delay-Funktionen in einen anderen Thread ausgelagert, aber in VBScript gibt es kein "DoEvents". Somit hat auch das nichts bewirkt.

    Das mit den Threads kann nicht richtig sein, wenn der Thread unabhängig läuft, sollte da nichts einfrieren.

    Es ist blöd, dass es kein DoEvents gibt, aber das muss dementsprechend bedeuten, dass deine Skripte bei bestimmten Aktionen oder alle x Sekunden ausgeführt werden.

    Alle Erweiterungen die ich bisher gesehen hab konnte man nur über einen Menupunkt aufrufen, aber es kann ja nicht unmöglich sein parallel was laufen zu haben.

    Für Notepad++ kann man problemlos Threads laufen haben, man muss nur aufpassen, dass man die Funktionen richtig invoked.

    Wenn VBScript sowas nicht anbietet musst du mal schauen ob du dein Plugin vielleicht nicht anders angebunden bekommst. Statt die Funktionalität über einen Menupunkt hinzuzufügen, vielleicht als Hintergrundtask.

    Ich weiß nicht wie viel Spielraum man da in PSPad hat, da kennt sich der Entwickler bestimmt am besten aus. Aber es sollte möglich sein, ein Skript im Hintergrund laufen zu haben, oder beim wechseln der Cursorposition ein Plugin auszuführen.

    Im Endeffekt ist der Menupunkt ja auch ein Event, was den Callback (deine Pluginfunktion) feuert, wenn draufgeklickt wird.

    Ich sehe aber in der Dokumentation, dass Beispiele von vbScript, Javascript UND Python gegeben sind. Kannst du nicht dein Plugin in Javascript oder Python schreiben? Die sollten doch bestimmt Threads unterstützten?

    Sollte auch das nicht funktionieren, kannst du einen MacGyver-Workaround basteln indem du aus deinem vbScript einfach eine selbstgeschriebes AutoIt-Skript ausführst, welches alle x Millisekunden den Hotkey zum Ausführen deines Plugins tätigt.

    So erreicht man sein Ziel zwar auch, aber absolut nicht empfehlenswert.

  • Probleme mit WinSetState (GUI reagiert nicht mehr)

    • alpines
    • 10. Oktober 2019 um 18:03
    Zitat von autoiter

    Nur kann ich ja leider GuiSetState nicht aus einem anderen Skript heraus anwenden..

    Musst du doch auch nicht. Nimm einfach in jedem Script WinSetState, bei mir funktionierts.

  • Probleme mit WinSetState (GUI reagiert nicht mehr)

    • alpines
    • 10. Oktober 2019 um 17:57

    Kann ich so nachproduzieren (W7 HP x64), sehr eigenartig. Wahrscheinlich beißen sich GUISetState und WinSetState.

    Wenn du statt GUISetState WinSetState verwendest funktioniert der Button nämlich wieder.

  • VBScript - Ereignis mitbekommen per Schleife?

    • alpines
    • 8. Oktober 2019 um 23:34

    Mach dir um die CPU-Last erstmal keine Sorgen. Ich weiß nicht wie PSPad seine Plugins behandelt, ob die x mal in der Sekunde ausgeführt werden oder parallel laufen, aber wenn die Auslastung in die Höhe schnellt einfach ein Sleep 10ms rein und fertig.

    Ich denke du machst dir da zu viele Gedanken, versuch erstmal zu erfassen wenn ein neuer Text markiert wurde und lass dir dann eine MsgBox oder etwas anderes ausgeben und arbeite dich dann weiter.

    Wenn du fit in der Materie bist kannst du das ganze auch besser strukturieren, keine erwartet von dir, und das solltest du auch von dir nicht, dass du direkt alles von Anfang an beherrscht. Es ist noch kein Meister vom Himmel gefallen, und wird auch nicht.

    Wenn du ständig überlegst wie du was strukturieren könntest wirst du irgendwann keine Lust mehr haben und aufhören, fang einfach mal an zu basteln und bring den Stein ins Rollen.

    Nach paar Tagen hast du alles im Griff und kriegst es auch alleine auf die Kette, einfach machen, der Rest kommt schon von allein.

    Und solltest du absolut keine Ahnung haben wie dein Skript ausgeführt wird, dann klau dir einfach ein OpenSource Plugin und strip soweit alles runter bis du in einer Einstiegsroutine bist und arbeite dich von da aus nach weiter.

  • VBScript - Ereignis mitbekommen per Schleife?

    • alpines
    • 8. Oktober 2019 um 22:51

    Du hattest mir doch per PN letztens eine Referenz geschickt, dort ist das doch enthalten? Die Webseite ist grad down, deshalb muss man momentan mit einer waybackmachine drauf http://web.archive.org/web/2019022100…d/functions.htm

    Hast du das vielleicht übersehen? Wenn du auf eine Funktion klickst kriegst du sogar teilweise Beispiele geliefert oder wenigstens eine Erklärung was das genau macht.

    selText wäre doch das was du im 1. Post gesucht hast oder irre ich mich?

    Du kannst sogar die Positionsangaben vom markierten Text holen.

    pasted-from-clipboard.png

  • VBScript - Ereignis mitbekommen per Schleife?

    • alpines
    • 8. Oktober 2019 um 22:02
    Zitat von Professor Bernd

    Ich kenne mit mit VBScript und WSH nicht aus, und werde auch nicht soviel damit machen, dass es sich lohnt, von Grund auf anzufangen. Kennt sich jemand damit aus, und kann mir dabei weiterhelfen? Es reicht, wenn ich ein paar Routinen habe, die mir die Kommunikation mit der Editor-Schnittstelle ermöglichen.

    Meine Philosophie ist es sich immer Sachen anzuschauen die bereits funktionieren und u. A. das machen was ich möchte, statt direkt Bücher zu wälzen oder sich Tutorials durchzusehen.

    Es gibt doch für PSPad bestimmt Plugins die OpenSource sind oder? Schau mal da rein, vielleicht kannst du da ja einfach paar Code-Blöcke rauskopieren und rumprobieren um so ein Gefühl dafür zu bekommen.

    Und Plugins die die Editor-Schnittstelle ansprechen gibts bestimmt ein paar.

    Dann werden dir auch lückenbehaftete Tutorials einfacher fallen, ich spreche da aus Erfahrung, weil ich selber grad was ähnliches durchmache.

  • Oscars Listview-Datenbank v3 - mit Suche nach mehreren Begriffen

    • alpines
    • 8. Oktober 2019 um 15:24
    Zitat von BugFix

    Bei einer UND Suche ist die Reihenfolge völlig schnuppe:

    Ich glaub du hastn Brett vorm Kopf. Der Sinn RegEx zu nutzen ist es ja das ganze eleganter auszudrücken und abzukürzen.

    Bei 'Oder' hätte man einfach (Hund|Katze|Wald) nehmen können, aber wenn alle drei vorkommen sollen können diese die Reihenfolge wechseln.

    Da kann man auch gänzlich auf StringRegExp verzichten und StringInStr nehmen, das macht mMn. den Code lesbarer, da er sowieso auf drei Funktionen aufgesplittet wird.

    Natürlich gibt es Pattern um die Reihenfolge zu berücksichtigen, aber ich finde die beste Lösung ist es StringInStr zu nehmen, und es dreifach in eine If-Verzweigung zu packen.

    Jajaja, ich hörs ja schon... Es nimmt sich funktional fast nichts wenn man StringInStr "Hund" oder StringRegExp "Hund" verwendet, aber StringInStr passt besser.

  • Externe IP ermitteln

    • alpines
    • 8. Oktober 2019 um 13:27
    Zitat von gmmg

    Im Prinzip, liest man den Text der Website aus und filtert dann die Daten, die man benötigt.

    Das ist doch viel zu kompliziert. Was hältst du davon co_steffl

    Code
    MsgBox(0, 0, BinaryToString(InetRead("http://myexternalip.com/raw")))
  • Ideen gesucht – Baum – Stamm – Blatt

    • alpines
    • 7. Oktober 2019 um 20:43

    Weißt du denn eindeutig bei Stamm, dass du den bestimmten Ast absteigen musst und nicht einen anderen?

    Vielleicht habe ich dein Vorgehen auch falsch verstanden, kannst du uns das bitte anhand eines besseren Beispiels erklären? Du kannst und ja mal zeigen wo du das ganze verwenden möchtest.

  • Batch erstellen, damit das au3-Skript mit der AutoIt3.exe direkt geöffnet werden kann (gelöst)

    • alpines
    • 6. Oktober 2019 um 18:48

    Du brauchst den Titel nicht extra in "[...] (gelöst)" zu ändern, den gelöst-Haken habe ich schon vorher gesetzt.

  • VBScript - Ereignis mitbekommen per Schleife?

    • alpines
    • 6. Oktober 2019 um 14:25

    Schau mal nach ob du nicht vielleicht Events registrieren kannst die ausgelöst werden wenn eine Textstelle markiert ist, dann ist die CPU-Zeit des Plugins praktisch 0.

  • Batch erstellen, damit das au3-Skript mit der AutoIt3.exe direkt geöffnet werden kann (gelöst)

    • alpines
    • 5. Oktober 2019 um 20:05

    Einfach das Skript auf die Bat-Datei ziehen oder die Verknüpfung ausführen.

    Den Pfad in der Verknüpfung musst du anpassen, Windows erlaubt da glaube ich keine relativen, da ist noch der absolute Pfad von mir drin.

    Aber wenn du die Verknüpfung doppelklickst wird das verknüpfte Skript (enthalten in "Ziel:") sofort ausgeführt.

    Dateien

    Bat.rar 812 Byte – 398 Downloads
  • VBS Script in Autoit

    • alpines
    • 4. Oktober 2019 um 11:38
    Zitat von hipfzwirgel

    @LF & ' On Error Resume Next & _

    Zitat von hipfzwirgel

    @LF & ' Dim colItems & _

    Zitat von hipfzwirgel

    @LF & ' If WScript.Arguments.Count <> 3 Then & _

    Du vergisst sehr oft die Strings zu unterbrechen, deshalb kreidet dir AutoIt das als Fehler an. Lies dir doch mal die Fehlermeldungen ordentlich durch.

  • Escape-Sequenzen

    • alpines
    • 2. Oktober 2019 um 16:13
    Zitat von Musashi

    Du hast es nicht bei $ssecretPW belassen sondern $sssecretPW verwendet (3 x s) !

    Oh ja, da hast du natürlich recht. Mein Fehler.

    Zitat von Musashi

    :?:

    Zitat von Musashi

    $sString = '/setvalue:"Password Minimum Length","4" /cspwdfile:' & $ssecretPW & ' /verbose'

    Zitat von Musashi

    $sString = '/setvalue:"Password Minimum Length","4" /cspwdfile:$sSecretPW$ /verbose'

    Ist doch auch letztlich Haarspalterei. Solange das eigentlich Problem gelöst ist, ists gut :)

  • Escape-Sequenzen

    • alpines
    • 2. Oktober 2019 um 15:45
    Zitat von Musashi

    Kleiner Tippfehler : $sSecretPW$ nicht $sssecretPW$ ;)

    Kein Tippfehler, ich hab selber drauf geachtet und er schreibt nirgends $sSecretPW, deshalb habe ich es bei $ssecretPW belassen :P

    Du scheinst da eine gewisse Schizophrenie aufzuweisen in deinem letzten Beispielskript, da verwendest du beide Varianten :_rolleyes:

  • Escape-Sequenzen

    • alpines
    • 2. Oktober 2019 um 14:26
    Zitat von hipfzwirgel

    /setvalue:"Password Minimum Length","4" /cspwdfile:%publicPW% /verbose

    Zitat von alpines

    ShellExecuteWait($sProggi, "/setvalue:""Password Minimum Length"",""4"" & " " & ""/cspwdfile:"" & $ssecretPW & " " & ""/verbose"", "", "", "")

    Wenn ich deinen String mal ausschreiben würde mit dem Inhalt von $ssecretPW = Blubb als Beispiel sieht dein String so aus:

    /setvalue:"Password Minimum Length","4" &  "& "/cspwdfile:" & Blubb & & "/verbose",",","

    Das kann unmöglich richtig sein, der String den du stattdessen übergeben solltest wäre dieser hier:

    ShellExecuteWait($sProggi, "/setvalue:""Password Minimum Length"",""4"" /cspwdfile:" & $ssecretPW & " /verbose")

    Wieso versuchst du deine Strings unnötig oft zu terminieren und neuzustarten? Du brauchst das Leerzeichen nicht explizit in einem neuen String auszuweisen, du kannst es direkt in eins packen.

    Du könntest dir den ganzen Umweg sogar sparen und Opt("ExpandVarStrings", 1) verwenden, dann würde dein String so funktionieren:

    '/setvalue:"Password Minimum Length","4" /cspwdfile:$sssecretPW$ /verbose'

    Zitat von hipfzwirgel

    Meine Frage nach einer Übersicht über die Escape-Möglichkeiten ist bisher nicht beantwortet. Hast du oder jemand anderes eine Idee hierzu?

    Es gibt dazu keine Liste weil du nur Stringliterale escapen kannst indem du sie doppelt schreibst.

    Andere Escapesequenzen sind nur für reguläre Ausdrücke gedacht und diese kommen in der Dokumentation zu StringRegExp vor, funktionieren aber auch nur dort.

  • Escape-Sequenzen

    • alpines
    • 2. Oktober 2019 um 13:29

    Du terminierst deinen String auch nicht vor dem &-Zeichen, sieh mal genau hin.

    Ich hab deine Strings mal unterschiedlich farblich markiert.

    ShellExecuteWait($sProggi, "/setvalue:""Password Minimum Length"",""4"" & " " & ""/cspwdfile:"" & $ssecretPW & " " & ""/verbose"", "", "", "")

  • Escape-Sequenzen

    • alpines
    • 2. Oktober 2019 um 11:58

    Wie sieht denn dein ShellExecuteWait Befehl aus? Die Funktion hat ja einen Parameter für die Parameter die du übergeben willst, trägst du die Sachen dort ein brauchst du keine Escapesequenzen mehr.

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™