Hier een gedeelte van mijn code (gedurende een jaar lang veelvuldig gebruikt door meerdere mensen, dus 't zou prima moeten werken ):
Code:
procedure TScreenShot.Grab;
var
pCursor: TPoint;
hActive: THandle;
hCIcon: HCURSOR;
dActive: DWORD;
dCurrent: DWORD;
pIcon: TIconInfo;
begin
hActive := GetForegroundWindow();
// Get cursor position
GetCursorPos(pCursor);
// KNIP: hier stond de capture code voor de verschillende instellingen,
// fullscreen, window only, etc...
// !! Haal hier de X en Y van de linkerbovenhoek van je region af van pCursor
// zodat je cursor op de screenshot ook goed terecht komt !!
// FCursor is een property die aangeeft of de cursor ook gecaptured moet worden
if FCursor then begin
// Hook up to the current window (for GetCursor)
dActive := GetWindowThreadProcessID(hActive, nil);
dCurrent := GetCurrentThreadID();
// Get cursor icon
if AttachThreadInput(dCurrent, dActive, True) then begin
hCIcon := GetCursor();
// Get hotspot info
GetIconInfo(hCIcon, pIcon);
Dec(pCursor.x, pIcon.xHotspot);
Dec(pCursor.y, pIcon.yHotspot);
if FCursorShadow then begin
// KNIP: sorry, dit zal je zelf moeten verzinnen, moet toch nog
// iets overhouden in mijn eigen applicatie ;)
end;
// Draw cursor
DrawIcon(FScreenshot.Canvas.Handle, pCursor.x, pCursor.y, hCIcon);
// Detach
AttachThreadInput(dCurrent, dActive, False);
end;
end;
end;
Bookmarks