c# - 模拟鼠标/键盘事件到 Hyper-V 虚拟机

标签 c# winapi virtual-machine hyper-v

我正在运行 Windows 10 作为主机,并在 Hyper-V 虚拟机内部运行另一个 Windows 10。我想做的是编写一个 C# 程序,它会每隔 1 秒单击一次鼠标按钮,然后最终从键盘发送一些击键,比如“abc”。

到目前为止,我尝试使用 PostMessageWM_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 中),用于解决您所询问的具体问题。

Typing a String :

$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

Controlling the Mouse :

$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/

相关文章:

c# - 捕捉 Global.asax 中的错误

c++ - 在 C++ 中每 10 毫秒执行一次函数

winapi - Process Explorer 是否支持 API 或从控制台命令调用?

java - 未创建 hsperfdata_uid 文件夹

c# - 用户控件或网格中的元素列表

c# - FluentAssertions : ShouldBeEquivalentTo vs Should(). Be() vs Should().BeEquivalentTo()?

powershell - 如何在Powershell中创建自定义数组?

linux - 如何将 X11 转发到远程 linux 主机上运行的虚拟机?

c# - 如何报告 SharePoint 计时器作业的状态

c - 如何获取磁盘中文件的大小?