Ich empfehle dir _wärmstens_ eine Hookinglibrary zu nutzen, welche auch mit anderen Situationen zurechtkommt, denn du weist nie, wie die gdi32.dll auf anderen Computern aufgebaut ist. Sollte z.B. die Swap-Buffers-Funktion kleiner als 5 bytes sein, dann hast du ein kleines Problem, weil du dann auch anderen Code überschreibst, den du nicht überschreiben solltest.
Und nicht nur deshalb finde ich diesen "hack" nicht "krass", sondern eher "mal schnell geschrieben, ohne viel zu denken".
Daher will ich dir etwas "direkter" helfen (ich verwende dazu MadCodeHook):
Delphi-Quellcode:
library oglhook;
//OpenGL-Hook template by c113plpbr
uses
Windows,
madCodeHook;
var
SwapBuffersNext :
function(
DC: HDC): BOOL;
stdcall =
nil;
function SwapBuffersCallback(
DC: HDC): BOOL;
stdcall;
begin
//Dein Screenshot Code
Result := SwapBuffersNext(
DC);
end;
begin
HookAPI('
gdi32.dll', '
SwapBuffers', @SwapBuffersCallback, @SwapBuffersNext);
end.
Das ist viel einfacher, übersichtlicher, und auch "sicherer".
Achja, manche Spiele benutzen auch die Funktion "wglSwapLayerBuffers".
ciao, Philipp