.net 在C语言中如何将截图与剪贴板上的副本分离#

.net 在C语言中如何将截图与剪贴板上的副本分离#,.net,c#-3.0,clipboard,screenshot,.net,C# 3.0,Clipboard,Screenshot,我这里有点问题。我想使用我构建的应用程序将屏幕截图保存到我的桌面。为此,我需要识别剪贴板上的哪些图像来自屏幕截图,哪些图像是复制的。但我不知道怎么做,我一直在寻找答案,但没有找到答案 该应用程序的理念是,它在后台始终处于活动状态,每当我按下PrintScreen按钮时,它都会直接将图像保存在我的桌面上。如果您想区分真实屏幕截图和虚假屏幕截图,请尝试在图片中嵌入肉眼看不到但您可以从代码中检测到的小变化,例如,表单客户端区域上位置(2,2)上的像素可能会有稍微改变(+3,+2,+1)的RGB值,这将

我这里有点问题。我想使用我构建的应用程序将屏幕截图保存到我的桌面。为此,我需要识别剪贴板上的哪些图像来自屏幕截图,哪些图像是复制的。但我不知道怎么做,我一直在寻找答案,但没有找到答案


该应用程序的理念是,它在后台始终处于活动状态,每当我按下PrintScreen按钮时,它都会直接将图像保存在我的桌面上。

如果您想区分真实屏幕截图和虚假屏幕截图,请尝试在图片中嵌入肉眼看不到但您可以从代码中检测到的小变化,例如,表单客户端区域上位置(2,2)上的像素可能会有稍微改变(+3,+2,+1)的RGB值,这将是不可见的


查找。

为什么不让应用程序截图并保存下来

这可能是唯一一种确保保存的图像是所需屏幕截图的方法

您可以创建bmp屏幕截图,如下所示:

Size s = Screen.PrimaryScreen.Bounds.Size;
Bitmap bmp = new Bitmap(s.Width, s.Height);
Graphics g = Graphics.FromImage(bmp);
g.CopyFromScreen(0, 0, 0, 0, s);
然后按如下方式保存bmp:

bmp.Save("PATHANDFILENAME");
更新


根据这些附加信息,您可能会看到保存屏幕截图和使用全局键盘挂钩的组合(,由Tom提供)。使用钩子可以捕获正在按下的打印屏幕,然后捕获并保存当前屏幕。您还可以取消正在按下的printscreen,防止它将屏幕复制到剪贴板。

Hmm。您可以组合以下代码以侦听剪贴板更改:

与一些额外的代码,以检查键状态之前


或者,使用,您可以侦听Ctrl+C或PrtScn,然后立即检查剪贴板。当然,正如评论所说,这不是万无一失的,但这只是一个开始。

我很确定这是不可能的。剪贴板上的截图(通过PrtScn键放在那里)看起来像普通的位图。好的,但是我可以看看它们是如何放到剪贴板上的吗?因此,看看是否有人通过打印屏幕或复制将其放在剪贴板上。这不是一种安全的方式。您可以收到将内容放在剪贴板上的通知(通过成为管理员)。应用程序可以通过OLE链接将数据放回剪贴板上的原始文档,但这是可选的,Windows PrtScn机制对此一无所知。为什么?如果您的目标是制作一个应用程序,在您按下PrintScreen时将屏幕截图保存到桌面,则制作一个应用程序,在按下PrintScreen时触发。屏幕截图还有哪些方式进入剪贴板?我尝试过这样做,但按下PrintScreen时什么也没发生。它与其他按钮一起工作,所以据我所知,代码是正确的。另外,它是一个应用程序,它将最初放在剪贴板上的所有内容流式传输,这个想法就是从这个应用程序中产生的。它不需要那么简单,因为它是供个人使用的。我已经编辑了我的问题。这个想法是,当我按下PrintScreen按钮时,它可以直接工作。因此,如果有一种方法可以在我按下打印屏幕按钮时触发我的应用程序中的事件,这将是一个很好的解决方案。我用热键检查按下了哪个按钮,如果是打印屏幕按钮,我的应用程序执行打印屏幕,然后保存图像。谢谢大家的帮助。