问题:是否可以监视某个按键或某个特定按键组合,例如:CTRL++ ALT?K当按键被按下时,Windows 可以执行某些代码或采取行动。
我探索过创建批处理脚本的快捷方式,然后设置它使用快捷键组合,但当不在桌面上时它不起作用。
我需要它工作:
- 即使其他应用程序在前台,或者控制台在后台等等。
- 在控制台窗口之外,如果其他应用程序窗口在前台处于活动状态,那么即使控制台在后台。
Windows 是否有一种简单的方法可以使用 PowerShell 或批处理来执行此操作,而无需使用特殊工具或超复杂的代码?
答案1
从一些逻辑开始检测按键帖子中,这里有一个稍微修改过的脚本,当执行时它会监视Alt
++Ctrl
键K
的按下。
此示例采取的操作只是将输出以绿色写入屏幕,但您可以将操作 [ Write-Host
] 更改为按下这些键时需要触发的其他操作。
它将触发动作...
- 当你按下
K
键时组合键中的最后一个。
- 始终按住
Alt
+Ctrl
(或Ctrl
+Alt
)首先,在按下K
—尽管[或]同时按下所有三个似乎相当持续地触发。- 每次按下按键时只有在释放之前用于引发动作。
- 按下触发操作所需的所有键后,松开,不要按住任何一个键。
其他值得注意的事项...
- 变量
$key
值将是“关键”,你将按顺序最后按下的组合键(如上所述K
),如果您发现它比同时按下所有三个键更有效。- 变量
$key2
和$key3
值永远是你按下并按住,然后按下最后一个$key
Alt
如上文+所述,Ctrl
如果您发现它比同时按下三个键更有效。
PowerShell 脚本
$key = [Byte][Char]'K' ## Letter
$key2 = '0x11' ## Ctrl
$key3 = '0x12' ## Alt
$Signature = @'
[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
public static extern short GetAsyncKeyState(int virtualKeyCode);
'@
Add-Type -MemberDefinition $Signature -Name Keyboard -Namespace PsOneApi
do
{ If( [bool]([PsOneApi.Keyboard]::GetAsyncKeyState($key) -eq -32767 -and
[PsOneApi.Keyboard]::GetAsyncKeyState($key2) -eq -32767 -and
[PsOneApi.Keyboard]::GetAsyncKeyState($key3) -eq -32767))
{
Write-Host "You pressed the combo keys, oh my!!" -ForegroundColor Green
}
Start-Sleep -Milliseconds 100
} while($true)
输出(按下组合键时)
支持资源
- 检测按键
- GetAsyncKeyState 函数
- 虚拟键代码
-
$key[#]
使用它可以找到十六进制值,以便在适用的情况下插入到特殊键的PowerShell值中。
-
- 如果