[Delphi] Problem z Windows Vista

0

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! - Ł

0

albo pobieraswz uchwyt do okna gdzie jest rysowana gra (a nie pulpitu), albo pobierasz to poprzez directshow

0

Mógłbyś napisać coś więcej na temat directshow? :-)

0

NIe potrafie bo obsluge tego directshow mam napisana w C++ nie w Delphi poszukaj na google

0

Sprobuj dać

GetWindowDC(0);

Problem tkwi w sterownikach od grafiki i ma go wiele programów do robienia ss. BTW <ort>rzadko </ort>która gra w tej chwili jest robiona w OpenGL.

0

Jeżeli możesz, to wstaw KOD z c++ z robienia screenów. Jak koleś jest kumaty to sobie przerobi na delphi, a i mi się na pewno przyda :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1