如何在不使用Win32 API激活Window的情况下模拟按键组合

时间:2018-06-29 21:41:39

标签: windows powershell vbscript sendkeys

我想模拟 Ctrl + Alt + L 按键组合(在内存中运行的隐藏进程正在监听)。所以...我无法激活不存在的GUI窗口(使用传统的double convert = 5 / 1024; )。

我似乎找不到任何可以帮助我完成此任务的脚本。我发现最接近的是下面的Keypress脚本,该脚本似乎仅限于按单个字符(没有按键组合)。

https://www.reddit.com/r/PowerShell/comments/3qk9mc/keyboard_keypress_script/

1 个答案:

答案 0 :(得分:2)

这是CTRL + ESCAPE的演示。易于根据您的需求进行修改。 键盘代码列表在这里: http://www.kbdedit.com/manual/low_level_vk_list.html

但是在测试时要小心。如果未正确释放密钥,则可能会发生奇怪的后果!

$keyboardEvent = Add-Type –memberDefinition @” 
    [DllImport("user32.dll")] 
    public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);
“@ -name “keyboardEvent” -namespace Win32Functions –passThru

$key_down    = 0x00
$key_up      = 0x02

$vk_lcontrol = 0xA2
$vk_alt      = 0x12
$vk_l        = 0x4C
$vk_escape   = 0x1B
$vk_windows  = 0x5B

# Press CTRL+ESC => Same as Windows Key
[Win32Functions.keyboardEvent]::keybd_event([byte]$vk_lcontrol, [byte]0, [UInt32]$key_down, [UIntPtr]::Zero)
[Win32Functions.keyboardEvent]::keybd_event([byte]$vk_escape, [byte]0, [UInt32]$key_down, [UIntPtr]::Zero)
Start-Sleep 1

# Release CTRL+ESC 
[Win32Functions.keyboardEvent]::keybd_event([byte]$vk_lcontrol, [byte]0, [UInt32]$key_up, [UIntPtr]::Zero)
[Win32Functions.keyboardEvent]::keybd_event([byte]$vk_escape, [byte]0, [UInt32]$key_up, [UIntPtr]::Zero)
Start-Sleep 1