Я пишу небольшой клиент, используя WinForms, C#, инструмент AxMsTscNotSafeForScripting, и мне нужно отправить Win+R на виртуальную машину (да, я знаю, есть способ удаленного запуска приложения без RunDialog, но мне нужно). Я быстро нашел хорошую библиотеку с именем InputSimulator
, она правильно имитирует все на моей основной машине, но не влияет на виртуальную машину.
На самом деле, он может отправить весь string
в блокнот, но когда он имеет дело с VirtualKeyCodes, ничего не происходит. Немного углубившись в Google, я обнаружил использование WindowsAPI.SendInput
с методами
void PressKey(char ch, bool press)
void KeyDown(ushort scanCode)
void KeyUp(ushort scanCode)
.
PressKey
работает с ВМ, но KeyDown
и KeyUp
, которые мне нужны, неверны. Например, 81 — это ScanCode для «Q», но печатается «.» в блокноте 82 для «R», но я получаю «0» и вообще ничего не получаю с 91, это для клавиши Windows. Если я нажимаю клавишу на клавиатуре, все работает, поэтому проблема не в настройках KeyPreview, EnableWindowsKey и т. Д. Обе системы - Win7, Oracle VM VirtualBox.
Даже если мой путь безнадежен, какие еще есть способы программно отправить Win+R на виртуальную машину? Помощь будет принята с благодарностью!