我正在运行 Windows 10 作为主机,并在 Hyper-V 虚拟机内部运行另一个 Windows 10。我想做的是编写一个 C# 程序,它会每隔 1 秒单击一次鼠标按钮,然后最终从键盘发送一些击键,比如“abc”。
到目前为止,我尝试使用 PostMessage
和 WM_LBUTTONDOWN
并使用 UP 和 hyper-v 窗口的窗口句柄,mouse_event
,但没有任何效果。 mouse_event
在主机上运行良好,每 1 秒点击一次,但是一旦我将鼠标悬停在虚拟机上,它就不再点击了。
有没有一种方法可以在主机中模拟点击和键盘按键并让 VM 对其使用react?
最佳答案
是的,有一种方法可以通过 Hyper-V 的 WMI 接口(interface)(可以通过与 C# 很好地集成的 PowerShell 访问)来实现。 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 工程团队工作。
关于c# - 模拟鼠标/键盘事件到 Hyper-V 虚拟机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44761996/