Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Dialog/Control String aus einer MUI Datei auslesen (nicht StringTable!) (https://www.delphipraxis.net/176548-dialog-control-string-aus-einer-mui-datei-auslesen-nicht-stringtable.html)

CodeX 13. Sep 2013 00:37

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?

CodeX 25. Sep 2013 15:06

AW: Dialog/Control String aus einer MUI Datei auslesen (nicht StringTable!)
 
Keiner eine Idee? :(

Furtbichler 26. Sep 2013 07:18

AW: Dialog/Control String aus einer MUI Datei auslesen (nicht StringTable!)
 
Ein Beispielprojekt wäre hilfreich.

CodeX 26. Sep 2013 18:24

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:
    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;
Damit lassen sich Strings aus String Tables auslesen, da diese über eine ID ansprechbar sind (siehe angehängten Screenshot 1).
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?

CCRDude 27. Sep 2013 07:42

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)

CodeX 27. Sep 2013 12:21

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:
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
...oder?
Nur, wie komme ich hier jetzt weiter (GetStringFromStream...)?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:42 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