For full screenshots, I use this code:
form1.Hide; sleep(500); bmp := TBitmap.Create; bmp.Height := Screen.Height; bmp.Width := Screen.Width; DCDesk := GetWindowDC(GetDesktopWindow); BitBlt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DCDesk, 0, 0, SRCCOPY); form1.Show ; FileName := 'Screenshot_'+FormatDateTime('mm-dd-yyyy-hhnnss',now()); bmp.SaveToFile(Format('C:\Screenshots\%s.bmp', [FileName])); ReleaseDC(GetDesktopWindow, DCDesk); bmp.Free;
How can I convert that to take a screenshot of only the active window.
GetForegroundWindowinstead ofGetDesktopWindow. You have done it right in your improved version.When I executed your code, my Delphi IDE was captured and as it is on fullscreen by default, it created the illusion of a fullscreen screenshot. (Even though your code is mostly correct)
Considering the above steps, I was successfully able to create a single-window screenshot with your code.
Just a hint: You can
GetDCinstead ofGetWindowDCif you are only interested in the client area. (No window borders)EDIT: Here’s what I made with your code:
You should not use this code! Look at the improved version below.
EDIT 2: As requested I’m adding a better version of the code, but I’m keeping the old one as a reference. You should seriously consider using this instead of your original code. It’ll behave much nicer in case of errors. (Resources are cleaned up, your form will be visible again, …)