Werkzeug-Wünsche für PureBasic/SpiderBasic

Du brauchst Grafiken, gute Programme oder Leute die dir helfen? Frag hier.
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Werkzeug-Wünsche für PureBasic/SpiderBasic

Beitrag von Kurzer »

:o 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. :shock:
"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 2023: 56 Jahre.
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Werkzeug-Wünsche für PureBasic/SpiderBasic

Beitrag von RSBasic »

Die ScintillaGadgets pro Tab liegen alle im selben Subwindow. Die werden, je nachdem welcher Tab gerade ausgewählt wurde, von PB ein- oder ausgeblendet:
Bild

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)
(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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Werkzeug-Wünsche für PureBasic/SpiderBasic

Beitrag von Kurzer »

Ich habe das gerade mal manuell mit WinSpy nachgestellt.

Das ist der krasseste PB IDE Hack, den ich bisher gesehen habe. :o :allright:
Wenn man die Styles WS_THICKFRAME und WS_BORDER noch setzt, hat man sogar einen wunderbaren Resize-Anfasser unten rechts am Gadget.

Bild

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 2023: 56 Jahre.
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Werkzeug-Wünsche für PureBasic/SpiderBasic

Beitrag von RSBasic »

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:

Code: Alles auswählen

hThread = CreateRemoteThread_(hProcess, #Null, 0, *lpCodeToInject, pbModule, #Null, #Null)
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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Werkzeug-Wünsche für PureBasic/SpiderBasic

Beitrag von Josh »

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.
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Werkzeug-Wünsche für PureBasic/SpiderBasic

Beitrag von RSBasic »

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. :)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten