2

我正在尝试检测Print Screen表单上的键,但是键喜欢Prtsc并且SysRq不会触发KeyDown事件..

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        // Trying to detect if it fires KeyDown, but it doesn't
        MessageBox.Show(e.KeyValue.ToString());
    }

我想不通,也许我真的很笨。。

4

2 回答 2

2

可以做到,但并不简单。你不能用KeyPressorKeyDown事件来做到这一点:正如你所发现的,它不会让它们触发。

但是您仍然可以使用 c# 来完成:您只需要使用 Windows API。因为相关代码比较长,所以贴出链接:

捕获打印屏幕键

顺便说一句,你并不傻。:) 尽管这看起来应该有一个明显、简单的答案,但它没有:这真的很复杂。但这是可以完成的。

于 2014-07-26T20:13:20.790 回答
1

仅当在窗体具有焦点时按下键时,键处理事件才会起作用。 表单属性事件和方法在http://www.tutorialspoint.com/vb.net/vb.net_forms.htm中有描述。以下代码将在消息框中显示按下的键名称(vb.net)

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        MsgBox(e.KeyCode.ToString)
End Sub 

您可以使用以下代码跟踪打印屏幕键的按下:

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    If e.KeyCode = Keys.PrintScreen Then
        MsgBox("Print screen key is pressed")
    End If
End Sub

注意:-这不适用于PrintScreen通过功能键实现的笔记本电脑。
关键代码参考: http: //msdn.microsoft.com/en-in/library/aa243025 (v=vs.60).aspx

  • 我认为它们对您的代码没有问题,原因是您的表单在按下键时没有焦点。

  • 选项卡索引0分配给表单中的任何其他控件,因此初始焦点将设置为该控件

抱歉我的 C# 不太好,你可以参考http://converter.telerik.com/进行代码转换

于 2014-07-26T20:55:53.370 回答