Mikhail V
Mikhail V

Reputation: 1521

get keyboard layout of active window (win 10)

I use this script to track the keyboard layout on Win 7, it works ok:

getactiveKL() {
    active_hwnd := WinExist("A")
    threadID := dllCall("GetWindowThreadProcessId", "uint", active_hwnd)
    code := dllCall("GetKeyboardLayout", "uint", threadID, "uint") & 0xFFFF
    return code
}
; 1049 - RU (hex: 419)
; 1033 - EN (hex: 409)

loop {
    sleep, 600
    KL := getactiveKL()
    tooltip, %KL%
}

But it dooes not work on win 10. Namely it works only once - if I set the layout to RU, and then run this script, it detects correctly, but when I switch the layout - nothing changes.
Do you know how to make it work on windows 10?

Upvotes: 0

Views: 582

Answers (1)

Mikhail V
Mikhail V

Reputation: 1521

The problem was in this line:

threadID := dllCall("GetWindowThreadProcessId", "uint", active_hwnd)

It should be:

threadID := dllCall("GetWindowThreadProcessId", "uint", active_hwnd, "uint", 0)

There are many examples in the web with different spelling of this dll call, so the latter works on windows 10 correctly.

Upvotes: 1

Related Questions