Veo que ya lo teneis solucionado ...
yo he creado mi version usando gdi+

la pongo aqui por si a alguien le sirve . Usa una captura de pantalla tradicional y crea un bmp gdi+ para luego hacer lo que queramos con el , grabar la pantalla como png ,bmp ,jpg ,capturar sus
pixeles , etc...
codigo a añadir a gdiplus.cpp
Code: Select all | Expand
HB_FUNC( GDIPLUSCAPTURESCREEN )
{
int nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
int nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
HWND hDesktopWnd = GetDesktopWindow();
HDC hDesktopDC = GetDC(hDesktopWnd);
HDC hCaptureDC = CreateCompatibleDC(hDesktopDC);
HBITMAP hCaptureBitmap =CreateCompatibleBitmap(hDesktopDC,
nScreenWidth, nScreenHeight);
SelectObject(hCaptureDC,hCaptureBitmap);
BitBlt(hCaptureDC,0,0,nScreenWidth,nScreenHeight,
hDesktopDC,0,0,SRCCOPY|CAPTUREBLT);
Bitmap * newImage = new Bitmap( hCaptureBitmap , NULL );
ReleaseDC(hDesktopWnd,hDesktopDC);
DeleteDC(hCaptureDC);
DeleteObject(hCaptureBitmap);
hb_retnl( ( HB_LONG ) newImage );
}
un ejemplo funcionando usando el sample de Antonio.
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oDlg, oBtn
DEFINE DIALOG oDlg
@ 0.5, 1.5 BUTTON oBtn PROMPT "Capture" SIZE 30, 30 ;
ACTION oDlg:Capture()
oBtn:bGotFocus = { || oDlg:Capture() }
ACTIVATE DIALOG oDlg CENTERED ;
ON CLICK capturapan(odlg)
return nil
Function capturapan(odlg)
local nRed,nGreen, nBlue
local aPix := GetCursorPos()
local oGBmp := GdiBmp():new()
oGBmp:hBmp:= GDIPLUSCAPTURESCREEN()
nRed := oGBmp:GetRedPix( aPix[2], aPix[1])
nGreen := oGBmp:GetGreenPix( aPix[2], aPix[1])
nBlue := oGBmp:GetBluePix( aPix[2], aPix[1])
msginfo( "color " + str( nred) + " "+str(nGreen) +" " + str(nblue ) )
odlg:setcolor ( , nrgb(nred,nGreen,nblue) )
odlg:refresh()
RETURN NIL