Levelcode-IBRCAD/IBRCAD/Printer/PrintScreenHelper.cs

66 lines
1.9 KiB
C#

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
using System.Windows.Forms;
public class PrintScreenHelper
{
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
private static extern bool GetWindowRect(IntPtr hWnd, out RECT rect);
[StructLayout(LayoutKind.Sequential)]
private struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
public static Bitmap CaptureActiveWindow()
{
IntPtr hWnd = GetForegroundWindow();
RECT rect;
GetWindowRect(hWnd, out rect);
int width = rect.Right - rect.Left;
int height = rect.Bottom - rect.Top;
Bitmap bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb);
using (Graphics g = Graphics.FromImage(bmp))
{
g.CopyFromScreen(rect.Left, rect.Top, 0, 0, new Size(width, height), CopyPixelOperation.SourceCopy);
}
return bmp;
}
public static void SaveCapture(string filePath)
{
Bitmap bmp = CaptureActiveWindow();
bmp.Save(filePath, ImageFormat.Png);
bmp.Dispose();
}
public static void SaveCapture()
{
using (SaveFileDialog saveFileDialog = new SaveFileDialog())
{
saveFileDialog.Filter = "Arquivos de imagem (*.png)|*.png|Todos os arquivos (*.*)|*.*";
saveFileDialog.Title = "Salvar Captura de Tela";
saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
Bitmap bmp = CaptureActiveWindow();
bmp.Save(saveFileDialog.FileName, ImageFormat.Png);
bmp.Dispose();
}
}
}
}