2014-01-07 4 views
1

Я пытаюсь сделать снимок экрана моего монитора после нажатия Экран печати button. С приведенным ниже кодом я пытаюсь проверить, есть ли какое-либо содержимое в буфере обмена. Если это так, я пытаюсь сохранить его в папке c:\. Но Clipboard.ContainsImage() всегда возвращает 0, но когда я вставляю в Paint, появляется изображение.Буфер обмена всегда null

Я где-то читал, что это можно сделать с делегатами. Пожалуйста, дайте мне знать, как это сделать.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
using System.Drawing.Imaging; 
namespace Example2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      if (Clipboard.ContainsImage()) 
      { 
       //System.Drawing.Image screenshot = new System.Drawing.Image(); 
       Image screenshot = Clipboard.GetImage(); 

       screenshot.Save("c:\\screenshot.jpg"); 
      } 
      Console.ReadLine(); 
     } 
    } 
} 
+3

Если программирование уже запущен, прежде чем нажать PrntScrn Чем она никогда не сможет захватить содержимое буфера обмена, так как метод был уже уволен, прежде чем буфер обмена имел какие-либо данные. Если вы открываете программу после этого, она должна иметь возможность извлекать содержимое буфера обмена, пока буфер обмена еще не очищен. Поэтому объясните нам, когда именно вы пытаетесь получить данные буфера обмена (например, до или после запуска программы.) – woutervs

+0

Работает ли это, если вы добавили [STAThread] перед вашим основным методом (см. Https://stackoverflow.com/questions/13571426/how-can-i-copy-a-string-to-clipboard-in-my-console-app-without-add-a-refe) – sgmoore

+0

@woutervs: я запускаю программу только после нажатия кнопки PrntScrn –

ответ

5

Проблема заключается в том, что вы пытаетесь получить доступ к буферу обмена из консольного приложения, но если бы вы попробовать его изнутри форме это будет работать. Также вы можете сделать вышеуказанный код, если вы поместите этот атрибут.

[STAThread()] 
static void Main(string[] args) 
{ 

Используйте это в качестве ссылки: Clipboard.getImage not working inside a thread

+0

после добавления вышеуказанных изменений, новая ошибка «Общая ошибка произошла в GDI +». произошла в строке "screenshot.Save (" c: \\ screenshot.jpg ");" –

+0

Вы не указали fileformat, как правило, microsoft имеет тенденцию сохранять все как bmp, изменить свой код на => screenshot.Save (@ "c: \ screenshot.png", System.Drawing.Imaging.ImageFormat.JPEG); – woutervs

+0

@woutervs: Я тоже пробовал это .. не работает. –

Смежные вопросы