Програмен PrScr (PrintScreen)
3 отговора
142 прегледа
Програмен PrScr (PrintScreen)
Как програмно да симулиран натискането на PrScr? По-точно, трябва ми screenshot на десктопа с всичките му форми, икони и каквото там има отворено. Трябва ми в битмап, да мога да си го запиша на диска. Някакви идеи?
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
keybd_event(VK_SNAPSHOT,0,0,0); // natiskane na PrtScr
keybd_event(VK_SNAPSHOT,0,KEYEVENTF_KEYUP,0); // otpuskane na PrtScr
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
[линк]
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
[линк]
Не е правилно ама работи...
е и аз много не го харесвам.
А ето едно по изчистено решение на кода който даваш - ползва само 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;
---
Колкото повече, толкова повече.
А ето едно по изчистено решение на кода който даваш - ползва само 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;
---
Колкото повече, толкова повече.