Registriert seit: 19. Jul 2017
Ort: Berlin
47 Beiträge
Delphi XE7 Ultimate
|
Screenshot
23. Aug 2020, 15:15
Hi Delphianer
Ich befasse mich gerade mit den Screenshots
Delphi-Quellcode:
procedure Screenshot(shot: string);
var
dibH : hBitmap;
bits : pointer;
info : TBITMAPINFO;
width,height : integer;
screenDC,dibDC : hDC;
f : file of byte;
FileHeader : TBITMAPFILEHEADER;
begin
screenDC := getDC(getDeskTopWindow);
dibDC := createCompatibleDC(screenDC);
width := getDeviceCaps(screenDC,HORZRES);
height := getDeviceCaps(screenDC,VERTRES);
info.bmiHeader.biXPelsPerMeter := round(getDeviceCaps(screenDC,LOGPIXELSX)*39.37);
info.bmiHeader.biYPelsPerMeter := round(getDeviceCaps(screenDC,LOGPIXELSY)*39.37);
zeromemory(@info,sizeOf(info));
with info.bmiHeader do
begin
biSize := sizeOf(TBITMAPINFOHEADER);
biWidth := screen.width;
biheight := screen.height;
biplanes := 1;
biBitCount := 24;
biCompression := BI_RGB;
end;
dibH := createDIBSection(dibDC,info,DIB_RGB_COLORS,bits,0,0);
selectObject(dibDC,dibH);
bitblt(
dibDC,
0,0,width,height,
screenDC,
0,0,
SRCCOPY);
releaseDC(getDeskTopWindow,screenDC);
assignFile(f,shot);
reWrite(f);
if width and 3 <> 0 then
width := 4*((width div 4)+1);
with fileHeader do
begin
bfType := ord('B')+(ord('M')shl 8);
bfSize := sizeOf(TBITMAPFILEHEADER)+sizeOf(TBITMAPINFOHEADER)+width*height*3;
bfOffBits := sizeOf(TBITMAPINFOHEADER);
end;
blockWrite(f,fileHeader,sizeOf(TBITMAPFILEHEADER));
blockWrite(f,info.bmiHeader,sizeOf(TBITMAPINFOHEADER));
blockWrite(f,bits^,width*height*3);
closeFile(f);
deleteObject(dibH);
deleteDC(dibDC);
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
shot:string;
begin
shot:='shot.jpg';
screenshot(shot);
end;
Dies funktioniert auch aber mir ist aufgefallen das es den Taskbar nicht mit shootet.
Weis wer warum?
Update:
Die Bildschirm Skallierung war auf 125% wenn ich sie auf 100% setze dann shottet es richtig und der Taskbar ist korrekt.
Gibt es dafür ne Lösung wie man herausfinden kann welche skallierung gesetzt ist und es dann irgendwie berechen kann mit der screen.width und screen.height?
Grüsse Zodi
Pascal
Geändert von Zodi (23. Aug 2020 um 15:26 Uhr)
|
|
Zitat
|