我有一个MVC应用程序,正在运行Windows的SnippingTool.exe来截取屏幕截图。当我尝试将捕获的图像保存到特定位置时,Clipboard.GetImage()返回null。
[STAThread]
public ActionResult AddImages(UserEntry model)
{
if (!Environment.Is64BitProcess)
System.Diagnostics.Process.Start("C:\\Windows\\sysnative\\SnippingTool.exe");
else
System.Diagnostics.Process.Start("C:\\Windows\\system32\\SnippingTool.exe");
IDataObject obj = Clipboard.GetDataObject(); //returns null
Image img1 = Clipboard.GetImage(); // returns null
return View();
}
答案 0 :(得分:0)
问题是您启动SnippingTool
,然后立即尝试从Clipboard
获取数据。由于Clipboard.GetImage()
刚好在SnippingTool
开始之后执行,因此您无法及时为Clipboard
分配图像。 (因为您只有几毫秒的时间)
因此,在100%确保已将所需的图像存储在其中之后,请访问Clipboard
。做例如在按钮点击事件中:
private void button1_Click(object sender, EventArgs e)
{
IDataObject obj = Clipboard.GetDataObject();
Image img1 = Clipboard.GetImage();
//now do with the image whatever you want, you may want to store it as a public field thought to
//access the image in your whole application
}
或者您可以通过一些p /调用来监视Clipboard
。 Here是Clipboard
的值更改后如何获得通知的指南。基本上,您将查看器设置为Clipboard
,因此您将收到有关分配给Clipboard
的值的WindowsMessage,该值可以通过覆盖WndProc()
函数并为它添加检查来在 public function attributeLabels()
{
return [
'id' => Yii::t('centre', 'ID'),
'state_office_id' => Yii::t('centre', 'State Office'),
'study_centre_id' => Yii::t('centre', 'Study Centre'),
'programme_id' => Yii::t('centre', 'Programme'),
];
}
函数中进行拦截。这个具体提到的WindowsMessage。