2010-06-09 13 views
6

¿Alguien podría aconsejarme cómo cambiar programáticamente la página predeterminada de códigos de Windows XP (estoy haciendo esto desde Delphi)? (Esto sería el equivalente a ir al Panel de control -> Configuración regional -> Idioma para aplicaciones que no son Unicode).¿Cambia programáticamente la página de códigos predeterminada en Windows XP? (de Delphi)

En este caso, quiero cambiar a China (República Popular China) y así escribo para las siguientes cadenas de registro: HKLM \ SYSTEM \ CurrentControlSet \ Control \ NLS \ CodePage \ ACP = 936 MACCP = 10008 OEMCP = 936

(Que es exactamente lo que cambia el menú desplegable de la página de códigos no Unicode en el Panel de control). Debe haber otra configuración que deba cambiar, y preferiría usar una llamada a Win API (si está disponible) en lugar de escribir en el registro.

También intenté configurar HKLM \ SYSTEM \ CurrentControlSet \ Control \ Nls \ Language \ Valor predeterminado = 0804 (Chinese PRC) inútilmente.

No quiero cambiar el 'local' per se ya que esto también va a cambiar el tiempo/ajustes de fecha, separadores, etc., etc.

Esto se debe a que estoy usando una aplicación ANSI que necesita renderizar caracteres chinos, y estoy escribiendo una herramienta para cambiar automáticamente el sistema para mostrar los caracteres (mientras que otros aspectos de la interfaz de usuario permanecen intactos).

Gracias!

Duncan

Respuesta

8

La única vez que esto sería apropiado es si usted está escribiendo una aplicación de tipo kiosco donde nada más se ejecutará en el sistema. Ese cambio afectará a todas las demás aplicaciones en el sistema.

Si sólo tiene que hacer que los personajes y los puede obtener en un WideString puedes hacerlos en versiones anteriores de Delphi llamando a los W versiones de la API de Windows directamente, en lugar de ir a través de los métodos TCanvas. Es decir, llame al DrawTextW o ExtTextOutW en lugar de TCanvas.TextOut y dibujará los caracteres Unicode sin convertirlos a la página de códigos ANSI del sistema.

Una opción más completa es TMS Unicode Component Pack. Admite la creación de aplicaciones habilitadas para Unicode en Delphi 6-2007, y se encarga de llamar a todas las funciones de W. Funciona bien, y solo puede usar TCanvas o las propiedades Caption/Text como normal. la única diferencia es que las propiedades son todas WideStrings en su lugar. Originalmente era el paquete Controles Unicode de TNT, y hay una versión anterior, no compatible de ese disponible here.

Finalmente, puede usar la utilidad AppLocale de Microsoft para cambiar la página de códigos ANSI solo para su aplicación. Hay detalles sobre cómo llamar desde un script por lotes here, un parche para ejecutarlo sin la pantalla nag here, y un clon de línea de comando llamado SBAppLocale. Funciona, pero es un truco, y las otras opciones son mejores a largo plazo.

+0

Craig - Sí, esta es una aplicación de consola donde nuestro software es la única aplicación visible que se ejecuta en la PC (además del shell de Windows). El software de ANSI en cuestión ya se ha escrito y no puedo cambiarlo (para esta situación). Solo estoy escribiendo una utilidad por separado para cambiar la página de códigos de Windows. AppLocale se ve bien.Sigo pensando que la mejor solución es cambiar la página de códigos no unicode, pero no sé cómo hacer esto sin hacer clic manualmente en la opción desplegable del Panel de control -> Configuración regional. De cualquier manera, muchas gracias por la gran cantidad de soluciones! – Duncan

Cuestiones relacionadas