Delphi-PRAXiS
Seite 2 von 2     12   

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)

helgew 12. Aug 2008 21:53

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin
 
@OldGrumpy ja schande über mich... ich mach das nebenher, daher editiere ich meine Beiträge im Laufe der Zeit auch ein paarmal, siehe oben. ;)

Um meine Verpeiltheit wieder gut zu machen hier nun ein Vorschlag, um das ausgängliche Problem des Threadstellers zu illustrieren:
Delphi-Quellcode:
procedure EnumModulesOf(pid : Cardinal);
var
  hProcess: Cardinal;
  Modules: Array[0..65535] of hModule;
  cbNeeded:Cardinal;
  i: integer;
begin
  hProcess := OpenProcess(PROCESS_ALL_ACCESS,false,pid);
  if hProcess <> 0 then
  begin
    EnumProcessModules(hProcess,@Modules,65536,cbNeeded);
    if 65536 < cbNeeded div SizeOf(HModule) then writeln('Too many modules loaded. Not all modules will be displayed.');
    for i := 1 to cbNeeded div SizeOf(HModule)-1  do
    begin
      if _GetModuleFileName(Modules[i]) <> '' then
        writeln('  ',inttohex(Modules[i],8),' : ',_GetModuleFileName(Modules[i]))
      else
        writeln('  ',inttohex(Modules[i],8),' : unknown');
    end;
    CloseHandle(hProcess);
  end
  else
    writeln('could not open process #',pid);
  readln;
end;
in der Tat gibt es viele Module, die keinen Dateinamen haben, obwohl sie aufgelistet wurden

OldGrumpy 12. Aug 2008 22:00

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin
 
Joah, ganz dolle. Natürlich kann man das Problem fast beliebig komplex lösen, aber wozu das? Oben im Thread gibts den ganz schlichten Vorschlag den Dateinamen innerhalb der Resourcen-DLL zu verankern, so steht er praktisch automatisch zur Verfügung. Warum dann noch unglaubliche Klimmzüge veranstalten? Weil man es kann? :roll:

helgew 12. Aug 2008 22:45

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin
 
Mir ist auch nicht ganz klar, wass der Threadersteller mit
Delphi-Quellcode:
Ich will herausfinden, welche Resource-DLL Delphi geladen hat - genauer eigentlich nur welche Sprache.
meint. Ich hab dazu folgendes gefunden.
Damit kämen wir dann auch zu dem Vorschlag von OldGrumpy, einen Namensstring oder eine TellMyName() Funktion zu exportieren und das Problem wäre gelöst, oder?

marabu 13. Aug 2008 07:27

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin
 
Hallo Chris,

Zitat:

Zitat von Deep-Sea
... Ich will herausfinden, welche Resource-DLL Delphi geladen hat - genauer eigentlich nur welche Sprache. ...

LoadLibraryEx() mit der Option LOAD_LIBRARY_AS_DATAFILE erzeugt effektiv einen memory mapped file. Du kannst dir den Namen also so besorgen:

Delphi-Quellcode:
function ResFileName(mmf: HMODULE; var fn: TFileName): Boolean;
var
  modName: array [0..MAX_PATH] of Char;
  n: Integer;
begin
  n := GetMappedFileName(GetCurrentProcess, Pointer(mmf), modName, SizeOf (modName));
  Result := n > 0;
  if Result then
    SetString(fn, modName, n);
end;
Freundliche Grüße

Deep-Sea 13. Aug 2008 07:34

Re: Lokalisierung: Name der geladenen Resource-DLL herausfin
 
Ich habs! :bounce1: [edit] Aber marabu war schneller :mrgreen: thx [/edit]
Die Lösung liegt in der Funktion GetMappedFileName (zu finden in der PsAPI).
Nett von MS, immer zu schreiben wie es nicht geht, aber nicht ein mal zu erwähnen wie es geht ...



Zitat:

Zitat von helgew
Mir ist auch nicht ganz klar, wass der Threadersteller mit
Delphi-Quellcode:
Ich will herausfinden, welche Resource-DLL Delphi geladen hat - genauer eigentlich nur welche Sprache.
meint. Ich hab dazu folgendes gefunden.
Damit kämen wir dann auch zu dem Vorschlag von OldGrumpy, einen Namensstring oder eine TellMyName() Funktion zu exportieren und das Problem wäre gelöst, oder?

Ich will nun einmal wissen, unter welcher Sprache meine Applikation läuft. Dies brauche ich für andere zu lokalisierende Dinge, die nicht in der Resource-DLL enthalten sind (Ordner mit Texten drin z.B.). :wink:
Die Funktion von deinem Link setzt zwar welche Sprache Delphi nutzen sollte, dass heißt aber noch lange nicht, dass er das auch tut. Existiert z.B. die angegebene Datei nicht oder kann nicht geladen werden, sucht er nach Dateien die der aktuellen "Thread-Sprache" (GetThreadLocale) entsprechen. Welche Datei nun letztendlich geladen ist, weiß man so nie.


Zu den Posts mit "String mit der Sprache in die Resource-DLL packen": Ya, sowas hatte ich auch schon im Kopf :-D ...



Nun ja, so klappt es ya doch noch wie gewünscht, danke an euch für eure Hilfe :P


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:04 Uhr.
Seite 2 von 2     12   

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