我试图检测打印屏幕键在我的形式,但键像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());
}
我想不出来,可能是我太笨了
这是可以做到的,但并不简单。你不能对KeyPress
或KeyDown
事件这样做:正如你已经发现的那样,它不会使它们着火。
但是你仍然可以用c#来做:你只需要使用Windows api。因为相关代码很长,所以我发布了链接:
抓取打印屏幕键
顺便说一句,你并不笨。:)尽管这看起来应该有一个明显、简单的答案,但事实并非如此:这真的很复杂。但这是可以做到的。键处理事件将只在窗体有焦点时按下键时起作用。表单属性事件和方法的描述见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/代码转换