【问题标题】:.NET Key Down Event [Combination of Keys not working].NET 按键按下事件 [按键组合不起作用]
【发布时间】:2017-09-27 13:55:58
【问题描述】:

我是编程新手。目前有按键组合问题。

[LWin + L]

Private Sub unit_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    If (e.KeyCode = Keys.L AndAlso e.KeyCode = Keys.LWin) Then
        MsgBox("Pressed!")
    End If
End Sub

消息框不显示。尝试过 KeyUp、PreviewKeyDown 但无济于事。

但是,它可以与其他组合一起使用,例如 [Ctrl + L]

If (e.KeyCode = Keys.L AndAlso e.Modifiers = Keys.Control) Then

在这里卡了半天。希望高手能提供解决方案。

谢谢!

【问题讨论】:

  • 一个键码不能同时是 L Win+L。你永远不会得到它,Win+L 先锁定工作站。
  • @HansPassant 希望应用程序在用户锁定屏幕时执行操作。我可以在 PC 上进行任何设置以使其正常工作吗? (比如锁屏延迟 1 秒?)谢谢!
  • @HansPassant 更新:找到 LWin + L 的替代品。谢谢。 stackoverflow.com/questions/17847744/…谢谢

标签: .net vb.net events key keydown


【解决方案1】:

由于Keys.LWin 在技术上不是修饰键,因此您必须使用变通方法来解决此问题。

这是一个相当简单的:

  • 每次按下某个键时,将其添加到表格中。

  • 检查我们的表格中是否存在所需的组合键,如果存在,则在按下它时执行您想要执行的任何操作。

  • 释放键后,将其从表中移除。

这样的事情应该可以工作:

'This is our table containing all currently pressed keys.
Private KeysPressed As New HashSet(Of Keys)

Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    'Add the currently pressed key to the table.
    KeysPressed.Add(e.KeyCode)

    'Determine if the combination LWin + L exists in our table (thus, if it is currently pressed)
    If KeysPressed.Contains(Keys.LWin) AndAlso KeysPressed.Contains(Keys.L) Then
        'Clear all pressed keys to avoid possible issues.
        KeysPressed.Clear()

        'Do your stuff here...
    End If
End Sub

Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp
    'Remove the released key from the table.
    KeysPressed.Remove(e.KeyCode)
End Sub

您可能应该使用 LWin + L 以外的其他组合键,因为 Windows 似乎不会将其发送到您的应用程序,因为它也是锁定的快捷方式你的电脑。

【讨论】:

  • 您好文森特,感谢您的快速回复。我试过你的方法,直接跳转到锁屏。但是,它在使用一键时起作用 If KeysPressed.Contains(Keys.LWin) Then 'Do your stuff... End If
  • @Tim:嗯,是的。 Windows 的内置快捷键之一是Win + L,它可以锁定您的计算机。你无法通过这样的代码来克服它。如果可能,您应该使用其他组合而不是LWin + L
  • @Tim :我刚刚用代码修复更新了我的答案。 -- 除了LWin + L 之外的任何其他组合似乎都可以工作(例如LWin + K),因此Windows 似乎没有将LWin + L 组合发送到您的应用程序,因为它是一个保留的快捷方式。否则它对我有用!
  • @Tim : 如果我的回答能解决您的问题,请按我帖子左侧的复选标记将其标记为 已接受 . -- 更多信息见:How does accepting an answer work?
  • @Vincent 更新:找到 LWin + L 的替代品。stackoverflow.com/questions/17847744/… 谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
  • 2017-09-09
  • 2020-10-25
  • 2023-04-02
  • 2013-10-10
  • 2019-07-12
相关资源
最近更新 更多