Как сделать текущую раскладку клавиатуры более понятной в Windows 10?
Я говорю по-французски и по-английски, и я очень часто переключаюсь с одной клавиатуры (французский канадский) на другую (английский США). Когда я пишу электронные письма на французском языке, французская клавиатура становится необходимой для акцентов (например, é, è, à, ç и т. Д.), В то время как использование Vim/ написание кода гораздо более практично с макетом в США.
Проблема в том, что очень часто я начинаю печатать, понимаю, что использую неправильную раскладку клавиатуры, а затем мне приходится удалять и вводить заново то, что я делал. Это особенно актуально для Vim, где я могу быстро уничтожить документ несколькими нажатиями клавиш.
Есть ли способ сделать текущую раскладку клавиатуры намного более очевидной, чем маленький индикатор в правом нижнем углу? Существуют ли в Windows настройки или программное обеспечение, которое я мог бы установить, что могло бы помочь?
Примеры того, что я имею в виду, когда использую определенную раскладку клавиатуры:
- Цветная рамка экрана
- Постоянное наложение (модальное, всплывающее)
- Изменение цвета панели задач
- И т.п.
Другие предложения, которые помогут уменьшить потерянное время, используя неправильную раскладку клавиатуры, приветствуются.
2 ответа
Это альтернатива, которая работает для меня до сих пор; Используя AutoHotkey, я динамически переключаюсь на предпочитаемый язык для конкретного программного обеспечения (например, Vim использует en-CA, а Slack использует fr-CA).
Это не ответ на мой конкретный вопрос, но если это сработало для меня, это может сработать и для других людей:
https://gist.github.com/christianrondeau/00d7cd5848f33e029f00ce2b6b935ab9
; How to use:
; 1. Install AuthotKey: https://www.autohotkey.com
; 2. Save this script in `My Documents`
; 3. Create a shortcut in the Startup folder (`Win`+`R`, `shell:startup`)
; 4. Change the configurations below
; 5. Start and test the script!
; Configuration
; Cultures can be fetched from here: https://msdn.microsoft.com/en-us/library/windows/desktop/dd318693(v=vs.85).aspx
; They must be set twice in the language ID;
; en-US: 0x04090409
; fr-CA: 0x0C0C0C0C
global DefaultLanguage := "fr-CA"
global DefaultLanguageIndentifier := "0x0C0C0C0C"
global SecondaryLanguage := "en-US"
global SecondaryLanguageIndentifier := "0x04090409"
global SecondaryLanguageWindowTitles := "VIM,Visual Studio"
; And the code itself (you should not have to change this)
Gui +LastFound
hWnd := WinExist()
DllCall( "RegisterShellHookWindow", UInt,Hwnd )
MsgNum := DllCall( "RegisterWindowMessage", Str,"SHELLHOOK" )
OnMessage( MsgNum, "ShellMessage" )
Return
ShellMessage( wParam,lParam )
{
WinGetTitle, title, ahk_id %lParam%
; 4 is HSHELL_WINDOWACTIVATED, 32772 is HSHELL_RUDEAPPACTIVATED
If (wParam=4 || wParam=32772) {
If title contains %SecondaryLanguageWindowTitles%
SetKeyboard( title, SecondaryLanguage )
Else
SetKeyboard( title, DefaultLanguage )
}
}
SetKeyboard( title, culture )
{
; 0x50 is WM_INPUTLANGCHANGEREQUEST.
Try
{
If (culture = SecondaryLanguage)
{
PostMessage, 0x50, 0, %SecondaryLanguageIndentifier%,, A
; To debug:
; ToolTip, Using secondary language %SecondaryLanguage%
; Sleep 1000
; ToolTip
}
Else If (culture = DefaultLanguage)
{
PostMessage, 0x50, 0, %DefaultLanguageIndentifier%,, A
; To debug:
; ToolTip, Using default language %DefaultLanguage%
; Sleep 1000
; ToolTip
}
Else
{
; To debug:
; ToolTip, Unknown culture: %culture%
; Sleep 1000
; ToolTip
}
}
Catch e
{
ToolTip, Could not switch to %culture%`n%e%
Sleep 1000
ToolTip
}
}
Вот мое простое решение проблемы AHK. Это жестко закодировано в кодах компоновки EN и RU (RU - 1049 (hex: 419) и EN - 1033 (hex: 409)).
Алгоритм прост: если активное окно имеет макет RU, то сверху появляется красный квадрат. Если это макет EN, то он исчезает. Таким образом, я всегда вижу, если макет не EN, поэтому я могу избежать неправильного набора.
Скрипт просматривает активное окно каждые 600 миллисекунд (см. sleep
параметр внутри цикла для его настройки), чтобы он работал в масштабе всей системы и правильно отображал его, если отдельные приложения имеют разный набор макетов. Проверено на Windows 7 и 10.
Чтобы отрегулировать размер и положение см. Строку Gui, Show, W100 H100 x980 y500
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
; SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
; get Layout of active window
getactiveKL() {
active_hwnd := WinExist("A")
threadID := dllCall("GetWindowThreadProcessId", "uint", active_hwnd, "uint", 0)
code := dllCall("GetKeyboardLayout", "uint", threadID, "uint") & 0xFFFF
return code
}
; 1049 - RU (hex: 419)
; 1033 - EN (hex: 409)
OSD_bg = AA0000
Gui, +AlwaysOnTop +Disabled -SysMenu -Caption +Owner
; Gui, Add, Text, , HELLO
Gui, Color, %OSD_bg%
KL := getactiveKL() ; scan KL once
Gui, Show, W100 H100 x980 y500, NoActivate
; if US then hide
if (KL = 1033) {
Gui, Cancel
}
loop {
KL_prev := KL
sleep, 600
KL := getactiveKL()
if (KL = KL_prev) {
continue
}
if (KL = 1049) {
Gui, Show, NoActivate
}
if (KL = 1033) {
Gui, Cancel
}
}
+esc::exitapp ;press Shift-Escape to close script