C#: Get current keyboard layout\input language
2021-07-09 07:10
标签:lte useful eth ica catch input exception pointer func 原文 https://yal.cc/csharp-get-current-keyboard-layout/ On some occasions, you may want to get a "global" input language - that is, the keyboard layout used by the current foreground window\application\whatever. Basically, simulating the behaviour of the language panel on Windows. The common use cases are on-screen keyboards, fullscreen applications, and widgets. While I wasn‘t able to find a premade function that get this particular thing during my searches, it turned out not to be too hard to assemble: So, first, we import a couple of functions from user32.dll: The actual function then proceeds to combine these in a straightforward manner to obtain the keyboard layout ID for the current active window. Then a System.Globalization.CultureInfo is created based on ID, permitting to conveniently get the language name in various formats and a handful of other useful information. If there‘s no foreground window available, GetKeyboardLayout will return 0 (which is not a valid ID for CultureInfo), and the catch-block will return En-US as a fallback language (alternatively, you can return null and handle that separately). And that‘s it. Have fun! C#: Get current keyboard layout\input language 标签:lte useful eth ica catch input exception pointer func 原文地址:https://www.cnblogs.com/lonelyxmas/p/9717466.html[DllImport("user32.dll")] static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")] static extern uint GetWindowThreadProcessId(IntPtr hwnd, IntPtr proccess);
[DllImport("user32.dll")] static extern IntPtr GetKeyboardLayout(uint thread);
public CultureInfo GetCurrentKeyboardLayout() {
try {
IntPtr foregroundWindow = GetForegroundWindow();
uint foregroundProcess = GetWindowThreadProcessId(foregroundWindow, IntPtr.Zero);
int keyboardLayout = GetKeyboardLayout(foregroundProcess).ToInt32() & 0xFFFF;
return new CultureInfo(keyboardLayout);
} catch (Exception _) {
return new CultureInfo(1033); // Assume English if something went wrong.
}
}
文章标题:C#: Get current keyboard layout\input language
文章链接:http://soscw.com/index.php/essay/102675.html