如果在 Ubuntu 系统上我想查看不同锁键的状态,我可以轻松运行xset q
。
但是,我在 Windows 系统上找不到类似的东西。我试过 Powershell,但它似乎只告诉你CapsLock
via[System.Console]::NumberLock
和NumberLock
via [System.Console]::NumberLock
。
我正在寻找的是功能键(fn)的锁定状态。
答案1
如果你在控制台中运行此命令:
$Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
...然后按任意键,您将获得一个可以推断的返回值。
$Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
# Presses the F1 Key
# Results
<#
VirtualKeyCode Character ControlKeyState KeyDown
-------------- --------- --------------- -------
112 NumLockOn, ScrollLockOn True
#>
我没有'fn 键' 在我的键盘上,但是,使用上面的其他特殊键,如“PrtScn 或 Pause 或 MS 人体工学键盘顶部的其他特殊键”,不返回任何内容。
更新-根据您所述的用例 您可以获取功能键的状态。我在一台有 fn(fnlk)的笔记本电脑上执行了此操作。
注意响应
# using just the F1 key fnlk not enabled
$Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
# Results
<#
VirtualKeyCode Character ControlKeyState KeyDown
-------------- --------- --------------- -------
173 NumLockOn, EnhancedKey True
#>
# using just the F1 key fnlk enabled - Note the difference
$Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
# Results
<#
VirtualKeyCode Character ControlKeyState KeyDown
-------------- --------- --------------- -------
255 NumLockOn, EnhancedKey True
#>
$Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
# Results
<#
VirtualKeyCode Character ControlKeyState KeyDown
-------------- --------- --------------- -------
112 NumLockOn True
#>
# using fn+F1 - Not fn lock
$Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
# Results
<#
VirtualKeyCode Character ControlKeyState KeyDown
-------------- --------- --------------- -------
112 NumLockOn True
#>
# So, this shows, just look at the ControlKeyState and see if the EnhancedKey is set.
If (($Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")).ControlKeyState -match 'EnhancedKey'){'fn key not used or fn lock not enabled'}