Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Kommando chcp mit CreateProcess ausführen

  Alt 4. Apr 2016, 16:26
Zitat:
Außerdem liefert mir GetAcp ein Ergebnis von 1252.
Was erwartet man da auch Anderes?

MSDN-Library durchsuchenGetACP Retrieves the current Windows ANSI code page identifier for the operating system.
Und nicht von deinem Programm/Thread. (GetThreadLocale)



CreateProcess führt nur Programme und Skripte aus.

CHCP ist aber kein Programm, sondern ein "Befehl", den NUR das Konsolenprogramm CMD.exe kennt.
https://technet.microsoft.com/en-us/.../bb490874.aspx
Also mußt due die CMD.exe aufrufen und der sagen, dass sie den Befehl ausführen soll.



GUI-Anwendungen werden von Windows mit der CodePage für ANSI initialisiert
und Konsolenanwendungen mit der OEM-Codepage,
weswegen du in deiner VCL-Anwendung (GUI) natürlich was Anderes bekommst.

Man kann das zwar umschalten,
MSDN-Library durchsuchenSetFileApisToOEM MSDN-Library durchsuchenSetFileApisToANSI MSDN-Library durchsuchenAreFileApisANSI
aber man kann auch einfach nur das Gewünschte benutzen/abfragen.
MSDN-Library durchsuchenCP_ACP MSDN-Library durchsuchenGetACP
MSDN-Library durchsuchenCP_OEMCP MSDN-Library durchsuchenGetOEMCP

Und 850 ist die OEM-CodePage. (DOS/Konsole)
https://de.wikipedia.org/wiki/Codepage_850

Delphi-Quellcode:
type
  OEMString = type AnsiString(CP_OEMCP);

var
  IchBinOEM: OEMString;

IchBinOEM := 'Hallöle';
WriteLn(IchBinOEM);
Oder du kannst WideCharToMultiByte verwenden und benutzt die OEM-CodePage als Ziel.
$2B or not $2B

Geändert von himitsu ( 4. Apr 2016 um 17:18 Uhr)
  Mit Zitat antworten Zitat