снимок на C # (без монитора или даже с установленной графической картой) - PullRequest
0 голосов
/ 12 декабря 2010

Я пытаюсь записать все, что происходит в моей маленькой программе (видео и аудио).Я нашел на форумах людей, которые упоминали, что может быть большая проблема, если снимок экрана делается на машине без монитора - физически не подключен монитор, или когда видеокарта переводит монитор в спящий режим или даже без установленной видеокарты (серверы).Есть ли способ решить эту проблему?в настоящее время у меня нет доступа к серверу и даже не знаю, какова его конфигурация (((

в настоящее время я использую этот код для создания снимков каждые 50 миллисекунд, и он отлично работает на настольных ПК (не могу проверитьэтот код без монитора ... я использую моноблочный рабочий стол HP touchsmart)

            IntPtr myIntptr = FormElement.Handle;
            int hwndInt = myIntptr.ToInt32();
            IntPtr hwnd = myIntptr;
            Bitmap bm = new Bitmap(FormElement.Width, FormElement.Height);
            Graphics g = Graphics.FromImage(bm);
            IntPtr hdc = g.GetHdc();
            bool result = PrintWindow(hwnd, hdc, 0);
            g.ReleaseHdc(hdc);
            g.Flush();
            if (result == true)
            {
                bm.Save(aFileName, ImageFormat.Jpeg);
            }

этот вариант работает, если я сверну свое окно, и это тоже не очень хорошо.

извините за мой английскийи спасибо за любой совет.

1 Ответ

0 голосов
/ 12 декабря 2010

Попробуй так:

public static void ScreenCapture(string filename, int width, int height)
{
    var bounds = new Rectangle(0, 0, width, height);
    using (var bitmap = new Bitmap(bounds.Width, bounds.Height))
    using (Graphics g = Graphics.FromImage(bitmap))
    {
        g.CopyFromScreen(
            new Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size
        );
        bitmap.Save(filename, ImageFormat.Jpeg);
    }
}
...