Witam,
jestem właścicielem programu Azereus, którego funkcje oraz opis można znaleźć na stronie www.azereus.pl. Jest to program służący do walki z oszustami w grach komputerowych typu MultiPlayer. Działanie programu który napisałem polega na robieniu screenów z tego co użytkownik systemu Windows widzi na ekranie. Zrobienie takiego zrzutu polega na stworzeniu klasy TCanvas, ustawieniu uchwytu do aktywnego okna poprzez funkcję GetDesktopWindow a następnie wywołanie metody TCanvas.Canvas.CopyRect. Proces działa prawidłowo zarówno w systemie XP jak i Vista. Działa także w systemie XP w sytuacji gdy jest na nim uruchomiona dana gra (program robi wtedy screeny z tej gry), niestety w przypadku systemu Vista, już tak nie jest. Gdy na tym systemie operacyjnym uruchomiona jest gra, mój program robi czarne screenshoty. Nie wiem co jest tego przyczyną, czy jest to problem z obsługą OpenGL, czy program używa złego uchwytu okna, czy jeszcze coś innego. Dodatkowo, program w powyżej opisanej sytuacji robi prawidłowe zrzuty ekranu, w przypadku gdy gra jest uruchumoia w trybie okienkowym (nie pełnoekranowym). Proszę o pomoc, dołączam kod robienia screenshotów:
function Tscreener.GetNowScreen: tjpegimage;
var
btMap:Tbitmap; //mapa bitowa
DeskTop: TCanvas;
begin
DeskTop := TCanvas.Create;
try
btMap := TBitmap.Create;
try
DeskTop.Handle := GetWindowDC ( GetForegroundWindow );
btMap.Width := Screen.Width;
btMap.Height := Screen.Height;
btMap.Canvas.CopyRect (Rect(0, 0, Screen.Width, Screen.Height), DeskTop,
Rect (0, 0, Screen.Width, Screen.Height));
Result := TJPEGImage.Create;
Result.CompressionQuality := 60;
Result.Assign(btMap);
finally
FreeAndNil(btMap);
end;
finally
FreeAndNil(DeskTop);
end;
end;
// POPRAW TEMAT! - Ł