최근에 활성 창의 스크린 샷을 만드는 코드를 발견했습니다. 실제로 작동하지만 이미지가 너무 크면 현재 창 경계를 벗어납니다. 테두리 외부의 활성 창의 스크린 샷
이
내 프로그램과 함께 찍은 스크린 샷입니다 :이로 촬영 한 스크린 샷입니다 ALT + PRINTSCREEN : 난 그냥 원하는
public static class Screenshotter
{
[DllImport("user32.dll")]
static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
[DllImport("user32.dll")]
private static extern bool PrintWindow(IntPtr hwnd, IntPtr hdcBlt, uint nFlags);
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left; // x position of upper-left corner
public int Top; // y position of upper-left corner
public int Right; // x position of lower-right corner
public int Bottom; // y position of lower-right corner
}
public static void MakeScreenshot()
{
var foregroundWindowsHandle = GetForegroundWindow();
var rect = new RECT();
GetWindowRect(foregroundWindowsHandle, out rect);
Rectangle bounds = new Rectangle(rect.Left, rect.Top, rect.Right - rect.Left, rect.Bottom - rect.Top);
Bitmap bmp = new Bitmap(bounds.Width, bounds.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
g.CopyFromScreen(new Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size);
}
bmp.Save("test.png", ImageFormat.Png);
}
}
입니다 활성 창을 스크린 샷으로 표시하고 창 밖에서는 그렇지 않습니다. 나는 누군가가 나를 도울 수 있기를 바랍니다 :)
궁금한데, 'CursorPosition'의 목적은 무엇입니까? – tnw
오, 와우, 아무 목적도 없다. 사실 나는 단지 그것을 볼 수있다. –
창의 테두리 크기를 고려하십시오. http://msdn.microsoft.com/en-us/library/system.windows.forms.systeminformation(v=vs.110).aspx – Aybe