Autor |
Beitrag |
DerNetteNachbar
      
Beiträge: 224
|
Verfasst: Do 18.12.08 13:27
Hallo erstmal, ich würde ganz gerne in einer DLL den Aufrufer bestimmen, sprich die Anwendung die meine DLL aufgerufen hat. Gibt es dafür bereits eine API Funktion oder muss man sich da was basteln?
MfG
Nachbar
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 18.12.08 14:00
Natürlich gibt es die, GetModuleFileNameEx:
msdn.microsoft.com/e...ms683198(VS.85).aspx
|
|
DerNetteNachbar 
      
Beiträge: 224
|
Verfasst: Do 18.12.08 14:11
Ich würde aber ganz gerne das Handle der Anwendung bekommen, bzw. das Handle vom TOP Fenster der Anwendung
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 18.12.08 14:27
Dann ist vermutlich das hier das richtige, GetCurrentProcessId:
msdn.microsoft.com/e...ms683180(VS.85).aspx
Für welches Programm soll die DLL denn sein? Ich meine, normalerweise werden doch alle nötigen Informationen direkt an ein Plugin übergeben (wenn es ein Plugin für ein anderes Programm ist). Da scheint die Schnittstelle zwischen Anwendung und DLL nicht so ganz passend zu sein, aber wenn das nicht dein eigenes Programm ist, für das die DLL ist, dann kannst du da natürlich nichts dran ändern.
|
|
DerNetteNachbar 
      
Beiträge: 224
|
Verfasst: Do 18.12.08 15:19
Und wie komme ich von der ProzessID jetzet auf das Handle des TOP Fensters.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 18.12.08 15:22
|
|
DerNetteNachbar 
      
Beiträge: 224
|
Verfasst: Do 18.12.08 15:25
Ich dachte da gibt es eine globale Funktion dafür. Das was in den Thread besprochen wird ist doch Quark.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 18.12.08 15:36
Wenn es dein eigenes Programm ist, ist die saubere Lösung ja auch über eine exportierte Prozedur die DLL zu initialisieren. Dann kannst du aus der Anwendung alle nötigen Daten übergeben und du sparst dir diese ganzen Verrenkungen.
Wenn es nicht dein eigenes Programm ist, dann musst du dich eben verrenken.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 18.12.08 15:40
Das sag ich doch die ganze Zeit.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 18.12.08 15:51
Stimmt, ich sehs schon, im anderen Thread. Naja, wenns ihm Spaß macht sich das Leben schwer zu machen... 
|
|
DerNetteNachbar 
      
Beiträge: 224
|
Verfasst: Do 18.12.08 16:25
Hey Leute dank euch für euere Vorschläge es mir leichter zumachen. Da ich aber fest entschlossen bin es auf die Art(API Funktionen) zu machen um mich auch in die API Welt einzuarbeiten werde ich diesen Konzept weiterhin durchziehen.
Ich hoffe mir oder irgenteinem von euch kommt ein Geistesblitz^.
MfG
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 18.12.08 16:28
Z.B. mit GetWindowThreadProcessId, aber das hatten wir doch neulich erst.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 18.12.08 16:33
DeddyH hat folgendes geschrieben : | Z.B. mit GetWindowThreadProcessId, aber das hatten wir doch neulich erst. |
Das wäre ja genau die umgekehrte Richtung, er braucht ja das Fenster. Und ich kenne keine direkte Möglichkeit es zu bekommen. Wie es geht steht ja in dem verlinkten Thread. Ich glaube nicht, dass es einfacher geht.
Wie sollte es auch einfacher gehen, bei einem Delphi-Programm hat man das versteckte Application-Fenster, bei anderen Programmen nicht, usw., deshalb sehe ich keine andere Möglichkeit als alle Fenster des Prozesses durchzugehen und anzuschauen.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 18.12.08 16:45
Genau so habe ich das im anderen Thread ja auch gemacht. Ein "Durchgehen" wird sich nicht umgehen lassen, ob man das von dieser oder von der anderen Seite angeht (3 * "gehen" in einem Satz *gg*).
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 18.12.08 17:07
DerNetteNachbar hat folgendes geschrieben : | Ich dachte da gibt es eine globale Funktion dafür. |
Und um dazu noch etwas zu sagen:
Warum sollte es etwas dafür geben? Du willst es auf diese Weise machen, das ist aber nicht die normale Vorgehensweise. Wenn du das so machen willst, ist das ja deine Sache, aber warum sollte es dafür etwas fertiges geben?
Das ist wie wenn du den Trampelpfad nimmst statt eines befestigten Wegs und dich dann ärgerst, wenn es keine Brücke über einen Bach gibt. 
|
|
DerNetteNachbar 
      
Beiträge: 224
|
Verfasst: Do 18.12.08 17:15
Alles klar Leute, ich habs gemerkt das es zu nichts führt. Nur das Problem immernoch ich bekomme doe falsche Process ID aus der DLL. Nämlich ihre eigene und nicht die der aufrufenden Application. Versucht hab ich es mit :
Delphi-Quelltext 1: 2:
| GetWindowThreadProcessID GetCurrentProcessID |
MfG
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 18.12.08 17:20
Richtig, die DLL hat ihr eigenes Prozesshandle. Du könntest nun über Umwege versuchen, über FindWindow und GetWindowThreadProcessId das Prozesshandle Deiner Anwendung herauszufinden, bei evtl. mehreren Instanzen oder Fenstern mit gleichem Titel und gleichem Classname kann das aber arg danebengehen. U.a. aus diesen Gründen wollen wir Dir ja nahelegen, das auf anderem Wege zu machen.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 18.12.08 17:22
Es geht, ich hatte die Doku falsch verstanden was GetCurrentProcessID anging  . Richtig sollte es mit Delphi-Quelltext 1:
| MyHandle := GetModuleHandle(nil); | gehen, wenn ich das richtig verstehe:
|
|
DerNetteNachbar 
      
Beiträge: 224
|
Verfasst: Do 18.12.08 17:28
Daraufhin wird mir irgentein komisches Handle gesenden was ich gar nicht mit WinSpy ansehen kann. Komisch
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 18.12.08 17:30
Das ist ja auch ein Prozess- und kein Fensterhandle.
|
|