Guten Tag, ich habe folgendes Problem. Und zwar habe ich ein Programm vor mir welches sich den Bildschirm abfilmen und per Netzwerk übertragen kann. Es holt sich per CreateDC ein
DC vom Desktop um einen Screenshot zu machen, ich habe mir also eine
DLL gebastelt die CreateDCW Hookt und das
DC von einem aus einer Datei geladenen Bitmap zurückgeben soll. Soweit so gut, es funktioniert nicht ganz... Bei der Software die ich da modifiziere sehe ich nur noch ein schwarzes Bild anstelle des geladenen Bitmaps. Ich zeige euch mal meinen Code, da wird sicher jemand meinen Denkfehler finden.
Danke im Vorraus!
Delphi-Quellcode:
library sigeye;
uses
SysUtils,
Classes,
Windows,
Graphics,
detour
in '
detour.pas';
{$R *.res}
var
hFakeDC:Cardinal;
pOriCreateDCW:Pointer;
FakeBMP:TBitmap;
function OriCreateDCW(Driver, Device:PWideChar; Output, InitData:Pointer):Cardinal;
stdcall;
asm
jmp pOriCreateDCW
end;
function MyCreateDCW(Driver, Device:PWideChar; Output, InitData:Pointer):Cardinal;
stdcall;
begin
if (Driver = '
DISPLAY')
then begin
Result := hFakeDC;
end else begin
Result := OriCreateDCW(Driver, Device, Output, InitData);
end;
end;
procedure StartProc;
stdcall;
begin
FakeBMP := TBitmap.Create;
FakeBMP.LoadFromFile('
c:\fakescreen.bmp');
hFakeDC := FakeBMP.Canvas.Handle;
DetourHook('
gdi32.dll', '
CreateDCW', @MyCreateDCW, pOriCreateDCW);
end;
begin
StartProc;
end.