AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Lokalisierung: Name der geladenen Resource-DLL herausfinden?
Thema durchsuchen
Ansicht
Themen-Optionen

Lokalisierung: Name der geladenen Resource-DLL herausfinden?

Ein Thema von Deep-Sea · begonnen am 12. Aug 2008 · letzter Beitrag vom 13. Aug 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#1

Lokalisierung: Name der geladenen Resource-DLL herausfinden?

  Alt 12. Aug 2008, 12:01
Hallöchen erstmal an euch alle ^^
Ich weiß, ich komme auch nur angeschleimt, wenn ich Hilfe brauche - böse von mir

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.
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


Vielen Danke schon mal ...
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin

  Alt 12. Aug 2008, 19:48
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
Daniel Marschall
  Mit Zitat antworten Zitat
helgew

Registriert seit: 30. Jul 2008
125 Beiträge
 
#3

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin

  Alt 12. Aug 2008, 20:10
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.
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin

  Alt 12. Aug 2008, 20:16
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 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...
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
helgew

Registriert seit: 30. Jul 2008
125 Beiträge
 
#5

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin

  Alt 12. Aug 2008, 21:15
Woah wenn ich schon wieder C-Code übersetzen muss, da könnte ich Bröckchen lachen...


Ich gebs auf. Hinweis siehe bisschen weiter unten..
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin

  Alt 12. Aug 2008, 21:19
Weder HModules noch HWnds sind Handles von Kernel-Objekten. Ich bezweifle daher, dass sie in der Liste auftauchen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
helgew

Registriert seit: 30. Jul 2008
125 Beiträge
 
#7

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin

  Alt 12. Aug 2008, 21:23
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
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin

  Alt 12. Aug 2008, 21:28
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
helgew

Registriert seit: 30. Jul 2008
125 Beiträge
 
#9

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin

  Alt 12. Aug 2008, 22:36
Boah... Wald vor lauter Bäumen nicht gesehen.. psAPI hat da was feines:

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

wenn das klappt, müsstest du doch auch die FileNames bekommen
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"
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin

  Alt 12. Aug 2008, 22:50
Zitat von helgew:
Boah... Wald vor lauter Bäumen nicht gesehen..[...]

psAPI.EnumProcessModules(hProcess: THandle; lphModule: LPDWORD; cb: DWORD;
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?
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz