[英]Simulating mouse/keyboard events to Hyper-V virtual machine
我正在運行 Windows 10 作為主機,並在 Hyper-V 虛擬機中運行另一個 Windows 10。我正在嘗試做的是編寫一個 C# 程序,它將每 1 秒單擊一次鼠標按鈕,並最終發送一些來自鍵盤的擊鍵,例如“abc”。
到目前為止,我嘗試了使用WM_LBUTTONDOWN
和 UP 使用 Hyper-v 窗口mouse_event
的窗口句柄的PostMessage
,但沒有任何效果。 mouse_event
在主機上工作正常,每 1 秒點擊一次,但是一旦我將鼠標懸停在虛擬機上,它就不再點擊了。
有沒有一種方法可以模擬主機中的點擊和鍵盤鍵並讓 VM 對其做出反應?
是的,有一種方法可以通過 Hyper-V 的 WMI 接口(可以通過 PowerShell 訪問,它與 C# 很好地集成)來執行此操作。 VirtualPCGuy 有一個很棒的博客系列,由 10 部分組成,關於使用 Hyper-V 做這種事情(從 2016 年 3 月 7 日開始)。 以下是您要詢問的特定內容的代碼示例(在 PowerShell 中)。
$VMName = "Windows 10 Enterprise"
$VMCS = Get-WmiObject -Namespace root\virtualization\v2 -Class Msvm_ComputerSystem -Filter "ElementName='$($VMName)'"
$keyboard = $VMCS.GetRelated("Msvm_Keyboard")
$keyboard.TypeText("Hello!") | out-null
控制鼠標:
$VMName = "Windows 10 Enterprise"
$VMCS = Get-WmiObject -Namespace root\virtualization\v2 -Class Msvm_ComputerSystem -Filter "ElementName='$($VMName)'"
$mouse = $VMCS.GetRelated("Msvm_SyntheticMouse")
$mouse.SetAbsolutePosition(300,450) | out-null
$mouse.ClickButton(2) | out-null
注意:這僅適用於基本模式,不適用於增強模式。 如果您有興趣做更高級的事情,我強烈建議您閱讀整個系列。
免責聲明:在 Microsoft 的 Hyper-V 工程團隊工作。
要補充 joslack 的答案並感謝 mwfearnley 的參考資料:
如果您需要對 TypeText 或 TypeKey 函數進行更多連續調用,請嘗試在每次調用之間添加一個小延遲(即sleep -Milliseconds 100
)。 例如:
$VMName = "Windows 10 Enterprise"
$VMCS = Get-WmiObject -Namespace root\virtualization\v2 -Class Msvm_ComputerSystem -Filter "ElementName='$($VMName)'"
$keyboard = $VMCS.GetRelated("Msvm_Keyboard")
$keyboard.TypeKey(0x70) | out-null
sleep -Milliseconds 100
$keyboard.TypeKey(0x09) | out-null
sleep -Milliseconds 100
$keyboard.TypeKey(0x32) | out-null
sleep -Milliseconds 1200
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.