Sehe ich das richtig, dass du dem Scintilla Gadget aus dem TAB der IDE ein neues parent Window verpasst und es daher als zweites Gadget in einem anderen TAB erscheint?
Wenn ja, wäre das ein echt heftiger hack.
Werkzeug-Wünsche für PureBasic/SpiderBasic
Re: Werkzeug-Wünsche für PureBasic/SpiderBasic
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
Re: Werkzeug-Wünsche für PureBasic/SpiderBasic
Die ScintillaGadgets pro Tab liegen alle im selben Subwindow. Die werden, je nachdem welcher Tab gerade ausgewählt wurde, von PB ein- oder ausgeblendet:
Ich habe daher ein ScintillaGadget aus dem letzten Tab genommen, sichtbar gemacht und die Position und Größe geändert, so dass sich das ScintillaGadget genau unter dem anderen ScintillaGadget befindet. Das funktioniert.
Einen neuen Tab kann ich auch erstellen:
(0 = MenuItem "Datei > Neu")
Wenn ich den Tab schließe, dann wird das ScintillaGadget von PB freigegeben. Es bringt auch nichts, wenn ich das ScintillaGadget vor dem Schließen des Tabs in mein Werkzeug-Fenster mit SetParent_() verschiebe und nach dem Schließen wieder ins PB-Fenster verschiebe. Der Tab muss also immer offen sein.
Eine andere Möglichkeit habe ich bis jetzt nicht gefunden. Weiter komme ich aber auch nicht.
Schade, dass es keine WinAPI-Duplicate-Funktion gibt.
Ich habe daher ein ScintillaGadget aus dem letzten Tab genommen, sichtbar gemacht und die Position und Größe geändert, so dass sich das ScintillaGadget genau unter dem anderen ScintillaGadget befindet. Das funktioniert.
Einen neuen Tab kann ich auch erstellen:
Code: Alles auswählen
SendMessage_(PBHandle, #WM_COMMAND, 0, 0)
Wenn ich den Tab schließe, dann wird das ScintillaGadget von PB freigegeben. Es bringt auch nichts, wenn ich das ScintillaGadget vor dem Schließen des Tabs in mein Werkzeug-Fenster mit SetParent_() verschiebe und nach dem Schließen wieder ins PB-Fenster verschiebe. Der Tab muss also immer offen sein.
Eine andere Möglichkeit habe ich bis jetzt nicht gefunden. Weiter komme ich aber auch nicht.
Schade, dass es keine WinAPI-Duplicate-Funktion gibt.
Re: Werkzeug-Wünsche für PureBasic/SpiderBasic
Ich habe das gerade mal manuell mit WinSpy nachgestellt.
Das ist der krasseste PB IDE Hack, den ich bisher gesehen habe.
Wenn man die Styles WS_THICKFRAME und WS_BORDER noch setzt, hat man sogar einen wunderbaren Resize-Anfasser unten rechts am Gadget.
Stellt sich nur die Frage, ob man PB damit nicht zu sehr durcheinander bringt.
Das ist der krasseste PB IDE Hack, den ich bisher gesehen habe.
Wenn man die Styles WS_THICKFRAME und WS_BORDER noch setzt, hat man sogar einen wunderbaren Resize-Anfasser unten rechts am Gadget.
Stellt sich nur die Frage, ob man PB damit nicht zu sehr durcheinander bringt.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
Re: Werkzeug-Wünsche für PureBasic/SpiderBasic
Ich habe eine andere Idee gefunden. Es ist theoretisch möglich, eine Prozedure in einen fremden Prozess zu injizieren: https://www.purebasic.fr/english/viewto ... 22#p335022
Dann hätte ich die Möglichkeit, in der PB-Instanz ein ScintillaGadget zu erstellen und bin im selben Speicher.
Nur funktionieren leider beide Beispielcodes nicht mehr. Das Problem ist folgendes:
hThread ist leider 0.
Mal schauen, ob sich jemand meldet und eine Lösung postet. Das wäre, wenn es so funktioniert, wie ich mir das vorstelle, der letzte Schritt zur Fertigstellung.
Dann hätte ich die Möglichkeit, in der PB-Instanz ein ScintillaGadget zu erstellen und bin im selben Speicher.
Nur funktionieren leider beide Beispielcodes nicht mehr. Das Problem ist folgendes:
Code: Alles auswählen
hThread = CreateRemoteThread_(hProcess, #Null, 0, *lpCodeToInject, pbModule, #Null, #Null)
Mal schauen, ob sich jemand meldet und eine Lösung postet. Das wäre, wenn es so funktioniert, wie ich mir das vorstelle, der letzte Schritt zur Fertigstellung.
Re: Werkzeug-Wünsche für PureBasic/SpiderBasic
Ich habe mich mit Codeinjection vor langer Zeit auch mal beschäftigt, leider überhaupt keine Ahnung mehr. Vielleicht kannst damit was anfangen:
viewtopic.php?f=6&t=26496&hilit=ProcedureDLL
Noch was anderes. Notepad++ macht das ja etwas anders. Da werden im zweiten Splitterfenster die Tabs nochmals angezeigt, so dass ich auch Code aus einer anderen Datei mit anzeigen kann. Wenn ich jetzt auswählen könnte, welcher Code im zweiten Splitterfenster angezeigt werden sollte, wär das auch nicht schlecht. Muss ja nicht durch Tabs sein.
viewtopic.php?f=6&t=26496&hilit=ProcedureDLL
Noch was anderes. Notepad++ macht das ja etwas anders. Da werden im zweiten Splitterfenster die Tabs nochmals angezeigt, so dass ich auch Code aus einer anderen Datei mit anzeigen kann. Wenn ich jetzt auswählen könnte, welcher Code im zweiten Splitterfenster angezeigt werden sollte, wär das auch nicht schlecht. Muss ja nicht durch Tabs sein.
Re: Werkzeug-Wünsche für PureBasic/SpiderBasic
Hi Josh,
sorry für die späte Antwort. Danke vielmals für deinen Code. Auf jenden Fall eine gute Vorlage.
Ich habe mich aber aus mehreren Gründen anders entscheiden:
1. Beim Injizieren einer DLL-Datei in einen fremden Prozess ist die Wahrscheinlich ziemlich hoch, dass einige Antivirenprogramme sehr empfindlich reagieren, aus gutem Grund.
2. Wenn ich nach dem Injizieren meiner DLL-Datei ein neues ScintillaGadget erstelle, dann muss ich auch alle Scintilla-Features von PB hinzufügen, so dass es genauso aussieht wie der originale PB-Editor und sich genauso verhält. (Syntax Highlighting, Faltmarkierungen, Abstände, ...)
3. Beim Testen habe ich Fehler und Abstürze festgestellt.
Aus den oben genannten Gründen werde ich den Vorschlag von #NULL umsetzen bzw. habe ich inzwischen umgesetzt.
Der einzige kleine Nachteil ist, dass ein neuer Tab stets für mein Werkzeug reserviert ist, aber alle anderen Nachteile, die ich beim Injizieren und Neuerstellen eines ScintillaGadgets hätte, habe ich nicht.
Danke nochmal für deine Hilfe.
sorry für die späte Antwort. Danke vielmals für deinen Code. Auf jenden Fall eine gute Vorlage.
Ich habe mich aber aus mehreren Gründen anders entscheiden:
1. Beim Injizieren einer DLL-Datei in einen fremden Prozess ist die Wahrscheinlich ziemlich hoch, dass einige Antivirenprogramme sehr empfindlich reagieren, aus gutem Grund.
2. Wenn ich nach dem Injizieren meiner DLL-Datei ein neues ScintillaGadget erstelle, dann muss ich auch alle Scintilla-Features von PB hinzufügen, so dass es genauso aussieht wie der originale PB-Editor und sich genauso verhält. (Syntax Highlighting, Faltmarkierungen, Abstände, ...)
3. Beim Testen habe ich Fehler und Abstürze festgestellt.
Aus den oben genannten Gründen werde ich den Vorschlag von #NULL umsetzen bzw. habe ich inzwischen umgesetzt.
Der einzige kleine Nachteil ist, dass ein neuer Tab stets für mein Werkzeug reserviert ist, aber alle anderen Nachteile, die ich beim Injizieren und Neuerstellen eines ScintillaGadgets hätte, habe ich nicht.
Danke nochmal für deine Hilfe.