2012-11-30 8 views
0

VBoxManage.exe은 명령 행을 통해 VM을 제어 할 수있는 Oracle VirtualBox 동반 유틸리티입니다. 시작/중지 및 화면 캡처를 비롯한 다양한 작업을 수행 할 수 있습니다.VBoxManage.exe는 어떤 API를 사용합니까?

관심있는 API는 무엇입니까?

무거운 명령 줄 유틸리티없이 VM 화면을 캡처하거나 키보드 또는 마우스 명령을 보낼 수있는 방법은 무엇입니까? 어떤 언어가 더 좋습니까? Java로이 API에 액세스 할 수 있습니까?

답변

3

오픈 소스 프로젝트를 사용할 때 장점 중 하나는 소스를보고 이러한 질문에 대답 할 수 있다는 것입니다.

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

+1

: 거기 당신은 마우스와 키보드와 같은 다른 모든 것들의 목록을 찾을 수 있습니다 : – Dims

관련 문제