오픈 소스 프로젝트를 사용할 때 장점 중 하나는 소스를보고 이러한 질문에 대답 할 수 있다는 것입니다.
VBoxManage는 /src/VBox/Frontends/VBoxManage 아래의 소스 리포지토리에 있습니다. 당신이 찾고있는 코드는 조건 if (!strcmp(a->argv[1], "screenshotpng"))
에서 VBoxManageControlVM.cpp
에 있습니다
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를 통해 이루어집니다, 당신은 볼 수 있습니다 : TakeScreenShotPNGToArray
이 발견에 대한 인터넷 검색을
Is it possible to call a COM API from Java?
디스플레이 인터페이스 :
https://www.virtualbox.org/sdkref/interface_i_display.html
에서 수치 : 나는 그것이 오픈 소스입니다 알고하지 않았다
https://www.virtualbox.org/sdkref/annotated.html
: 거기 당신은 마우스와 키보드와 같은 다른 모든 것들의 목록을 찾을 수 있습니다 : – Dims