如何在C#中将剪贴板与剪贴板上的副本分开

时间:2010-12-06 14:32:45

标签: .net c#-3.0 clipboard screenshot

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

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

3 个答案:

答案 0 :(得分:4)

为什么不让应用程序截取屏幕并为您保存?

这可能是您确定要保存的图像是您想要的屏幕截图的唯一方法。

你可以像这样创建一个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提供的的组合。使用挂钩应该可以捕获正在按下的打印屏幕,然后捕获并保存当前屏幕。您也可以取消正在按下的打印屏幕,并防止它将屏幕复制到剪贴板。

答案 1 :(得分:1)

如果你想区分真实截图和虚假截图,请尝试在图片中嵌入一些看不见的小变化,但你可以从你的代码中检测出来,例如客户端上的位置像素(2,2)表格的区域可能会略微改变RGB值(+ 3,+ 2,+ 1) - 这是看不见的。

查找steganography

答案 2 :(得分:0)

嗯有趣。您可以将此代码组合起来侦听剪贴板更改:

http://codeguru.earthweb.com/columns/dotnettips/article.php/c7315/

使用一些额外的代码来检查keystate之前。

或者,使用global keyboard hook,您可以听取Ctrl + C或PrtScn,然后立即检查剪贴板。当然,正如评论所暗示的那样,这不是万无一失的,但这是一个开始。