es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué GetKeyboardLayoutName devuelve el mismo nombre después de un cambio de distribución?

En el programa escrito a continuación, se utiliza GetKeyboardLayoutName de user32.dll.
Cuando escribo el primer símbolo utilizando la distribución “Inglés USA”, recibo 00000409. Esto está bien.
Pero cuando cambio a otra distribución, como “Inglés UK” o “Ruso”, GetKeyboardLayoutName devuelve el código para “Inglés USA” – 00000409.

Lo probé y si ingreso el primer símbolo en “Ruso”, devuelve 00000419 y si vuelvo a cambiar a “Inglés USA” e ingreso un segundo símbolo, GetKeyboardLayoutName todavía devuelve el código para “Ruso” – 00000419.

“`
usando el sistema;
usando System.Runtime.InteropServices;
usando System.Text;

namespace ConsoleApp2
{

clase Programa
{

    const int KL_NAMELENGTH = 9;

    [DllImport("user32.dll")]
    privado estático externo a largo GetKeyboardLayoutName(StringBuilder pwszKLID);
    público estático string GetLayoutCode()
    {
        var name = new StringBuilder(KL_NAMELENGTH);
        GetKeyboardLayoutName(name);

        volver name.ToString();
    }

    estático vacío Principal(cadena[] args)
    {
        Console.ReadKey();
        var res = GetLayoutCode();
        Console.WriteLine("\n" + res);

        Console.ReadKey();
        res = GetLayoutCode();
        Console.WriteLine("\n" + res);
    }
}

}

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Explicación de un programa que utiliza GetKeyboardLayoutName de user32.dll

    El programa descrito anteriormente está escrito en C# y utiliza varias bibliotecas como System, System.Runtime.InteropServices y System.Text. La función principal del programa es utilizar la función GetKeyboardLayoutName de user32.dll para devolver el código de la disposición del teclado actual.

    La función GetKeyboardLayoutName recupera el nombre de la disposición del teclado actual como una cadena. El parámetro de esta función es un objeto StringBuilder que contiene el nombre de la disposición. La función devuelve un valor long que indica el éxito o el fracaso.

    Cuando se ejecuta el programa, espera a que el usuario presione cualquier tecla. Después de que se presiona la tecla, el programa llama a la función GetLayoutCode que recupera y devuelve el código de la disposición del teclado actual. Luego, se imprime este código en la consola.

    Si el usuario cambia la disposición del teclado y presiona otra tecla, el programa busca el código de la disposición actualizada utilizando la función GetLayoutCode y lo imprime nuevamente en la consola.

    Sin embargo, el problema con este programa es que siempre devuelve el código para la disposición del teclado “Inglés EE. UU.”, incluso si los usuarios cambian a otra disposición, como “Inglés Reino Unido” o “Ruso”. Por ejemplo, si el usuario escribe el primer símbolo utilizando la disposición “Rusa”, devolverá 00000419. Pero si el usuario cambia la disposición de vuelta a “Inglés EE. UU.” y escribe un segundo símbolo, GetKeyboardLayoutName todavía devuelve el código para “Ruso”: 00000419. Este comportamiento indica una falla en la implementación o uso de la función.

Comments are closed.