können dll´s das aufrufende programm erkennen?
können dll´s das aufrufende programm erkennen?
ich bin neu hier, komme von gfa32 und ich will mich an eine dll-programmierung trauen.
die dll wird von verschiedenen programmen aufgerufen und ich möchte gerne, daß
die dll zB den handle des aufrufenden programmes erkennt, gibt es diese möglichkeit?
vielen dank für antwort!
christian böttgenbach
die dll wird von verschiedenen programmen aufgerufen und ich möchte gerne, daß
die dll zB den handle des aufrufenden programmes erkennt, gibt es diese möglichkeit?
vielen dank für antwort!
christian böttgenbach
- HeX0R
- Beiträge: 3070
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Re: können dll´s das aufrufende programm erkennen?
Hiermit z.B. bekommst du den Dateinamen inklusive Pfad der Host-Datei:
Einfach in deine DLL pappen...
Code: Alles auswählen
ProcedureDLL AttachProcess(Instance)
Protected a$
a$ = Space(#MAX_PATH)
GetModuleFileName_(Instance, @a$, #MAX_PATH)
MessageRequester("FileName", "Filename of Host: " + a$)
EndProcedure
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
Re: können dll´s das aufrufende programm erkennen?
Danke Hexor!
Ich war nicht deutlich genug, es geht mir um die Erkennung des aufrufenden Programmes,
ohne daß dafür ein Parameter übertragen werden muß.
Noch konkreter: Hier entsteht ein Programmierspiel, bei dem die Programme eine DLL aufrufen.
Ich möchte nun unterscheiden können, welches Programm die DLL aufruft, ohne daß dafür
bei jedem Befehl ein _Instance oder sonstiger Parameter mitgeliefert werden muß, sonst kommt
noch ein Schlaumeier daher und schickt von einer Fake-instance Befehle
Außerdem würde ich
gerne vermeiden, daß bei jedem Befehl ein Parameter mehr mit übertragen werden muß.
Kennt jemand die Lösung, wie ich bei einem DLL aufruf den aufrufenden Prozeß erkennen kann?
Christian Böttgenbach
Ich war nicht deutlich genug, es geht mir um die Erkennung des aufrufenden Programmes,
ohne daß dafür ein Parameter übertragen werden muß.
Noch konkreter: Hier entsteht ein Programmierspiel, bei dem die Programme eine DLL aufrufen.
Ich möchte nun unterscheiden können, welches Programm die DLL aufruft, ohne daß dafür
bei jedem Befehl ein _Instance oder sonstiger Parameter mitgeliefert werden muß, sonst kommt
noch ein Schlaumeier daher und schickt von einer Fake-instance Befehle
gerne vermeiden, daß bei jedem Befehl ein Parameter mehr mit übertragen werden muß.
Kennt jemand die Lösung, wie ich bei einem DLL aufruf den aufrufenden Prozeß erkennen kann?
Christian Böttgenbach
Re: können dll´s das aufrufende programm erkennen?
Code: Alles auswählen
a$ = Space(#MAX_PATH)
GetModuleFileName_(0, @a$, #MAX_PATH)
MessageRequester("FileName", "Filename of Host: " + a$)Rings hat geschrieben:ziert sich nich beim zitieren
Re: können dll´s das aufrufende programm erkennen?
Habe grad kein PB, aber soweit ich weiß ist ProcedureDLL AttachProcess(Instance) eine Procedure die automatisch beim laden der DLL aufgerufen wird, ohne das das program selber dazu etwas übertragen oder aufrufen muss.Mastermar hat geschrieben:
Ich war nicht deutlich genug, es geht mir um die Erkennung des aufrufenden Programmes,
ohne daß dafür ein Parameter übertragen werden muß.
Noch konkreter: Hier entsteht ein Programmierspiel, bei dem die Programme eine DLL aufrufen.
Ich möchte nun unterscheiden können, welches Programm die DLL aufruft, ohne daß dafür
bei jedem Befehl ein _Instance oder sonstiger Parameter mitgeliefert werden muß, sonst kommt
noch ein Schlaumeier daher und schickt von einer Fake-instance BefehleAußerdem würde ich
gerne vermeiden, daß bei jedem Befehl ein Parameter mehr mit übertragen werden muß.
aber laut Rings gehts ja auch mit 0, anstatt instance als modulhandle
Re: können dll´s das aufrufende programm erkennen?
Danke, Rings!
jetzt bin ich dran mit testen, die Idee ist genau was ich suchte!
Christian Böttgenbach
jetzt bin ich dran mit testen, die Idee ist genau was ich suchte!
Christian Böttgenbach
Re: können dll´s das aufrufende programm erkennen?
Ich habe es ausprobiert, Rings Beispiel funktioniert und liefert mit die Namen der aufrufenden Prozesse einwandfrei.
Ich dachte dann, wenn ich es mit getmodulehandle() versuche, könnte ich das handle des Prozesses auch
bekommen, aber das funktioniert nicht, ich erhalte immer nur denselben Wert
Also habe ich wohl etwas falsch gemacht?
Es entsteht nämlich hier das Problem, daß auch dasselbe Programm in mehreren instanzen die dll aufrufen könnte und daher der Name nicht eindeutig ist. Für die vorgesehene Anwendung ist das sogar recht wahrscheinlich.
Vielen Dank also und falls jemand noch eine Idee zur Verbesserung (Prozeßerkennung) hätte, gerne!
Mastermar
Ich dachte dann, wenn ich es mit getmodulehandle() versuche, könnte ich das handle des Prozesses auch
bekommen, aber das funktioniert nicht, ich erhalte immer nur denselben Wert
Code: Alles auswählen
i=GetModuleHandle_(NULL)Es entsteht nämlich hier das Problem, daß auch dasselbe Programm in mehreren instanzen die dll aufrufen könnte und daher der Name nicht eindeutig ist. Für die vorgesehene Anwendung ist das sogar recht wahrscheinlich.
Vielen Dank also und falls jemand noch eine Idee zur Verbesserung (Prozeßerkennung) hätte, gerne!
Mastermar
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: können dll´s das aufrufende programm erkennen?
dann lies dir Alex' post nochmal durch, das erklärt dir, warum die Lösung von Hexor dir schon helfen sollte.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: können dll´s das aufrufende programm erkennen?
Wie HeX0r sagte, einfach reinpappen und gut. Hab mal ne kleine Änderung reingemacht:
Jetzt haste, ohne Aufrufen irgendeiner Funktion, den Namen in der Variablen
HostFileName verfügbar.
Code: Alles auswählen
ProcedureDLL AttachProcess(Instance)
Global HostFileName.s
HostFileName = Space(#MAX_PATH)
GetModuleFileName_(Instance, @HostFileName, #MAX_PATH)
EndProcedure
HostFileName verfügbar.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: können dll´s das aufrufende programm erkennen?
yo, jetzt bau ihm noch das GetModuleHandle mit rein, dann isser happy.
ich schätz mal, einfach zusätzlich

ich schätz mal, einfach zusätzlich
Code: Alles auswählen
Global HostHandle.i
HostHandle = GetModuleHandle_(Instance)Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.