Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Lokalisierung: Name der geladenen Resource-DLL herausfinden? (https://www.delphipraxis.net/118655-lokalisierung-name-der-geladenen-resource-dll-herausfinden.html)

Deep-Sea 12. Aug 2008 11:01


Lokalisierung: Name der geladenen Resource-DLL herausfinden?
 
Hallöchen erstmal an euch alle ^^
Ich weiß, ich komme auch nur angeschleimt, wenn ich Hilfe brauche - böse von mir :mrgreen:

Ich habe folgendes Problem:

Ich will herausfinden, welche Resource-DLL Delphi geladen hat - genauer eigentlich nur welche Sprache. Jedoch behält die Funktion LoadResourceModule - die ya für das laden verantwortlich ist - das natürlich für sich. :roll:
Nun kann ich zwar mit FindResourceHInstance(HInstance) mir das Handle auf die Resource-DLL holen, was soweit ya auch klappt, aber GetModuleName bzw. GetModuleFileName bringen mir für das Handle einen leeren String zurück (was an der LoadLibraryEx Option LOAD_LIBRARY_AS_DATAFILE liegt).

Nun geistern mir noch verschiedene, mehr oder weniger unschöne und fehleranfällige Möglichkeiten im Kopf rum. Und bevor ich die nutze, wollte ich mal euren Rat einholen :lol:


Vielen Danke schon mal ...

blackdrake 12. Aug 2008 18:48

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin
 
Ich habe bisher immer Sprachpakete mit INI-Dateien gehandelt. Mit Resource-DLLs habe ich noch nicht gearbeitet. Scheinbar stellen dir diese DLLs resourcestrings zur Verfügung, oder? Wäre das der Fall, dann könntest du doch einfach einen Resourcestring/Spracheintrag "language" abfragen, der dann die Sprache des Sprachpakets (German, English) beinhaltet. Vielleicht stellst du auch ein Feld mit Angabe des Übersetzers und der Revision zur Verfügung. Hilft dir der Ansatz etwas?

Gruß
blackdrake

helgew 12. Aug 2008 19:10

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin
 
Oh da klemm ich doch mal dran. Ich denke du kannst mit NtQuerySystemInformation(...) die SYSTEM_HANDLE_INFORMATION gewinnen, das liefert dir ein Array aus records mit Informationen zu aktiven handles, von denen du dann die richtigen ( mit der gewünschten ProcessID ) rausfischen kannst und darauf prüfen, ob sie Module-handles sind und damit den Modulname bekommen.

OldGrumpy 12. Aug 2008 19:16

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin
 
Warum verankerst Du nicht in der Resourcen-DLL eine Resource die den Namen der DLL trägt? :)

//Edith sagt: Heute ist nicht mein Tag, der Vorschlag steht oben schon mal :)

Zitat:

Zitat von helgew
Oh da klemm ich doch mal dran. Ich denke du kannst mit NtQuerySystemInformation(...) die SYSTEM_HANDLE_INFORMATION gewinnen, das liefert dir ein Array aus records mit Informationen zu aktiven handles, von denen du dann die richtigen ( mit der gewünschten ProcessID ) rausfischen kannst und darauf prüfen, ob sie Module-handles sind und damit den Modulname bekommen.

Das wäre doch nichts weiter als auf Umwegen das gleiche was schon im Ursprungspost als nicht funktionierend beschrieben wurde...

helgew 12. Aug 2008 20:15

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin
 
Woah wenn ich schon wieder C-Code übersetzen muss, da könnte ich Bröckchen lachen...


Ich gebs auf. Hinweis siehe bisschen weiter unten..

Apollonius 12. Aug 2008 20:19

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin
 
Weder HModules noch HWnds sind Handles von Kernel-Objekten. Ich bezweifle daher, dass sie in der Liste auftauchen.

helgew 12. Aug 2008 20:23

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin
 
Dann muss man sich mal näher mit psAPI und Toolhelp32 auseinandersetzen. Stimmt, es kann sein, dass die so aufgezählten Handles nur die GDI-Handles sind

Apollonius 12. Aug 2008 20:28

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin
 
:roll: GDI-Handles sind auch keine Handles von Kernel-Objekten. Es gibt drei Klassen von Handles: User, GDI und Kernel. HModules sind keine echten Handles sondern Zeiger.

helgew 12. Aug 2008 21:36

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin
 
Boah... Wald vor lauter Bäumen nicht gesehen.. psAPI hat da was feines:

Delphi-Quellcode:
psAPI.EnumProcessModules(hProcess: THandle; lphModule: LPDWORD; cb: DWORD;
:wall:

wenn das klappt, müsstest du doch auch die FileNames bekommen :gruebel:
ok, msdn meint : "The EnumProcessModules function does not retrieve handles for modules that were loaded with the LOAD_LIBRARY_AS_DATAFILE flag." Es kann also sein, dass Windows gerade die für dich interessanten Infos in die Tonne haut, auf nimmerwiedersehn ;)

Eine Möglichkeit, dann etwas herauszufinden wären ShellNotify Infos, man kann sich ja benachrichtigen lassen, welche Dateien geöffnet und geladen werden. Dann hast du eine Art "debugging" ;)

OldGrumpy 12. Aug 2008 21:50

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin
 
Zitat:

Zitat von helgew
Boah... Wald vor lauter Bäumen nicht gesehen..[...]

Delphi-Quellcode:
psAPI.EnumProcessModules(hProcess: THandle; lphModule: LPDWORD; cb: DWORD;

Zitat:

Zitat von Deep-Sea
[...]aber GetModuleName bzw. GetModuleFileName bringen mir für das Handle einen leeren String zurück (was an der LoadLibraryEx Option LOAD_LIBRARY_AS_DATAFILE liegt).

[Hervorhebung von mir]

Liest Du eigentlich auch mal was im Thread so geschrieben wird? Verifizierst Du Deine Vorschläge eigentlich mal?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:27 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz