Clipboard.GetImage()在MVC中返回null

时间:2018-07-17 10:46:01

标签: c# model-view-controller window

我有一个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();
    }

1 个答案:

答案 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 /调用来监视ClipboardHereClipboard的值更改后如何获得通知的指南。基本上,您将查看器设置为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。