我试图用控制台应用程序截取我的屏幕截图,然后将其保存到我的桌面但是由于某种原因..它告诉我,当我的剪贴板显示为空时,我的剪贴板是空的。如果你检查代码,你可以看到我按PrintScreen,当你这样做时,它将它保存到剪贴板。
using System;
using System.Drawing;
using System.Windows.Forms;
namespace ScreenshotConsole
{
class Program
{
static void Main(string[] args)
{
screenshot();
Console.WriteLine("Printescreened");
saveScreenshot();
Console.ReadLine();
}
static void screenshot()
{
SendKeys.SendWait("{PRTSC}");
}
static void saveScreenshot()
{
//string path;
//path = "%AppData%\\Sys32.png"; // collection of paths
//path = Environment.ExpandEnvironmentVariables(path);
if (Clipboard.ContainsImage() == true)
{
Image image = (Image)Clipboard.GetDataObject().GetData(DataFormats.Bitmap);
image.Save("image.jpeg", System.Drawing.Imaging.ImageFormat.Jpeg);
}
else
{
Console.WriteLine("Clipboard empty.");
}
}
}
}
答案 0 :(得分:5)
屏幕截图需要一些时间,所以在按下{PRTSC}
之后你应该添加延迟:
static void screenshot()
{
SendKeys.SendWait("{PRTSC}");
Thread.Sleep(500);
}
好的,我弄清楚了,将STAThreadAttribute
添加到您的主要方法:
[STAThread]
static void Main(string[] args)
{
screenshot();
Console.WriteLine("Printescreened");
saveScreenshot();
Console.ReadLine();
}
MSDN说:
Clipboard类只能在设置为单线程单元(STA)模式的线程中使用。要使用此类,请确保使用STAThreadAttribute属性标记Main方法。