Beiträge von Professor Bernd

    Danke für das Lob! :)


    Changelog habe ich noch nie gemacht. Aber es ist ja bald Weihachten, da wünsche ich mir einfach einen, der mir dabei hilft. 🎅 Wie man sehen kann, heißt der Thread "PSPad4AutoIt3 Projekt DE". Falls jemand beim Übersetzen ins Englische hilft, gibts vielleicht ein "PSPad4AutoIt3 Projekt EN".


    Hat die "Installation" denn bei dir geklappt? Funktionieren die Shortcuts und die Fav-Tools? Kommt der Compiler-Output an?


    Und wenn die Events für PSPad kommen, dann gehts richtig los.

    Da hab ich ein wenig Bammel davor <X und freue mich gleichzeitig darauf! :party:


    So, da wäre schon was fürs Changelog: Ich habe eine Winzigkeit geändert und hochgeladen. Lediglich 2 Shortcuts getauscht: ClipShow=Shift+Space und ClipRun=Alt+Space.

    GermanEnglish (Translated with http://www.DeepL.com/Translator)
    Hallo.

    Diese Projekt ist mein Versuch, PSPad für AutoIt3 als Editor/IDE fit zu machen. In anderen Threads habe ich schon darüber geschrieben, und es gab auch schon einige gute Tipps.

    "PSPad4AutoIt3 Projekt" beinhaltet derzeit

    - Einstellungsdateien für PSPad.

    - 1 VBScript "AutoIt3-Script-1.vbs" für PSPad-Erweiterungen. Bisher nur 1 Funktion: "ClearLogWin".

    - AutoIt Highlighter- und Definitions-Dateien aus einer AutoIt-Standard-Installation ("C:\Program Files (x86)\AutoIt3\Extras\Editors\PSPad\")
    . Die Highlighter-Datei ist leicht angepasst, um die bestmögliche Funktionalität in PSPad zu erreichen.
    Hello.

    This project is my attempt to make PSPad fit for AutoIt3 as editor/IDE. I've written about it in other threads, and there have been some good tips.

    "PSPad4AutoIt3 Project" currently includes

    - Settings files for PSPad.

    - 1 VBScript "AutoIt3-Script-1.vbs" for PSPad extensions. So far only 1 function: "ClearLogWin".

    - AutoIt highlighter and definition files from an AutoIt standard installation ("C:\Program Files (x86)\AutoIt3\Extras\Editors\PSPad\")
    . The highlighter file is slightly customized to achieve the best possible functionality in PSPad.



    NICHT enthalten sind: / NOT included:


    - AutoIt -- Download-Seite EN -- Direkter Download Standard+SciTE(light)

    - SciTE4AutoIt3 -- Download-Seite EN -- Direkter Download

    - PSPad -- Download-Seite EN -- Direkter Download Portable



    Hier soll nun der derzeitige Stand der Entwicklung zur Verfügung gestellt werden. Es ist ein sehr, sehr früher Stand, es gibt wahrscheinlich mehr Dinge, die nicht funktionieren, als welche, die funktionieren. 8o Deshalb seid nachsichtig und erwartet nicht zu viel.

    Zumindest für den Anfang habe ich das Projekt als "portable" angelegt, um Wechselwirkungen mit anderen Dingen zu minimieren. Zudem hilft das bei der Fehlersuche.
    The current state of development is to be made available here. It's a very, very early state, there are probably more things that don't work than there are things that work. 8o Therefore be indulgent and don't expect too much.

    At least for a start, I've made the project portable to minimize interactions with other things. It also helps with troubleshooting.



    EinrichtungSetup
    1.AutoIt installieren - Wichtig: Standard-Pfad benutzen!
    Install AutoIt - Important: Use default path!
    2.SciTE4AutoIt3 installieren. - Wichtig: Standard-Pfad benutzen!*

    (*Weil manche meiner PSPad Funktionen auf die hervorragenden Scripts von SciTE zugreifen, z. B. AutoIt3Wrapper.)
    Install SciTE4AutoIt3. - Important: Use default path!*

    (*Because some of my PSPad functions access the excellent scripts of SciTE, e.g. AutoIt3Wrapper.)
    3.PSPad portable entpacken - Wichtig: In ein Verzeichnis mit Schreibrechten kopieren!
    Unzip PSPad portable - Important: Copy to a directory with write access!
    4.Improvement Kit entpacken (Zip mit meinen Dateien) und einfach alle Ordner und Dateien aus dem Datums-Ordner in den PSPad-Ordner kopieren. Vorhandene Dateien überschreiben. Der Download befindet sich in diesem Posting ganz unten.



    Extract the improvement kit (zip with my files) and simply copy all folders and files from the date folder into the PSPad folder. Overwrite existing files. The download is at the bottom of this posting.


    Datums-Ordner / date folder




    Wichtig! Alle oben genannten Schritte durchführen, BEVOR PSPad das erste Mal gestartet wird!

    Dadurch wird sichergestellt, dass PSPad im portablen Modus läuft, und sich nicht z. B. im User-Verzeichnis einnistet.
    Important! Perform all the above steps BEFORE PSPad is started for the first time!

    This will ensure that PSPad is running in portable mode and does not settle in the user directory, for example.


    Hauptansicht einstellen / Set main view



    Shortcuts


    Die Shortcuts habe ich denen von SciTE nachempfunden. Leider funktionieren noch keine für die Tools im "favorite tab"! Man sieht die "Fav-Tools", wenn man auf den Sternchen-Button klickt (siehe Screenshot oben). Alle "Fav-Tools" können per Doppelklick gestartet werden.

    Der PSPad-Entwickler Jan Fiala hat angeboten, Shortcuts für die Fav-Tools einzubauen. Bis dahin habe ich als Workaround für den wahrscheinlich am häufigsten benötigten Shortcut (F5) das Fav-Tool "au3 - Run" quasi doppelt besetzt, indem ich es zusätzlich in den au3-Kompiler-Einstellungen eingefügt habe. (Menü "Settings" \ "Highlighters Settings" -> Tab "Compiler") Dort kann man einen Shortcut einstellen (F5). Das fliegt natürlich raus, wenn die Fav-Tools eigene Shortcuts haben.
    I have modeled the shortcuts on those of SciTE. Unfortunately none work for the tools in the "favorite tab" yet! You can see the "Fav-Tools" by clicking on the star button (see screenshot above). All "Fav-Tools" can be started with a double click.

    PSPad developer Jan Fiala has offered to include shortcuts for the fav tools. Until then, as a workaround for the probably most frequently used shortcut (F5), I quasi doubled the Fav tool "au3 - Run" by adding it to the au3 compiler settings. (Menu "Settings" \ "Highlighters Settings" -> Tab "Compiler") There you can set a shortcut (F5). Of course, this is out of the question if the fav tools have their own shortcuts.


    Zitat von alpines

    "C:\Program Files (x86)\AutoIt3\SciTE\..\AutoIt3.exe" "C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.au3" /run /prod /ErrorStdOut /in "C:\Users\GIGABYTE\Desktop\Joypad.au3" /UserParams

    ...

    +>Setting Hotkeys...--> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop

    Genau so mache ich das in PSPad. Es wird AutoIt3Wrapper benutzt, aber leider funktioniert der Hotkey "Crtl+Break" nicht in PSPad. Seltsamerweise funktioniert aber "Ctrl+Alt+Break"!? Zum Testen habe ich folgendes genommen:

    Zitat

    ; Zum Testen für Shortcuts: "Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop"

    WinWaitActive("TestFensterTitle")

    Das Problem ist, die richtigen PIDs zu finden/wissen. Es soll ja nicht ein anderes AutoIt-Script abgeschossen werden, das ein User bei sich laufen hat. Dazu müsste ich halt erst wissen, "wem" ich die Schließen-Nachricht schicken soll. :/


    Nachtrag: Was bedeuted denn "Du spawnst doch die neuen Skripte"?

    Hallo BugFix,


    erstaunlicherweise habe ich gestern genau über das Thema nachgedacht und kann deinen Tip wirklich gut gebrauchen. Gleich mal ausprobieren.


    ... tick-tack ...


    Ausprobiert. Fazit: Wahnsinn! :thumbup:Dadurch eröffnen sich nicht nur eine Menge Möglichkeiten, sondern ich kann mich auch ein wichtiges Problem kümmern.


    Wenn man in SciTE ein AutoIt-Script auführt (F5) und das Script in einer Routine festhängt, kann man mit dem Hotkey "Ctrl+Break" die Ausführung abbrechen. Diese Funktionalität versuche ich in PSPad zu nachzubauen. Mithilfe deines Codes kann ich schonmal die Hotkeys auswerten. Fehlt nur noch eine Idee, wie ich die Ausführung des AutoIt-Scripts abbreche. :/


    Nachtrag: Gemeint ist: Welcher Anwendung / welchem Prozess genau soll eine "Schließen-Nachricht" gesendet weden?


    Ausschlaggebend ist dabei nicht PSPad, sondern AutoIt und der (SciTE-)AutoIt3Wrapper (PSPad ist solange unbedienbar). Meine biherige Erkenntnis ist recht mager: Während des Vorgangs werden im Win-Task-Manager 4 Dateien angezeigt, die alle den Namen "AutoIt v3 Script (32 Bit)" tragen.


    Mal sehen. Ich wollte es hier nur kurz erwähnen, und wenn ich nicht weiterkomme, gehts in einem eigenen Thread weiter. Bis hierhin komme ich mit deinem Code ein gutes Stück weiter. :)

    Wow, danke für die Info! Ich wollte sowieso schon nach CallBacks frage, die auch BugFix schon erwähnt hat, habe mich dann aber entschlossen, das hinten anzustellen. Ich bin im Moment wirklich begeistert über all die positiven Rückmeldungen, aber auch sehr belastet. Um mich nicht zu überlasten, muss ich Prioritäten setzten. Das funktioniert auch ganz gut. Auch wenn es langsam vorwärts geht, es geht! :thumbup:

    Wenn die Events eingebaut sind kannst du sicherlich richtig loslegen, ...

    Ah, guter Hinweis. Denn dabei fällt mir ein, dass die Events nur dann nutzen, wenn sie eigenständig auslösen. Damit meine ich, dass User-Code ausgeführt wird, wenn das Event gefeuert wird. - Ist schwer auszudrücken - Ich versuchs mal in einfach: Der Extention-Schreiber soll seinen Code einfach in ein Event setzen können, ohne sich um ein Monitoring kümmern müssen.


    Die Gefahr sehe ich schon, dass durch falsch desingneten Code der Editor aufhängt wird. So haben meine derzeitigen Studien der VBScript Monitoring-Möglichkeiten gezeigt, dass jegliches Do-Loop mit Sleep das Hauptprogramm mehr oder weniger zum Erliegen bringt. Ein Versuch mit Sleep 10 brachte zwar eine brauchbare Handhabbarkeit, aber PSPad konnte nicht mehr beendet werden. :(


    Auch das Beispiel von Jan ist einleuchtend: Wenn der Extention-Schreiber z. B. den markierten Text auswertet und ändert, während der Editor-User selbst den markierten Text ändert, kann das in eine Endlos-Schleife laufen.


    Insgesamt verstehe ich die Einwände von Jan. Ein Extention-Schreiber müsste wirklich sehr vorsichtig programmieren, um keinen Schaden zu verursachen.

    Ich finde deine Einschätzung richtig. PSPad bietet zwar Schnittstellen zum Erstellen von User Extentions, aber die können nur per Shortcut genutzt werden. Das Message-Hooking behalte ich mal im Hinterkopf.


    Bleibt zu prüfen, ob der Aufwand in irgendeinem sinnvollen Verhältnis zum Nutzen steht.

    Da hast du grundsätzlich Recht. Ich sehe es aber auf 2 Ebenen: Die grundsätzliche, und die individuelle.


    Zur grundsätzlichen Ebene: Bei mir gibt es keinen Zeit- oder Erfolgsdruck, für mich ist das ein Hobby. Hobbys kosten. In diesem Fall Zeit und Aufwand, den ich gerne investiere und selbst wenns in die Hose geht, genieße ich dennoch die Zeit der Suche und Entwicklung. Das ist fast wie ein guter Krimi. ;) Der Aufwand lohn sich, solange es Spaß macht. Sollte ich Erfolg haben, teile ich das mit anderen, die dann auch was davon haben.


    Zur individuellen Ebene: Hingegen kann ein einzelner Punkt zu große Probleme machen, sodass dadurch die Frustration größer ist, als der Spaß an der Arbeit. In dem Fall schlafe ich eine Nacht darüber und kann dann sehr wohl zum Schluß kommen, diesen Punkt nicht weiterzuverfolgen.


    Visual Studio Code kenne ich, Sublime Text habe ich mir nun angesehen. Beide haben, sagen wir mal, viel Potential. Beide sind nicht mein "Geschmack".


    Bei PSPad war es von Anfang an "Liebe auf den ersten Blick". Ich habe das Programm installiert, cpp-, pas- und bat- Dateien geladen, und sofort waren Highlighter-Features zur Verfügung. Selbst damals als Programmier-Anfänger fand ich mich mit den Menüs auf Anhieb zurecht, und die Einstellungen waren in einem einzelnen, zentralen Einstellungsdialog zu erreichen. Dort konnte ich ohne Programmieraufwand, einfach mit der Maus die Einstellungen setzen, die mir gefiehlen.


    Mit mehr Erfahrung tauchte ich auch tiefer in die Einstellmöglichkeiten ein. So konnte ich (wie gesagt, damals Programmier-Anfänger) recht schnell aut-Dateien (aut = AutoIt2) im Highlighter einbinden, und später dann au3-Dateien. Bis heute konnte ich PSPad eine "AutoIt-Funktionalität" einhauchen, die geschätzt 60 % von SciTE abdeckt. Tendenz steigend.


    ...


    OK, es gibt gute Neuigkeiten. Im PSPad Forum gab es weitere positive Reaktionen. Jan Fiala, der Entwickler von PSPad hat angeboten, Features einzubauen, die wieder ein Stück weiter helfen. Im Moment bin ich ganz aufgeregt, und werde mich erstmal darum kümmern. :klatschen:

    Kein Erfolg mit JScript! Ich krieg nichts ins Laufen. Alles ist mit dem Browser verbunden, den es im Editor nicht gibt. Überall steht "window.setInterval(...)", aber ich weiß nicht, wo ich "window" herbekommen soll. Es ist echt der Hammer, wie bescheuert schwierig es ist, einen Timer in ein VB- oder JScript zu bekommen! Das muss doch möglich sein.


    Aber nicht mehr heut. Gute Nacht! :sleeping:

    Sleep und Co. habe ich abgehakt, weil nach meinem Ermessen ein Script eine Unterfunktion von PSPad darstellt, die das Programm stark beeinflusst. Ein Do-Loop wird somit entweder die CPU merklich auslasten, oder eben per Sleep und Co die Ausführung von PSPad behindern. Es muss ein Timer her. (Ich gucke mal, ob das in JScript nicht doch geht.)

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

    Das wäre nicht tragisch, da die Funktion ja die ganze Zeit laufen soll. (Beim Starten von PSPad die Funktion starten, beim Beenden von PSPad die Funktion beenden.)


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

    Das Script hat eine INIT-Routine, die beim Starten von PSPad aufgerufen wird = sehr praktisch! ;)


    Ich habe jetzt weitere Test mit HTA im VBScript gemacht, aber das gleiche Ergebnis: Der Code wird ausgeführt, erzeugt ein Fenster und blockiert PSPad in sofern, dass PSPad sich nicht schließen lässt, solange das Fenster existiert. - - - Das Fenster wiederum ist die notwendige Vorstufe, um einen Timer zu erzeugen. In HTA ist alles abhängig von einem Fenster. Normalerweise ist es für Browser gedacht. ... Ach, ist das alles kompliziert! :S Warum nicht einfach wie in AutoIt ein _WinAPI_SetTimer aufrufen und fertig.

    _WinAPI_SetTimer

    Du hast Recht, es werden Beispiele mit Python genannt. Das scheinen jedoch nur Überbleibsel aus früheren Versionen zu sein (ich glaube, PSPad wurde ab Version 5.0 komplett neu geschrieben, wg. Unicode usw.). Hier ein Screenshot (Win-Explorer) vom Script-Ordner und den Möglichkeiten für Scripts. Kein Python.


    Kannst du mal den Code dazu posten?

    Hier ein Screenshot.



    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.

    So ist es. Mein (Haupt-)Script ruft die externe Funktion genau aus dem Grund auf, um sich selbst zu pausieren. - Wenn mans so ausspricht, ist's schon eine blöde Idee. 8o Ob das Script nun mithilfe einer internen oder einer externen Funktion pausiert, Einfrieren ist einfrieren.


    Du hast mich motiviert, mehr über VBScript und HTA zu recherchieren. Da waren vielversprechende Sachen dabei. Ich denke nach wie vor es kann nur über einen Timer funktionieren, der alle 200 ms ein Event feuert.

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

    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.


    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.

    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.


    ... 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.

    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.


    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?

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


    JScript hatte ich schon ins Auge gefasst, aber bisher eher verworfen. JScript hat eine Art Verwandschaft zu JavaScript und alles was mit Java zu tun hat, hat bei mir den Beigeschmack, dass es nicht läuft, wenn "dies" fehlt und "das" nicht installiert ist, ect. ... - Auf gut Deutsch, ich hatte bisher Bedenken, da Arbeit rein zu stecken, wenns dann vielleicht nachher gar nicht läuft. VBScript läuft (bei mir) auf Win 10 auf Anhieb, ohne dass ich was machen muss, bei JScript bin ich mir nicht sicher. ==> Infos willkommen! :)


    Wenn JScript eine Option wäre, hätte es den Vorteil, dass ich da schon Timer-Funktionen gesehen habe. Auch das habe ich jedoch verworfen, da auf vielen MS-Websites ein Hinweisbanner erscheint, in dem vom Support-Ende die Rede ist. Auch Wikipedia schreibt, dass JScript vergangen ist, während VBScript noch supported wird (Zukünftige Nutzung von VBScript).


    Bis hierhin ein dickes Danke für die Ideen und Anregungen! Ich tauche jetzt mal wieder in Recherchen ein und suche weiter. Ich habe derzeit HTA im Blick ... mal sehen. ;)

    Zwischenstand


    Eine Schleife funktioniert leider nicht, der Editor friert dadurch ein, oder lässt sich nicht beenden, oder es hat sonstige ungewollte Auswirkungen. Auf jeden Fall ist ein Monitoring im Hintergrund so nicht möglich, und auch kein normales arbeiten im Editor. Dabei ist es egal wie ich die Schleife gestalte, ob mit Sleep, Wait, Timeout, Delay (DOS-Ping), und was es sonst noch so gibt. Auch habe ich Delay-Funktionen in einen anderen Thread ausgelagert, aber in VBScript gibt es kein "DoEvents". Somit hat auch das nichts bewirkt.


    Ich habe mit dem PSPad-Entwickler gesprochen (Forum). Leider unterstützt PSPad keine Events in den Scripts.


    Die einzige, realistische Möglichkeit die ich sehe ist ein echter Timer, der NICHT die Ausführung unterbricht, sondern in Zeitintervallen ein Event feuert. Wenn er das z. B. alle 200 ms macht, ist damit ein durchaus praktikables Monitoring möglich.


    Problem: An dem Timer-Code bin ich seit Tagen dran und habe keine Möglichkeit für VBScript gefunden. Es liegen mir Timer in VB, Delphi, und anderen Sprachen vor, sogar in VBA! Aber keiner lässt sich in VBScript übertragen.


    Ich werde dran bleiben und weiter suchen. Vielleicht hat ja jemand eine Idee oder Tipps und möchte sie teilen? :)

    Die Webseite ist grad down

    Kann ich bestätigen, komme auch nicht drauf. Später wird das bestimmt wieder funktionieren, deshal hier schonmal die Links für Interessierte :


    PSPad - Script Language Reference und PSPad - Actions


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

    Soweit bin ich noch nicht. Klar habe ich das in den Referenzen schon studiert, aber ich meine: Programmiertechnisch brauche ich vorher eine Idee, wie man im VBScript mitbekommt, dass Text markiert wurde. ... Der Rest geht dann wie von selbst. :ironie:


    Wie im Posting #1 geschrieben, brauche ich einen Einstieg um ein Monitoring zu etablieren. Meine ersten Ideen waren eine Do-Loop Schleife, oder ein (API-)Timer. Nun habe ich mir VBSedit installiert und dort z. B. in den Beispielen andere Methoden gefunden. Leider sind die zu hoch für mich.



    Ich werde mal testen, ob ich mit der Do-Loop Schleife arbeiten kann, ohne dass die CPU ausgelastet wird. Wäre halt schön, wenn jemand ein wenig mit VBScript helfen könnte, anstatt dass ich da rumstochere.


    Dir nochmals vielen Dank für deine Tips! :)

    Die Plugins und viele, viele Website-Snippets habe ich mir schon angesehen, leider ohne Erfolg. Für mich sieht das so aus, als ob da etwas "aus dem Nichts kommt" und dann irgendwas macht, wo ich nicht durchblicke. Für mich sind das böhmische Dörfer, deshalb frage ich ja hier. Man hat z. B.


    set obj = NewEditor()

    obj.assignActiveEditor()


    und dann? Man kann im Editor ja obj. eingeben und hoffen, dass man vielleicht einen CallTip bekommt mit den Eigenschaften und Events, aber da passiert nichts. Ist ja klar, ist einfach ein Editor, keine IDE. Aber ich komme so halt nur mühselig weiter. Deshalb ja die Frage, ob mir da jemand helfen kann, alleine komme ich da nicht weiter.


    Dennoch vielen Dank für deine Tipps. :)