AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Dialog/Control String aus einer MUI Datei auslesen (nicht StringTable!)
Thema durchsuchen
Ansicht
Themen-Optionen

Dialog/Control String aus einer MUI Datei auslesen (nicht StringTable!)

Offene Frage von "CodeX"
Ein Thema von CodeX · begonnen am 13. Sep 2013 · letzter Beitrag vom 27. Sep 2013
Antwort Antwort
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#1

Dialog/Control String aus einer MUI Datei auslesen (nicht StringTable!)

  Alt 13. Sep 2013, 00:37
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?
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 25. Sep 2013, 15:06
Keiner eine Idee?
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#3

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

  Alt 26. Sep 2013, 07:18
Ein Beispielprojekt wäre hilfreich.
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#4

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

  Alt 26. Sep 2013, 18:24
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?
Miniaturansicht angehängter Grafiken
stringtable.png   dialog.png  
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
675 Beiträge
 
FreePascal / Lazarus
 
#5

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

  Alt 27. Sep 2013, 07:42
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)
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#6

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

  Alt 27. Sep 2013, 12:21
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: 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...)?
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:08 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