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 Non-Unicode-Codepage für einzelnes Programm setzen (https://www.delphipraxis.net/169127-non-unicode-codepage-fuer-einzelnes-programm-setzen.html)

jaenicke 30. Jun 2012 19:24

Non-Unicode-Codepage für einzelnes Programm setzen
 
Hallo,

es geht um ein Programm, das Ansizeichen benutzt. Dementsprechend zeigt dieses diese nur an, wenn auch die entsprechende Codepage in den Regionseinstellungen für Programme eingestellt ist, die nicht unicodefähig sind.

Nun gibt es das Tool AppLocale von Microsoft, das dies für ein Programm verändert, wenn man dieses über das Tool startet:
http://www.microsoft.com/en-us/downl....aspx?id=13209

Die Frage ist nun wie das funktioniert. Wie macht das Tool das? Das könnte man dann ja sicher auch direkt in das entsprechende Programm einbauen. (Mit den Entwicklern stehe ich in Kontakt.)
Ich habe z.B. mit SetThreadLocale experimentiert, aber so wirklich zu funktionieren schien das nicht.

Hintergrund:
Es handelt sich um gesetzliche Vorschriften sowie um für ein internationales Firmennetzwerk notwendige Vorgaben, die dazu führen, dass sich die Voraussetzungen nicht ändern lassen. Sprich das Programm darf nur diese Codepage benutzen (und kein Unicode) und auf dem PC muss aufgrund mehrerer anderer Programme und Vorgaben eine andere Codepage eingestellt sein.

Zusätzliche Info:
Es geht um Windows XP und höher.

Vielen Dank schon einmal,
schönen Gruß,
Sebastian

himitsu 30. Jun 2012 20:24

AW: Non-Unicode-Codepage für einzelnes Programm setzen
 
Im Prnzip bräuchtest du also die Umkehrfunktion von GetACP

Eventuell hilft ja MSDN-Library durchsuchenSetThreadLocale und MSDN-Library durchsuchenSetLocaleInfo.
Oder du stellst im gesamten System die Standard-CodePage um.

http://superuser.com/questions/23981...g-in-windows-7



Was das Programm macht, daß müßte man mal nachsehn ... eventuell setzt es die CodePage oder hoockt Funktionen wie GetACP.



Für Datteien kenn ich da nur
MSDN-Library durchsuchenAreFileApisANSI, MSDN-Library durchsuchenSetFileApisToANSI und MSDN-Library durchsuchenSetFileApisToOEM, womit man die CodePages für Dateioperationen umstellen kann, zwischen ANSI (Windows/VCL) und DOS (Konsole).

jaenicke 30. Jun 2012 20:33

AW: Non-Unicode-Codepage für einzelnes Programm setzen
 
Zitat:

Zitat von himitsu (Beitrag 1173056)
Eventuell hilft ja MSDN-Library durchsuchenSetThreadLocale

Das hatte ich ja geschrieben, dass ich das damit schon versucht hatte. Ich habe die Codepage damit vor dem Erstellen der GUI angegeben, aber sobald ich es auf einem PC mit einer anderen Codepage im System kopiert habe ging es nicht mehr. aber ich schaue mir das noch einmal genauer an.

Zitat:

Zitat von himitsu (Beitrag 1173056)

Soweit ich die Dokumentation verstehe kann man das damit nur für den Benutzer insgesamt setzen.
Zitat:

This function writes to the registry, where it sets values that are associated with a particular user instead of a particular application. These registry values affect the behavior of other applications run by the user.


Zitat:

Zitat von himitsu (Beitrag 1173056)
Oder du stellst im gesamten System die Standard-CodePage um.

Wie schon geschrieben ist das absolut nicht möglich.

Zitat:

Zitat von himitsu (Beitrag 1173056)
Für Datteien kenn ich da nur
MSDN-Library durchsuchenAreFileApisANSI, MSDN-Library durchsuchenSetFileApisToANSI und MSDN-Library durchsuchenSetFileApisToOEM, womit man die CodePages für Dateioperationen umstellen kann, zwischen ANSI (Windows/VCL) und DOS (Konsole).

Das ist auch interessant, aber hier geht es um die Anzeige dieser Zeichen, also die Oberfläche selbst.

sx2008 1. Jul 2012 06:00

AW: Non-Unicode-Codepage für einzelnes Programm setzen
 
In einer Sandbox (z.B. Sandboxie.com) könnte das Programm in einer isolierten Umgebung mit geänderter Codepage laufen.
Das nur als Idee, falls alle anderen Stricke reisen...

jaenicke 1. Jul 2012 08:18

AW: Non-Unicode-Codepage für einzelnes Programm setzen
 
Dann würden wir wohl eher auf virtuelle Maschinen setzen. Aber da es mit dem Tool ja funktioniert, muss es ja irgendwie gehen und notfalls eben direkt damit. :wink:


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