AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Windows Codepages - Kernel32.dll - EnumSystemCodePages
Thema durchsuchen
Ansicht
Themen-Optionen

Windows Codepages - Kernel32.dll - EnumSystemCodePages

Ein Thema von arcticwolf · begonnen am 21. Jun 2023 · letzter Beitrag vom 28. Jun 2023
 
Benutzerbild von arcticwolf
arcticwolf

Registriert seit: 3. Aug 2021
Ort: Erfurt
41 Beiträge
 
Delphi 11 Alexandria
 
#1

Windows Codepages - Kernel32.dll - EnumSystemCodePages

  Alt 21. Jun 2023, 16:17
Hallo,

ich verwende folgenden Code um die Codepages aufzulisten, die Windows installiert hat.

Delphi-Quellcode:
Var CodePageNumbers : TArray<Cardinal>;

procedure GetCodepageList(Var CodePageList:TStringList);

  function GetCPName(CP:Cardinal) : String;
  var CpInfoEx : TCPInfoEx;
  begin
    Result := '';
    if IsValidCodePage(Cp) then
    begin
      GetCPInfoEx(Cp, 0, CpInfoEx);
      Result := Format('%s', [CpInfoEx.CodePageName]);
      Result := ReplaceStr(Result,CP.ToString+' ','').TrimLeft;
      Result := Copy(Result,2,length(Result)-2);
    end;
  end;

  function EnumCodePagesProc(CodePage:PWideChar) : Cardinal; stdcall;
  Var Cp : cardinal;
  begin
    Result := 0;
    if (CodePage<>Nil) then
    begin
      if (Length(Codepage)>0) then
      begin
        Cp := StrToIntDef(CodePage,0);
        if (cp>0) then
        begin
          SetLength(CodePageNumbers,Length(CodePageNumbers)+1);
          CodePageNumbers[High(CodePageNumbers)] := CP;
          Result := 1;
        end;
      end;
    end;
  end;

var I : Integer;
begin
  SetLength(CodePageNumbers,0);
  CodePageList.Clear;
  EnumSystemCodePagesW(@EnumCodePagesProc, CP_SUPPORTED);
  for I := 0 to High(CodePageNumbers) do
  begin
    if CodePageNumbers[i]>0 then
    begin
      CodepageList.Add(IntToString(CodePageNumbers[i],5) + ': '
        + GetCPName(CodePageNumbers[i]));
    end;
  end;
  SetLength(CodePageNumbers,0);
end;
Das funktioniert und Win32 problemlos, wenn ich jedoch auf Zielplattform Win64 umstelle kommt in der EnumCodePagesProc nichts mehr an. Ein Microsoft Bug, oder stelle ich mich nur zu blöd an? Oder gibt es dafür eine elegantere Lösung, ohne EnumSystemCodePages / EnumSystemCodePagesA / EnumSystemCodePagesW?
Wolfgang
  Mit Zitat antworten Zitat
 


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 06:03 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