AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sprach ID aus Exe auslesen

Ein Thema von BastiFantasti · begonnen am 16. Jul 2025 · letzter Beitrag vom 22. Jul 2025
Antwort Antwort
BastiFantasti

Registriert seit: 5. Nov 2014
Ort: Baden Württemberg
146 Beiträge
 
Delphi 12 Athens
 
#1

Sprach ID aus Exe auslesen

  Alt 16. Jul 2025, 14:27
Hallo zusammen,

mit den Winapi Aufrufen GetFileVersionInfoSize/GetFileVersionInfo ist es ja möglich sämtliche Informationen aus der Exe auszulesen wie:
- Versionsnummern,
- Firmenname
- Produktname
...
- SpecialBuild
- DebugBuild
usw

Die "Sprache ID" kann man auch auf der Versionsinfo Seite definieren,
nur habe ich bis jetzt keine Möglichkeit gefunden, die "Sprache ID" Eigenschaft später zur Laufzeit auszulesen.

Hat hier jemand eine Idee?

Viele Grüße
Bastian
Bastian
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.759 Beiträge
 
Delphi 12 Athens
 
#2

AW: Sprach ID aus Exe auslesen

  Alt 16. Jul 2025, 14:45
Mit VerQueryValue und "\VarFileInfo\Translation" für den lpSubBlock Parameter kommst du an die Liste der unterstützen Sprachen. Wie üblich ist das aber eine gehörige Frickelei.

Falls du die FireDAC-Sourcen hast findest du ein Beispiel in FDGetVersionInfo (FireDAC.Stan.Utils.pas).
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
KHJ

Registriert seit: 15. Dez 2005
42 Beiträge
 
Delphi 12 Athens
 
#3

AW: Sprach ID aus Exe auslesen

  Alt 16. Jul 2025, 16:14
Vielleicht in JclFileVersion => TJclFileVersionInfo
Siehe auch das Beispielprogramm dazu.
Karlheinz Jansen
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
778 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Sprach ID aus Exe auslesen

  Alt 17. Jul 2025, 14:22
Dies funktioniert bei meiner App. (Copilot )
Delphi-Quellcode:
procedure sprachIDCodepage;
var
  InfoSize: DWORD;
  InfoData: Pointer;
  Translation: Pointer;
  TranslationLen: UINT;
  LangID, CodePage: Word;
begin
  InfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), InfoSize);
  if InfoSize > 0 then
  begin
    GetMem(InfoData, InfoSize);
    try
      if GetFileVersionInfo(PChar(ParamStr(0)), 0, InfoSize, InfoData) then
      begin
        if VerQueryValue(InfoData, '\VarFileInfo\Translation', Translation, TranslationLen) then
        begin
          LangID := MakeWord(PByte(Translation)^, PByte(Integer(Translation) + 1)^);
          CodePage := MakeWord(PByte(Integer(Translation) + 2)^, PByte(Integer(Translation) + 3)^);
          ShowMessage(Format('Sprach-ID: %x, Codepage: %x', [LangID, CodePage]));
        end;
      end;
    finally
      FreeMem(InfoData);
    end;
  end;
end;
Michael Gasser
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.564 Beiträge
 
Delphi 12 Athens
 
#5

AW: Sprach ID aus Exe auslesen

  Alt 17. Jul 2025, 16:29
Und knallt hoffentlich wunderschön, mit 64 Bit.

Wer nach 14 20 Jahren des 64-Bit-Delphi 64-Bit-Windows immernoch Pointer zu Integer castet, dem gehört ordentlich der Popo versohlt.

Delphi-Quellcode:
procedure SprachID2Codepage;
var
  InfoSize: DWORD;
  InfoData: TBytes;
  Translation: Pointer;
  TranslationLen: UINT;
  LangID, CodePage: Word;
begin
  InfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), InfoSize);
  if InfoSize > 0 then
  begin
    SetLength(InfoData, InfoSize);
    if GetFileVersionInfo(PChar(ParamStr(0)), 0, InfoSize, @InfoData[0]) then
    begin
      if VerQueryValue(@InfoData[0], '\VarFileInfo\Translation', Translation, TranslationLen) then
      begin
        LangID := PWord(Translation)^;
        CodePage := PWord(IntPtr(Translation) + 2)^; // oder PByte statt IntPtr/Pointer und schön die Pointer-Arithmetik nutzen :D
        ShowMessage(Format('Sprach-ID: %.4x, Codepage: %.4x', [LangID, CodePage]));
      end;
    end;
  end;
end;
Automatische Speicherverwaltung und Casten in gleich den "richtigen" Typen ... hach, das Leben könnte so einfach sein.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (17. Jul 2025 um 16:31 Uhr)
  Mit Zitat antworten Zitat
BastiFantasti

Registriert seit: 5. Nov 2014
Ort: Baden Württemberg
146 Beiträge
 
Delphi 12 Athens
 
#6

AW: Sprach ID aus Exe auslesen

  Alt 18. Jul 2025, 06:07
Guten Morgen zusammen,

danke für die Rückmeldungen!
Ich werde die genannten Möglichkeiten unter 32 und 64 Bit probieren und berichten.

Viele Grüße
Bastian
Bastian
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
778 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Sprach ID aus Exe auslesen

  Alt 18. Jul 2025, 08:20
Und knallt hoffentlich wunderschön, mit 64 Bit.

Wer nach 14 20 Jahren des 64-Bit-Delphi 64-Bit-Windows immer noch Pointer zu Integer castet, dem gehört ordentlich der Popo versohlt.


Automatische Speicherverwaltung und Casten in gleich den "richtigen" Typen ... hach, das Leben könnte so einfach sein.
Ja du hast Recht - aber ich kann dir versichern, an jenem Tag hat mir das Leben gleich nach dem Aufwachen den Popo fast maximal versohlt und ich wollte mich Stunden später ein wenig ablenken und helfen und habe dabei voll gepennt. Sorry.

Da ich immer wieder solche Tage habe und hier nicht mehr nerven will, melde ich mich aus diesem Forum ab. Herzlichen Dank allen, welche mir irgendwann einmal geholfen haben - und besten Dank den Betreibern des Forums für all Ihre Arbeit.

Alles Gute.
Michael Gasser
  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 16:02 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