簡體   English   中英

模擬鼠標/鍵盤事件到 Hyper-V 虛擬機

[英]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

歸功於Ben Armstrong 的虛擬化博客

虛擬鍵碼的完整列表在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM