Програмен PrScr (PrintScreen)

3 отговора 142 прегледа
#1

Програмен PrScr (PrintScreen)

Как програмно да симулиран натискането на PrScr? По-точно, трябва ми screenshot на десктопа с всичките му форми, икони и каквото там има отворено. Трябва ми в битмап, да мога да си го запиша на диска. Някакви идеи?

Отговор
в отговор на XXL #2

Re: Програмен PrScr (PrintScreen)

Towa shte ti naorawi "snimka" na Desktop-a i shte ti ya zapishe w Clipboard.

keybd_event(VK_SNAPSHOT,0,0,0); // natiskane na PrtScr
keybd_event(VK_SNAPSHOT,0,KEYEVENTF_KEYUP,0); // otpuskane na PrtScr

Отговор
в отговор на XXL #3

tva s keybd ne e pravilno

q probvaj tova ;) maj raboti :)

var
ACanvas: TCanvas;
ABitmap: TBitmap;
begin
ACanvas := TCanvas.Create;
ABitmap := TBitmap.Create;
ABitmap.Width := Screen.Width;
ABitmap.Height := Screen.Height;
ACanvas.Handle := GetDC(0);
ABitmap.Canvas.CopyRect(Rect(0,0,Screen.Width,Screen.Height),
ACanvas,
Rect(0,0,Screen.Width,Screen.Height));
// TUK SI PRAVI KVOTO SHTESH S ABitmap, v sluchaq go slagam v edin TImage
Image1.Picture.Assign(ABitmap);
ACanvas.Free;
ABitmap.Free;
end;

BashBabait
[линк]

Отговор
в отговор на BashBabait #4

Не е правилно ама работи...

е и аз много не го харесвам.

А ето едно по изчистено решение на кода който даваш - ползва само API функции което би трябвало да раобти по-бързо.

function CAPTURESCREEN:TBitmap;
var
DC : HDC;
ABitmap:TBitmap;
begin
DC := GetDC (GetDesktopWindow); ///!!!!!!
ABitmap:=TBitmap.Create;
try
ABitmap.Width := GetDeviceCaps (DC, HORZRES);
ABitmap.Height := GetDeviceCaps (DC, VERTRES);
BitBlt(ABitmap.Canvas.Handle, 0, 0, ABitmap.Width,
ABitmap.Height,DC, 0, 0, SRCCOPY);
finally
ReleaseDC (GetDesktopWindow, DC);
end;
Result:=ABitmap;
end;

---
Колкото повече, толкова повече.
Отговор