是否有可能“欺骗”PrintScreen,在捕获之前用其他东西替换我的表单内容?

时间:2010-05-15 19:59:44

标签: windows detect printscreen

我有点挑战。

在我们产品的早期版本中,我们有一个错误消息窗口(最后的手段,未处理的异常),它显示了异常消息,类型,堆栈跟踪+各种信息。

这个窗口是打印屏幕友好的,因为如果用户只是进行了打印屏幕捕获,并通过电子邮件发送给我们屏幕截图,我们几乎拥有了开始诊断问题所需的一切。

然而,对于普通用户来说,这个表单被认为太技术性和“可怕”了,所以它已经变得更加友好了,仍然显示错误信息,但不是堆栈跟踪和一些更加血腥的细节我我还是想得到。此外,该表格还增加了向我们发送包含我们之前所有内容的文本文件的功能+许多其他技术细节,基本上我们需要的一切。

但是,用户仍然使用PrintScreen捕获表单的内容并将电子邮件发送回给我们,这意味着我现在的信息量不会超过最佳状态。

所以我在想。我是否有可能预先渲染一个与我的表格大小相同的位图,我需要的一切,检测到PrintScreen被击中,并在捕获之前用我的位图快速换出表单内容,然后再返回?

在您说“只是教育用户”之前,是的,这不会起作用。这些不是用户,他们是我们客户的用户,所以我们真的不能告诉他们这么多。

或者,除此之外,有没有办法让我检测PrintScreen,告诉Windows忽略它,然后通过将前面提到的预先渲染的位图转储到剪贴板上以备放入电子邮件来对它作出反应?

代码是.NET 3.5中的C#3.0,如果它很重要,但是要查看/ for的内容的指针就足够了。

我们的错误报告窗口具有以下功能:

  • 显示错误发生时的截图(包含当时程序的所有打开窗口,显示错误对话框之前)
  • 显示一个文本文件,其中包含我们可以想到的所有血腥细节(但没有敏感内容)
  • 将上述两个文件保存到磁盘,后者附加到电子邮件或用户的其他内容
  • 通过电子邮件将上述两个文件发送给我们,方法是打开新的支持案例,或输入现有的支持案例编号以向其添加更多信息
  • 忽略问题并希望它消失(返回应用程序)
  • 退出申请(最后手段)

我们仍会从某些用户获取屏幕截图。不过,请注意,所以我的问题基本上就是如何让PrintScreen按钮为那些仍在使用它的用户提供更多帮助。

4 个答案:

答案 0 :(得分:2)

一个选项:使用小的低对比度类型将堆栈跟踪和其他可怕的东西放入错误屏幕 - 例如浅灰色的深灰色 - 这样用户甚至看不到它,但是打印屏幕会捕获它。

但是如果你想检测PrintScreen并做自己的事情,this就像你想要的一个例子。

答案 1 :(得分:1)

如何为他们提供执行这些操作以及执行打印屏幕的“打印屏幕”按钮?如果您遇到让客户发送错误详细信息的方法,这可能是一种更容易的方法。

取消我在下面的评论以便于参考(看起来很有帮助):

codeproject.com/KB/cs/PrintScreen.aspx

答案 2 :(得分:1)

当错误弹出窗口处于活动状态时,是否可以完全禁用“打印屏幕”按钮?让它显示一条消息:“请使用屏幕中间的清晰可见按钮报告错误”我同意它打破了预期的功能,但如果你的用户真的那么愚蠢,你能做什么......

或者,让它自动报告错误(或者在本地存储数据,如果在没有询问某些原因的情况下无法发送,则稍后提取),而不询问用户。如果您希望能够将打印屏幕截图与详细的错误数据相关联,请让它发送一个唯一的ID,其中的数据也会显示在弹出窗口的一角。

答案 3 :(得分:1)

这在理论上......处理它的最好方法我会想到

  • 拦截WM_PRINT消息或将一个消息注入您的流程...请参阅此文here
  • 安装系统范围的键盘挂钩并截取打印屏幕键并在捕获之前将其与内容交换。现在,我可以为您指出几个地方,CodeProjectherekeyboard spy以及最后,global Mouse and keyboard hook在CodeProject上。

现在,一旦截取打印屏幕,通过捕获想要捕获的内容来调用WM_PRINT消息。

我知道这很简短,但我希望这能让你顺利。