![]() |
Dialog/Control String aus einer MUI Datei auslesen (nicht StringTable!)
Ich kann problemlos String-Resourcen aus EXE-/DLL-/... Dateien per LoadString auslesen, wenn diese dort in einer StringTable gespeichert sind.
Wie gehe ich aber vor, wenn der String in einer MUI-Datei als Dialog/Control Text vorliegt? Mit dem Tool "Resource Hacker" kann ich in die MUI-Datei reinschauen und sehe dort, was ich brauche. Aber wie komme ich nun aus meinem Delphi-Programm dran? |
AW: Dialog/Control String aus einer MUI Datei auslesen (nicht StringTable!)
Keiner eine Idee? :(
|
AW: Dialog/Control String aus einer MUI Datei auslesen (nicht StringTable!)
Ein Beispielprojekt wäre hilfreich.
|
AW: Dialog/Control String aus einer MUI Datei auslesen (nicht StringTable!)
Liste der Anhänge anzeigen (Anzahl: 2)
Hm, ich weiß nicht, in wie weit das in dem Fall nützlich ist. Aber bitte, hier ist der Kern-Teil, den ich zum Auslesen aus DLLs verwende:
Delphi-Quellcode:
Damit lassen sich Strings aus String Tables auslesen, da diese über eine ID ansprechbar sind (siehe angehängten Screenshot 1).
hLib := LoadLibraryEx(PChar(lib), 0, LOAD_LIBRARY_AS_DATAFILE);
if LongBool(hLib) then begin try SetString(Result, buf, LoadString(hLib, id, @buf[0], SizeOf(buf))); finally FreeLibrary(hLib); end; end; Das Problem an den anderen String ist, dass diese als Dialog/Control-Strings enthalten sind und für mich augenscheinlich keine ID haben und entsprechend nicht mit dieser Funktion ausgelesen werden können. Im zweiten angehängten Screenshot sieht man über den Resource Hacker jedoch, dass diese Strings ebenfalls vorhanden sind. Wie man jedoch drankommen könnte, ist mir schleierhaft. :? Irgendeine Idee? |
AW: Dialog/Control String aus einer MUI Datei auslesen (nicht StringTable!)
Willst Du "die" lokalisierte Version auslesen? Dann brauchst Du "nur" die Resource aus der DLL zur MUI auslesen und das MUI-System Dir die übersetzte Version liefern lassen. Oder ist das Problem, dass Du unabhängig von der gewollten Lokalisation MUI "zweckentfremdet" auslesen willst? Oder ist das Problem, dass Du nicht weißt, wie Du Dialog-Resourcen ausliest? Oder wie Du sie interpretierst? Da ist mir die Fragestellung noch etwas unklar.
(PS: MUI-Dateien mit Hilfe von Delphi zu erstellen ist nicht trivial, reine Resourcen-DLLs macht Delphi nicht) |
AW: Dialog/Control String aus einer MUI Datei auslesen (nicht StringTable!)
Das triffts am ehesten:
> Oder ist das Problem, dass Du nicht weißt, wie Du Dialog-Resourcen ausliest? Wie man String Tabellen ausliest, weiß ich, hilft mir hier aber wohl nicht weiter. Ich möchte den lokalen String, der für ein bestimmtes Control in einem bestimmten Dialog angezeigt wird. Gewünschtes Finalresulatat wäre sowas:
Delphi-Quellcode:
GetDialogControlString(dll:String; dialogId:Integer; controlId:Integer) : String;
Nachdem ich mir die halbe Nacht damit um die Ohren geschlagen habe, denke ich, dass es in diese Richtung geht:
Delphi-Quellcode:
...oder?
h := LoadLibraryEx('condlg32.dll',0,LOAD_LIBRARY_AS_DATAFILE);
rs:= TResourceStream.CreateFromID(h, 1536, RT_DIALOG); // Resource Hacker: 1536 DIALOGEX 36, 24, 277, 134 //Pseudocode: s := GetStringFromStream(rs,1038); // Resource Hacker: CONTROL "&Hilfe", 1038, ... //s müsste an der Stelle "&Hilfe" beinhalten Nur, wie komme ich hier jetzt weiter (GetStringFromStream...)? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 Uhr. |
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