Как эмулировать комбинацию нажатий клавиш без активации Window с помощью Win32 API - PullRequest
0 голосов
/ 30 июня 2018

Я хотел бы эмулировать Ctrl + Alt + L комбинация нажатий клавиш (которую слушает скрытый процесс, запущенный в памяти). Итак ... Я не могу активировать окно графического интерфейса, которого там нет (используя традиционный SendKeys).

Кажется, я нигде не могу найти ни одного работающего сценария, который бы помог мне сделать это. Самым близким из найденных мной был сценарий нажатия клавиш, который, по-видимому, ограничен нажатием только одного символа (без сочетаний клавиш).

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

1 Ответ

0 голосов
/ 30 июня 2018

Это демонстрация с помощью 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
...