Программно изменить кодовую страницу по умолчанию в Windows XP? (из Дельфи) - PullRequest
6 голосов
/ 09 июня 2010

Может кто-нибудь посоветовать, как программно изменить кодовую страницу Windows XP по умолчанию (я делаю это из Delphi)? (Это будет эквивалентно переходу в Панель управления -> Региональные настройки -> Язык для приложений, не поддерживающих Юникод).

В этом случае я хочу переключиться на китайский (КНР) и пишу в следующие строки реестра: HKLM \ SYSTEM \ CurrentControlSet \ Control \ Nls \ CodePage \ ACP = 936 MACCP = 10008 OEMCP = 936

(Это именно то, что делает изменение выпадающего списка не-Unicode в панели управления). Должен быть другой параметр, который мне нужно изменить - и я бы предпочел использовать вызов Win API (если доступен), а не записывать в реестр сам.

Я также пытался установить HKLM \ SYSTEM \ CurrentControlSet \ Control \ NLS \ Language \ По умолчанию = 0804 (китайский КНР) безрезультатно.

Я не хочу менять «локаль» как таковую, поскольку это также изменит настройки времени / даты, разделители и т. Д. И т. Д.

Это потому, что я использую приложение ANSI, которое должно отображать китайские символы, и я пишу инструмент для автоматического переключения системного отображения символов (оставляя другие аспекты пользовательского интерфейса без изменений).

Спасибо!

Duncan

1 Ответ

8 голосов
/ 09 июня 2010

Единственный раз, когда это будет уместно, это если вы пишете приложение типа киоска, в котором больше ничего не будет работать в системе.Это изменение повлияет на любое другое приложение в системе.

Если вам просто нужно отобразить символы и получить их в WideString, вы можете отобразить их в более старых версиях Delphi, вызвав W * 1004.* версии API-интерфейсов Windows напрямую, а не через методы TCanvas.То есть, звоните DrawTextW или ExtTextOutW вместо TCanvas.TextOut, и он будет рисовать символы Юникода без преобразования их в кодовую страницу системы ANSI.

Более полным вариантом является Компонент Unicode TMSпакет .Он поддерживает создание приложений с поддержкой Unicode в Delphi 6-2007 и обрабатывает вызов всех функций W .Это работает хорошо, и вы можете просто использовать свойства TCanvas или Caption / Text, как обычно .;единственное отличие состоит в том, что все свойства - это WideStrings.Первоначально это был пакет TNT Unicode Controls, и здесь имеется более старая неподдерживаемая версия здесь .

Наконец, вы можете использовать утилиту Microsoft AppLocale , чтобы изменитьКодовая страница ANSI для вашего приложения.Есть подробности о том, как вызывать его из пакетного скрипта здесь , патча для запуска его без экрана здесь и клона командной строки с именем SBAppLocale .Это работает, но это взлом, а другие варианты лучше долгосрочные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...