如何使用 Win32 API 在不激活 Window 的情况下模拟按键组合
How to emulate keypress combination without activating Window using Win32 API
我想模拟 Ctrl+Alt+L 按键组合(这是一个内存中的隐藏进程 运行 正在侦听)。所以...我无法激活不存在的 GUI window(使用传统 SendKeys
)。
我似乎无法在任何地方找到可以帮助我执行此操作的单个工作脚本。我找到的最接近的是下面的 Keypress 脚本,它似乎仅限于按单个字符(没有组合键)。
https://www.reddit.com/r/PowerShell/comments/3qk9mc/keyboard_keypress_script/
这是使用 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
我想模拟 Ctrl+Alt+L 按键组合(这是一个内存中的隐藏进程 运行 正在侦听)。所以...我无法激活不存在的 GUI window(使用传统 SendKeys
)。
我似乎无法在任何地方找到可以帮助我执行此操作的单个工作脚本。我找到的最接近的是下面的 Keypress 脚本,它似乎仅限于按单个字符(没有组合键)。
https://www.reddit.com/r/PowerShell/comments/3qk9mc/keyboard_keypress_script/
这是使用 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