71 lines
2.8 KiB
C#
71 lines
2.8 KiB
C#
using Aurora.Api;
|
|
using System;
|
|
using System.Drawing;
|
|
using System.Drawing.Imaging;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace VisionCommon {
|
|
public class ScreenshotHelper {
|
|
private static Logger _Logger = new Logger("ScreenshotHelper");
|
|
|
|
public const int SHOWNORMAL = 1;
|
|
public const int SHOWMINIMIZED = 2;
|
|
public const int SHOWMAXIMIZED = 3;
|
|
|
|
public static Bitmap ScreenShotWindow(string windowTitle) {
|
|
try {
|
|
IntPtr whandle = IntPtr.Zero;
|
|
Rect window = new Rect();
|
|
|
|
whandle = User32.FindWindow(null, windowTitle);
|
|
if (whandle == IntPtr.Zero) {
|
|
return null;
|
|
}
|
|
|
|
//User32.ShowWindowAsync(whandle, SHOWNORMAL); // 윈도우가 최소화 되어 있다면 활성화 시킨다.
|
|
User32.ShowWindowAsync(whandle, SHOWMAXIMIZED); // 윈도우가 최대화 시킨다.
|
|
User32.SetForegroundWindow(whandle); // 윈도우에 포커스를 줘서 최상위로 만든다.
|
|
User32.GetWindowRect(whandle, ref window);
|
|
int width = window.Right - window.Left;
|
|
int height = window.Bottom - window.Top;
|
|
System.Drawing.Size size = new System.Drawing.Size();
|
|
size.Width = width;
|
|
size.Height = height;
|
|
|
|
var bmpScreenshot = new Bitmap(width,
|
|
height,
|
|
PixelFormat.Format32bppArgb);
|
|
var gfxScreenshot = Graphics.FromImage(bmpScreenshot);
|
|
gfxScreenshot.CopyFromScreen(window.Left, window.Top,
|
|
0, 0, size,
|
|
CopyPixelOperation.SourceCopy);
|
|
return bmpScreenshot;
|
|
}
|
|
catch (Exception e) {
|
|
_Logger.FuncE(e.Message);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private class User32 {
|
|
[DllImport("user32.dll")]
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|
public static extern bool SetForegroundWindow(IntPtr hWnd);
|
|
[DllImport("user32.dll", CharSet = CharSet.Auto)]
|
|
public static extern IntPtr FindWindow(string strClassName, string strWindowName);
|
|
[DllImport("user32.dll")]
|
|
public static extern bool GetWindowRect(IntPtr hwnd, ref Rect rectangle);
|
|
[DllImport("user32.dll")]
|
|
public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
|
|
}
|
|
|
|
public struct Rect {
|
|
public int Left { get; set; }
|
|
public int Top { get; set; }
|
|
public int Right { get; set; }
|
|
public int Bottom { get; set; }
|
|
}
|
|
}
|
|
}
|