小编Dan*_*iel的帖子

在Winforms中,PreviewKeyDown()从不为任何键触发

我原本试图让我的程序获得箭头键的输入(向上,向下,向左和向右),但发现在KeyDown()中,这些键永远不会发生.之后我发现我可以通过进入PreviewKeyDown()函数并设置来启用箭头键:

e.IsInputKey = true;
Run Code Online (Sandbox Code Playgroud)

无论周围的条件和逻辑.麻烦的是当我写这个函数时:

private void Form1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{ /*whatever logic goes here*/}
Run Code Online (Sandbox Code Playgroud)

它从未被解雇; 我甚至设置了一个断点,可以在函数内部触发来确定.另外,我试过:

this.Focus()
Run Code Online (Sandbox Code Playgroud)

在构造函数中,以确保主窗体具有焦点,但它没有任何区别.唯一有效的方法是将焦点设置为我创建的Button,并且该按钮还通过调用上面的Form1_PreviewKeyDown()触发PreviewKeyDown事件.

所以在这一点上我有一个工作方法,但任何人都可以帮助我理解为什么它从未被解雇过?我假设由于某种原因,Form的PreviewKeyEvent永远不会触发,但我真的不知道为什么.

c# winforms

4
推荐指数
2
解决办法
5927
查看次数

有没有办法检测屏幕截图或录制?

我正在为朋友制作一个Winforms程序,他想要实现的功能之一是隐藏文本框的内容不被记录;这意味着他希望它免受屏幕截图和屏幕录制的影响。

在这一点上,我试图解释这是徒劳的,解释说

  1. 有大量程序可用于记录/捕获屏幕,并且尝试观看所有程序不仅解释得太详尽,而且毫无意义,因为任何称职的程序员都可以拼凑出个人可以在不使用任何已知名称的情况下截取屏幕截图的程序
  2. 即使你以某种方式设法阻止了每个程序,一个人也只能拍下屏幕的照片

在回答屏幕截图的问题时,他说虽然我们不能让程序完美,但我们可以尽可能地让别人“破解”它变得困难。(个人观点认为他是对的,但我认为我们不应该为这样一个简单的解决方法而过火)

然而,他对存在大量不同录音程序的问题的回答有点有趣,但我不知道足以让他有信心地回答。他的理论是所有程序中都必须有一些共同的动作,因为在某种程度上,它们都抓取了显示在屏幕上的数据副本以供使用,而且我们理论上应该能够检测到该行动并作出相应的反应。

所以我的问题是这样的:有没有人知道记录屏幕的程序是否有一个共同的动作,如果有一个共同的动作,它是什么?

screenshot screen screen-capture

3
推荐指数
2
解决办法
10万
查看次数

标签 统计

c# ×1

screen ×1

screen-capture ×1

screenshot ×1

winforms ×1