【发布时间】:2022-01-09 09:16:57
【问题描述】:
在下面编写的这个程序中,使用来自 user32.dll 的 GetKeyboardLayoutName。 当我使用“美国英语”布局键入第一个符号时,我得到 00000409。这很好。 但是,当我将布局更改为其他内容时,例如“English UK”或“Russian”,GetKeyboardLayoutName 会返回“English USA”的代码 - 00000409。
我对此进行了测试,如果我在“俄语”中输入第一个符号,它会返回 00000419,如果我切换回“美国英语”并输入第二个符号,GetKeyboardLayoutName 仍会返回“俄语”的代码 - 00000419。
using System;
using System.Runtime.InteropServices;
using System.Text;
namespace ConsoleApp2
{
class Program
{
const int KL_NAMELENGTH = 9;
[DllImport("user32.dll")]
private static extern long GetKeyboardLayoutName(StringBuilder pwszKLID);
public static string GetLayoutCode()
{
var name = new StringBuilder(KL_NAMELENGTH);
GetKeyboardLayoutName(name);
return name.ToString();
}
static void Main(string[] args)
{
Console.ReadKey();
var res = GetLayoutCode();
Console.WriteLine("\n" + res);
Console.ReadKey();
res = GetLayoutCode();
Console.WriteLine("\n" + res);
}
}
}
【问题讨论】:
标签: c# winapi dll dllimport user32