- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
VBoxManage.exe
是 Oracle VirtualBox 配套实用程序,它允许通过命令行控制 VM。它可以执行多种操作,包括开始/停止和屏幕捕获。
我感兴趣,它使用哪个 API?
如果没有这个繁重的命令行实用程序,我如何捕获虚拟机屏幕或发送键盘或鼠标命令?哪种语言更好?可以用Java访问这个API吗?
最佳答案
使用开源项目的优点之一应该是您可以通过查看源代码来回答此类问题。
VBoxManage 位于源存储库中 /src/VBox/Frontends/VBoxManage 下。您要查找的代码位于 VBoxManageControlVM.cpp
中,条件为 if (!strcmp(a->argv[1], "screenshotpng"))
:
ComPtr<IDisplay> pDisplay;
CHECK_ERROR_BREAK(console, COMGETTER(Display)(pDisplay.asOutParam()));
ULONG width, height, bpp;
CHECK_ERROR_BREAK(pDisplay,
GetScreenResolution(displayIdx, &width, &height, &bpp));
com::SafeArray<BYTE> saScreenshot;
CHECK_ERROR_BREAK(pDisplay, TakeScreenShotPNGToArray(displayIdx,
width, height, ComSafeArrayAsOutParam(saScreenshot)));
RTFILE pngFile = NIL_RTFILE;
vrc = RTFileOpen(&pngFile, a->argv[2], RTFILE_O_OPEN_CREATE | RTFILE_O_WRITE |
RTFILE_O_TRUNCATE | RTFILE_O_DENY_ALL);
if (RT_FAILURE(vrc))
{
RTMsgError("Failed to create file '%s'. rc=%Rrc", a->argv[2], vrc);
rc = E_FAIL;
break;
}
vrc = RTFileWrite(pngFile, saScreenshot.raw(), saScreenshot.size(), NULL);
if (RT_FAILURE(vrc))
{
RTMsgError("Failed to write screenshot to file '%s'. rc=%Rrc",
a->argv[2], vrc);
rc = E_FAIL;
}
RTFileClose(pngFile);
所以它是通过 COM API 完成的,您可以查看:
Is it possible to call a COM API from Java?
谷歌搜索TakeScreenShotPNGToArray
找到显示界面:
https://www.virtualbox.org/sdkref/interface_i_display.html
从那里您可以找到所有其他元素(例如鼠标和键盘)的列表:
关于c# - VBoxManage.exe 使用什么 API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13649493/
我有 zsh-completions安装在arch linux上。完成VBoxManage命令似乎工作正常,但是 vboxmanage没有(即只是简单地完成本地目录中的文件)。两个VBoxManage
我在物理 Windows7 上的 VirtualBox 中运行 CentOS。现在在 centOS 我有 Docker,我需要运行 docker-machine create --driver vir
运行时出现以下错误 vagrant up 执行 Vagrant 使用的 CLI“VBoxManage”时出错 用于控制 VirtualBox。命令和标准错误如下所示。 命令:["hostonlyif"
我在Windows 7上使用VirtualBox 4.2.18和Vagrant 1.3.3。 Vagrant 的盒子添加MyBox http://ergonlogic.com/files/boxes/
我在 Virtualbox 中使用 Vagrant。我正在我的 Vagrant 文件中配置一个共享文件夹。但是,如果已创建共享文件夹,则尝试 vagrant up VM 时出现错误。 config.v
我想遍历正在运行的虚拟机并只返回引号之间的内容。 所以这个命令: VBoxManage list runningvms 返回: "UbuntuServer" {7ef01f8d-a7d5-4405-a
我需要在 vagrant/virtualbox 虚拟机上选择性地禁用主机时间同步。我可以像这样在主机上毫无问题地做到这一点: $ VBoxManage setextradata \ > "VBoxI
当我尝试向我的 VirtualBox 添加/删除共享文件夹时出现此错误: ~$ VBoxManage sharedfolder add dev --name srv --hostpath "/my/
VBoxManage.exe 是 Oracle VirtualBox 配套实用程序,它允许通过命令行控制 VM。它可以执行多种操作,包括开始/停止和屏幕捕获。 我感兴趣,它使用哪个 API? 如果没有
当我尝试向我的 VirtualBox 添加/删除共享文件夹时出现此错误: ~$ VBoxManage sharedfolder add dev --name srv --hostpath "/my/
我想删除安装在 VirtualBox 上的给定虚拟机(本身安装在 Windows XP 上)。当我从 CMD 运行命令时,删除如我所料。但是当我运行这段代码时: import subprocess m
我有一个名为“mongo”的 VirtualBox 图像。 当我启动 Windows 并尝试从 cygwin 启动虚拟机时,VBoxManage 说它找不到机器: /cygdrive/c/Progra
我刚刚在我的 Windows 7 机器上安装了 Docker Toolbox。安装后,我运行 Docker Quickstart 终端,显示以下消息: 看起来在步骤 nLooking for vbox
我在命令行中遵循 Data Science 的安装教程,其中包括以下步骤: $ mkdir MyDataScienceToolbox $ cd MyDataScienceToolbox $ vagra
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
我在尝试初始化 Vagrant 时遇到了问题。安装了一个带有 Vagrantfile 的文件夹,并安装了 VirtualBox 和 Vagrant。使用 hashicorp/precise32 框,在
尝试在 Android-Studio 中启动 Genymotion 时出现以下错误:我已经找到了这个 genymotion-invalid-path-vboxmanage-and-initialize
在我的 homestead 目录中第一次运行 vagrant up 后,我的电脑蓝屏了,因为启用了 Hyper-V。现在,在禁用 Hyper-V 并运行 vagrant up 后,我收到此错误: Th
这是cmd错误,我不明白错误在哪里,我一次又一次地碰到它,无法解决它。 $ vagrant up Bringing machine 'default' up with 'virtualbox' pro
我刚刚使用Powershell让Laravel宅基地昨天运行。现在,它甚至无法运行。我只是暂停了 Vagrant 并关闭了我的电脑。现在,这只是给我这个错误: Bringing machine 'de
我是一名优秀的程序员,十分优秀!