0

VBoxManage.exeは、コマンド ライン経由で VM を制御できる Oracle VirtualBox コンパニオン ユーティリティです。開始/停止や画面キャプチャなど、さまざまな操作を実行できます。

興味がありますが、どの API を使用していますか?

この重いコマンドライン ユーティリティを使用せずに、VM の画面をキャプチャしたり、キーボードやマウスのコマンドを送信したりするにはどうすればよいですか? どの言語が良いですか? この API に Java でアクセスできますか?

4

1 に答える 1

3

オープン ソース プロジェクトを使用する利点の 1 つは、ソースを見ればそのような質問に答えることができるということです。

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 を介して実行されます。以下を確認できます。

Java から COM API を呼び出すことはできますか?

グーグルでTakeScreenShotPNGToArray検索すると、表示インターフェイスが見つかります。

https://www.virtualbox.org/sdkref/interface_i_display.html

そこから、マウスやキーボードなどの他のすべてのもののリストを見つけることができます:

https://www.virtualbox.org/sdkref/annotated.html

于 2012-12-02T18:08:24.970 に答える