Windows 按键检测

Windows 按键检测

问题:是否可以监视某个按键或某个特定按键组合,例如:CTRL++ ALTK当按键被按下时,Windows 可以执行某些代码或采取行动。

我探索过创建批处理脚本的快捷方式,然后设置它使用快捷键组合,但当不在桌面上时它不起作用。

我需要它工作:

  • 即使其他应用程序在前台,或者控制台在后台等等。
  • 在控制台窗口之外,如果其他应用程序窗口在前台处于活动状态,那么即使控制台在后台。

Windows 是否有一种简单的方法可以使用 PowerShell 或批处理来执行此操作,而无需使用特殊工具或超复杂的代码?

答案1

从一些逻辑开始检测按键帖子中,这里有一个稍微修改过的脚本,当执行时它会监视Alt++CtrlK的按下。

此示例采取的操作只是将输出以绿色写入屏幕,但您可以将操作 [ Write-Host] 更改为按下这些键时需要触发的其他操作。

它将触发动作...

  1. 当你按下K键时组合键中的最后一个
    • 始终按住Alt+ Ctrl(或 Ctrl+ Alt首先,在按下 K—尽管[或]同时按下所有三个似乎相当持续地触发。
  2. 每次按下按键时只有在释放之前用于引发动作。
    • 按下触发操作所需的所有键后,松开,不要按住任何一个键。

其他值得注意的事项...

  • 变量$key值将是“关键”,你将按顺序最后按下的组合键(如上所述K),如果您发现它比同时按下所有三个键更有效。
  • 变量$key2$key3值永远是你按下并按住,然后按下最后一个 $keyAlt如上文+所述,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)

输出(按下组合键时)

在此处输入图片描述

支持资源

相关内容