我正在使用pykeylogger并希望通过添加有关所选当前键盘布局的信息来扩展它(现在您从日志中知道假设US qwerty
按下了哪些按钮)。
对于Windows系统,它看起来像:
def get_locale(self):
if os.name == 'nt':
w = user32.GetForegroundWindow()
tid = user32.GetWindowThreadProcessId(w, 0)
return hex(user32.GetKeyboardLayout(tid))
获取布局的十六进制代码(如0x409409),这对我来说很好,因为我基本上想要区分一个布局。
如果你给我一个posix(例如ubuntu)系统的解决方案,我将不胜感激。
答案 0 :(得分:1)
setxkbmap -print
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+gb+gr(simple):2+inet(evdev)+terminate(ctrl_alt_bksp)" };
xkb_geometry { include "pc(pc105)" };
};
xkb_keycodes {include“evdev + aliases( qwerty )”};
xkb_symbols {include“pc + gb + gr (简单):2 + inet(evdev)+ terminate(ctrl_alt_bksp)“};
答案 1 :(得分:1)
我发现以下内容对我有用:
get_locale
为import os
if os.name == 'posix':
from subprocess import check_output
elif os.name == 'nt':
import win32api, win32con, win32process
from ctypes import windll
user32 = windll.user32
def get_locale(self):
if os.name == 'nt':
w = user32.GetForegroundWindow()
tid = user32.GetWindowThreadProcessId(w, 0)
return hex(user32.GetKeyboardLayout(tid))
elif os.name == 'posix':
return check_output(["xkblayout-state", "print", "%s"])
现在get_locale
在Ubuntu中返回当前语言环境的优秀字母代码(即qwerty的'us')。
是的,每个操作系统的输出都不同,我将来肯定会重写这个功能。但是现在我已经实现了能够在Windows和unix机器上检测键盘布局的目标。
另一种选择是使用xset
实用程序,例如xset -q | grep -A 0 'LED' | cut -c59-67
(详见this question),但我认为这有点可疑,特别是如果你有两个以上的布局(就像我做的那样) ) - 除默认布局外,滚动LED均亮起。