94 lines
3.5 KiB
C#
94 lines
3.5 KiB
C#
using System;
|
|
using System.Linq;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Text;
|
|
using System.Runtime.InteropServices;
|
|
using System.Windows.Forms;
|
|
|
|
namespace INT69DB_2A
|
|
{
|
|
public static class IntechGraphics
|
|
{
|
|
public enum TernaryRasterOperations : uint
|
|
{
|
|
/// <summary>dest = source</summary>
|
|
SRCCOPY = 0x00CC0020,
|
|
/// <summary>dest = source OR dest</summary>
|
|
SRCPAINT = 0x00EE0086,
|
|
/// <summary>dest = source AND dest</summary>
|
|
SRCAND = 0x008800C6,
|
|
/// <summary>dest = source XOR dest</summary>
|
|
SRCINVERT = 0x00660046,
|
|
/// <summary>dest = source AND (NOT dest)</summary>
|
|
SRCERASE = 0x00440328,
|
|
/// <summary>dest = (NOT source)</summary>
|
|
NOTSRCCOPY = 0x00330008,
|
|
/// <summary>dest = (NOT src) AND (NOT dest)</summary>
|
|
NOTSRCERASE = 0x001100A6,
|
|
/// <summary>dest = (source AND pattern)</summary>
|
|
MERGECOPY = 0x00C000CA,
|
|
/// <summary>dest = (NOT source) OR dest</summary>
|
|
MERGEPAINT = 0x00BB0226,
|
|
/// <summary>dest = pattern</summary>
|
|
PATCOPY = 0x00F00021,
|
|
/// <summary>dest = DPSnoo</summary>
|
|
PATPAINT = 0x00FB0A09,
|
|
/// <summary>dest = pattern XOR dest</summary>
|
|
PATINVERT = 0x005A0049,
|
|
/// <summary>dest = (NOT dest)</summary>
|
|
DSTINVERT = 0x00550009,
|
|
/// <summary>dest = BLACK</summary>
|
|
BLACKNESS = 0x00000042,
|
|
/// <summary>dest = WHITE</summary>
|
|
WHITENESS = 0x00FF0062
|
|
}
|
|
|
|
[DllImport("Coredll.dll")]
|
|
private static extern IntPtr GetDC(IntPtr hWnd);
|
|
[DllImport("Coredll.dll")]
|
|
private static extern IntPtr CreateCompatibleDC(IntPtr hdc);
|
|
[DllImport("coredll.dll")]
|
|
private static extern IntPtr CreateCompatibleBitmap(IntPtr hdc, int nWidth, int nHeight);
|
|
[DllImport("coredll.dll")]
|
|
private static extern IntPtr SelectObject(IntPtr hDC, IntPtr hObject);
|
|
[DllImport("coredll.dll")]
|
|
private static extern int BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, uint dwRop);
|
|
[DllImport("coredll.dll")]
|
|
private static extern int DeleteDC(IntPtr hdc);
|
|
[DllImport("coredll.dll")]
|
|
private static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDC);
|
|
[DllImport("coredll.dll")]
|
|
private static extern IntPtr DeleteObject(IntPtr hObject);
|
|
|
|
public static Bitmap CopyFromScreen()
|
|
{
|
|
int width = Screen.PrimaryScreen.Bounds.Width;
|
|
int height = Screen.PrimaryScreen.Bounds.Height;
|
|
|
|
IntPtr hBitmap;
|
|
IntPtr hDC = GetDC(IntPtr.Zero);
|
|
IntPtr hMemDC = CreateCompatibleDC(hDC);
|
|
|
|
hBitmap = CreateCompatibleBitmap(hDC, width, height);
|
|
|
|
if (hBitmap != IntPtr.Zero)
|
|
{
|
|
IntPtr hOld = (IntPtr)SelectObject(hMemDC, hBitmap);
|
|
BitBlt(hMemDC, 0, 0, width, height, hDC, 0, 0, (uint)TernaryRasterOperations.SRCCOPY);
|
|
SelectObject(hMemDC, hOld);
|
|
|
|
DeleteDC(hMemDC);
|
|
ReleaseDC(IntPtr.Zero, hDC);
|
|
|
|
Bitmap bmp = System.Drawing.Image.FromHbitmap(hBitmap);
|
|
DeleteObject(hBitmap);
|
|
|
|
return bmp;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
}
|