【问题标题】:Form_Keydown event is not working when PrintScreen is pressed按下 PrintScreen 时 Form_Keydown 事件不起作用
【发布时间】:2014-07-26 20:07:13
【问题描述】:

我正在尝试检测表单上的 Print Screen 键,但是像 PrtscSysRq 这样的键不会触发 @ 987654322@事件..

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

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

【问题讨论】:

标签: c# winforms keydown printscreen


【解决方案1】:

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

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

Capturing the Print Screen Key

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

【讨论】:

    【解决方案2】:

    按键处理事件仅在在表单获得焦点时按下按键时起作用。 表单属性事件和方法在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/进行代码转换

    【讨论】:

    • 我真正想做的是创建一个HotKey Control,所以重点放在表单上。
    • @joery :很明显,keyDown 事件只有在表单获得焦点时才会起作用。 tutorialspoint.com/vb.net/vb.net_forms.htm(表单事件。10)
    猜你喜欢
    • 2016-07-20
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多