VBoxManage.exe
是Oracle VirtualBox的伴侣实用程序,它允许经由命令行来控制虚拟机。 它可以做很多操作,包括启动/停止和屏幕捕获。
我很感兴趣,它使用API?
我怎样才能捕捉VM屏幕或有送键盘或鼠标命令没有这个沉重的命令行工具? 哪种语言更好? 是可以访问与Java这个API?
VBoxManage.exe
是Oracle VirtualBox的伴侣实用程序,它允许经由命令行来控制虚拟机。 它可以做很多操作,包括启动/停止和屏幕捕获。
我很感兴趣,它使用API?
我怎样才能捕捉VM屏幕或有送键盘或鼠标命令没有这个沉重的命令行工具? 哪种语言更好? 是可以访问与Java这个API?
优势之一,使用一个开源项目应该是,你可以通过查看源回答这样的问题。
VBoxManage位于下源资源库/ SRC /垂直框/前台应用/ 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来完成的,你可以看看:
是否有可能从Java调用一个COM API?
谷歌搜索TakeScreenShotPNGToArray
发现显示接口:
https://www.virtualbox.org/sdkref/interface_i_display.html
从那里,你可以找到的所有其他的东西像鼠标和键盘列表:
https://www.virtualbox.org/sdkref/annotated.html