Hola, estoy haciendo un servicio que debería capturarme la pantalla y guardar la captura como un bmp en el disco. Sin embargo, la rutina que empleo para la captura me funciona en una aplicación normal, pero parece que en un servicio windows no me funciona.
La rútina que empleo es la siguiente:
Código Delphi
[-]
procedure ScreenShot(x : integer; y : integer; Width : integer; Height : integer; bm : TBitMap);
var
dc: HDC; lpPal : PLOGPALETTE;
begin
if ((Width = 0) OR (Height = 0)) then exit;
bm.Width := Width;
bm.Height := Height;
dc := GetDc(0);
if (dc = 0) then exit;
if (GetDeviceCaps(dc, RASTERCAPS) AND
RC_PALETTE = RC_PALETTE) then
begin
GetMem(lpPal, sizeof(TLOGPALETTE) + (255 * sizeof(TPALETTEENTRY)));
FillChar(lpPal^, sizeof(TLOGPALETTE) + (255 * sizeof(TPALETTEENTRY)), #0);
lpPal^.palVersion := $300;
lpPal^.palNumEntries :=
GetSystemPaletteEntries(dc,0,256,lpPal^.palPalEntry);
if (lpPal^.PalNumEntries <> 0) then
begin
bm.Palette := CreatePalette(lpPal^);
end;
FreeMem(lpPal, sizeof(TLOGPALETTE) + (255 * sizeof(TPALETTEENTRY)));
end;
BitBlt(bm.Canvas.Handle,0,0,Width,Height,Dc,x,y,SRCCOPY);
ReleaseDc(0, dc);
end;
La rútina la encontré en:
http://www.delphipages.com/tips/copyview.cfm?ID=75
La rutina se lanza desde el evento
OnExecute del
TService.
También he probado con la rútina de TrucoMania, pero nada.
Por esto, sospecho que desde un servicio no se puede capturar la pantalla, pero me parece raro. ¿Qué pensaís?
Muchas gracias por leerme.
Saludos.