Делаем скриншоты в C# под .NET CF (из архивов)
Публикация из архивов, вдруг пригодится...
Столкнулся когда-то с необходимостью делать скриншоты с КПК, и так и не нашёл ни одной подходящей программы. А именно простой, маленькой и чтобы ничего не устанавливалось, но при этом работала.
Решил написать, часа два окучивал интернет по поводу того как это сделать - всё оказалось не так то просто, на мобильных устройствах через .NET в чистом виде не получится только через API.
Итак, без лишних слов сразу к делу (код):
//Подключаемые библиотеки...
[DllImport("coredll.dll", EntryPoint = "GetDesktopWindow")]
public static extern IntPtr GetDesctopWindow();
[DllImport("coredll.dll", EntryPoint = "GetDC")]
public static extern IntPtr GetDC(IntPtr hWnd);
[DllImport("coredll.dll", EntryPoint = "ReleaseDC")]
public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDC);
[DllImport("coredll.dll")]
public static extern int BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, uint dwRop);
const int SRCCOPY = 0x00CC0020;
//Сам код...
string path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\myPic.bmp";
//Сохраняем изображение.
Rectangle rect = new Rectangle(0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Bitmap bmp = new Bitmap(rect.Width, rect.Height);
Graphics g = Graphics.FromImage(bmp);
IntPtr hwnd = GetDesctopWindow();
IntPtr hdc = GetDC(hwnd);
BitBlt(g.GetHdc(), 0, 0, rect.Width, rect.Height, hdc, rect.Left, rect.Top, SRCCOPY);
bmp.Save(path, System.Drawing.Imaging.ImageFormat.Bmp);
ReleaseDC(hwnd, hdc);
bmp.Dispose();
g.Dispose();
P.S. Для работы потребует .NET CF 3.5