Grigory Petrov schrieb:
Hello.
I'm using VirtualBox to automate old DOS program and need to takes screenshots
of guest OS in order to manipulate a program correctly. I have tried the
following test code:
void main( void )
{
::CoInitialize( 0 );
IVirtualBox* poVbox = 0;
::CoCreateInstance( CLSID_VirtualBox, 0, CLSCTX_ALL, IID_IVirtualBox,
(void**)& poVbox );
SAFEARRAY* poVmList = 0;
poVbox->get_Machines( & poVmList );
IMachine** ppoVmArray = 0;
::SafeArrayAccessData( poVmList, (void**)& ppoVmArray );
BSTR oVmId;
(* ppoVmArray)->get_Id( & oVmId );
ISession* poSession = 0;
HRESULT hRet = ::CoCreateInstance( CLSID_Session, 0, CLSCTX_ALL,
IID_ISession, (void**)& poSession );
IProgress* poProgress = 0;
BSTR oEnvir = ::SysAllocString( L"" );
hRet = poVbox->OpenRemoteSession( poSession, oVmId, ::SysAllocString( L"gui" ), oEnvir, & poProgress );
// Wait resonable time for VM to start and to display something.
::Sleep( 10000 );
IConsole* poConsole = 0;
hRet = poSession->get_Console( & poConsole );
IDisplay* poDisplay = 0;
hRet = poConsole->get_Display( & poDisplay );
UINT32 anMem[ 100 ] = { 0 };
hRet = poDisplay->TakeScreenShot( (BYTE*)anMem, 10, 10 );
assert( SUCCEEDED( hRet ) );
}
All works, VirtualBox starts and loads guest OS, but after calling
TakeScreenShow() it returns E_NOTIMPL :(. Does anyone know what can i do? Maybe
i need to use other API functions, get screen buffer, register for updates
notifications or something? Host OS is windows XP SP3, latest VirtualBox and
SDK from site. I will be very glad if someone can share an working example on
how to take an screenshot / image of guest OS desktop, that will help a lot! Or
maybe it's some error in my code?
The error says it all. The code can't deal with scaling, and as you
request a 10x10 pixel screenshot that'll fail. Make sure you request the
width and height of the framebuffer (and have enough buffer size
available for that). An example is in the GUI code, but remember that
this uses different API wrappers so the calling conventions are a bit
different than the normal (xp)com API calls.
Klaus
_______________________________________________
vbox-dev mailing list
[email protected]
http://vbox.innotek.de/mailman/listinfo/vbox-dev