如何制作热键来激活特定的 VMware Workstation VM?

如何制作热键来激活特定的 VMware Workstation VM?

我在 Windows 7 x64 上使用最新版本的 VMware Workstation (11.1.0),并且我希望能够按“Ctrl + 1”转到 VM #1,按“Ctrl + 2”转到 VM #2,按“Ctrl + 3”转到 VM #3。

听起来很简单,对吧?其实不然。

在 Mac OS X 上,使用 VMware Fusion 结合 Spaces / Mission Control 即可轻松实现此功能 - 您只需将每个 VM 放在单独的空间中,然后定义所需的任何空间热键即可。我正在从 OS X 迁移并想要同样的功能。

作为参考,这里有一些我尝试过并且可以验证它们不起作用的潜在解决方案:

1)AutoHotkey

自动热键可以用来制作如下热键:

^1::WinActivate, Win7(1) - VMware Workstation
^2::WinActivate, Win7(2) - VMware Workstation
^3::WinActivate, Win7(3) - VMware Workstation

这些工作进入虚拟机,但不会退出;Workstation 会将“Ctrl + 1”提供给虚拟机,并且 AutoHotkey 不会优先,即使 AutoHotkey 以管理员身份运行。

2)使用 AutoHotkey 暂停/取消暂停

这篇有希望的文章Nick Sturgess 建议在 VMware 窗口处于活动状态时暂停并取消暂停 AutoHotkey 将解决该问题。

但是,即使复制了精确的代码并进行了必要的字符串修改,我仍然无法使其与 Workstation 一起工作。

3)远程桌面和/或 VNC

如果所有 3 台虚拟机都运行 Windows,则一个可能的解决方案是使用 Microsoft 的远程桌面功能。但是,我打算使用的一台或多台虚拟机将运行 Linux。

在 Linux 上,可以只使用 VNC。但是,与原生 VMware Workstation 控制台窗口相比,VNC 有相当大的缺点:没有声音、分辨率不会自动缩放、性能不佳等等。

最后,虚拟机将位于 1) 不会通过桥接网卡 (主机上的网卡已禁用) 连接到主机的网络上,以及 2) 使用没有任何拆分隧道的 VPN。因此,首先将无法连接远程桌面或 VNC。

4)Windows 键盘钩子

Liuk 解释了如何使用 Windows 钩子通过 C++ 拦截按键这篇信息丰富的文章

然而,经过使用演示程序进行测试后,似乎这种方法并不能拦截发送到 VMware Workstation 的击键。

5)全屏开关.directKey

VMware Workstation 似乎曾经内置有这种功能,如这个超级用户线程

但是,VMware 的文档指出这是针对 VMware Workstation 5.0 的。我尝试将这些字符串添加到我的 VMX 文件中,但它们没有任何效果,因此看来此功能可能在 Workstation 5 和 11 之间的某个地方已被贬低。

6)PSExec

Wade Hatler 提到,他使用 PSExec 在主机上激活相应的 AutoHotkey 脚本来实现这一点此论坛帖子

这个解决方案是有问题的,因为您必须以纯文本形式保存主机的密码才能将其传递给 PSExec。

无论如何,此解决方案不会起作用,原因也在上面第 3 点中描述过:相关虚拟机将位于 1) 不会通过桥接 NIC 连接到主机的网络上(主机上禁用 NIC)和 2) 使用没有任何拆分隧道的 VPN。因此无法保证主机和客户机之间的连接。

7) 在每个“Ctrl + #”键之间执行“Host”键

我使用“Ctrl”作为我的 VMware Workstation Host 热键,而不是默认的“Ctrl + Alt”,因为它激活起来要快得多。即使有了这个优化,我也必须按下并完全释放 Ctrl 才能让 VM 放弃输入。只有这样我才能使用上面 #1 中的 AutoHotkey 热键。

当我需要快速浏览不同的虚拟机并在每个虚拟机上执行一些工作(按键)时,这就会成为问题。切换到每个虚拟机所需的键盘输入量基本上翻倍了,所以这不是一个合适的解决方案。

8) 使用“主机 + 左/右箭头”热键和/或 VMware-KVM.exe 实现循环功能

这是有问题的,因为当我一次打开 10 个或更多虚拟机时,轮流浏览所有虚拟机会变得非常麻烦和低效。

9)模拟 OS X Spaces / Mission Control 的程序

Dexpot、Desktops 和 Virtual Dimensions 等 Windows 程序都允许在 Windows 上实现类似 Spaces 的功能。然而,这三个程序都存在与 AutoHotkey 相同的问题 - 用于激活特定桌面的热键被 VMware 工作站抢占,而不会传递给主机。

答案1

以下答案虽然对于大多数产品来说都是正确的,但对于 VMware 或其他优先控制键盘的产品却不起作用。

事实证明,当前版本的 VMware 在 Windows 中安装了一个键盘处理程序,当 VMware 获得焦点时,它会优先拦截所有键盘键,并且实际上不会将任何键传递给主机,但如果未启用增强虚拟键盘,则 Ctrl-Alt-Del 除外。

以前版本中有效的方法(例如传递所有 Ctrl+Alt 组合键)由于某些未知原因现在在 VMware 中被省略了。

现在,在虚拟机中使用阻塞 VPN 服务器,它会阻止整个本地网络,只留下主机键盘和鼠标作为可能的机制,现在出现了一个真正的大问题。

我只能看到两种解决方案:

  1. 鼠标导向:使用具有图形控制台的虚拟桌面产品(如 Dexpot),只需单击即可切换桌面,
  2. 面向键盘:需要从 VMware 切换到 VitualBox 或 Hyper-V,这可能会让主机拦截更多键盘事件(需要进行实验)。

Windows 下的一个解决方案是创建多个虚拟桌面并将每个 VM 分配给自己的虚拟桌面。

以下免费虚拟桌面产品支持全局热键:

德克斯波特
功能最齐全。请参阅此操作方法文章使用鼠标手势和热键。

台式机
它是由微软研究员 Mark Russinovich 创建的,应该与 Windows 的集成效果最好。

虚拟维度
我没有亲身经历过。

相关内容