为什么我的应用程序告诉我,我的剪贴板是空的,而显然它不是
本文关键字:我的 告诉我 剪贴板 为什么 应用程序 | 更新日期: 2023-09-27 18:09:47
我试图用控制台应用程序截取屏幕截图,然后将其保存到我的桌面,但出于某种原因…它告诉我,我的剪贴板是空的,而显然它不是…如果你检查代码,你可以看到我按下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.");
}
}
}
}
截图需要一些时间,所以你应该在按下{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显示:
更详细剪贴板类只能在设置为单线程公寓(STA)模式的线程中使用。要使用这个类,请确保您的Main方法被STAThreadAttribute属性标记。