繁体   English   中英

如何获取 VB.NET 中 Caps Lock 的当前 state?

[英]How do I get the current state of Caps Lock in VB.NET?

如何使用 VB.NET 确定 Caps Lock 是否已激活?

这是我之前的问题的后续。

Control.IsKeyLocked(Keys) 方法 - MSDN

Imports System
Imports System.Windows.Forms
Imports Microsoft.VisualBasic

Public Class CapsLockIndicator

    Public Shared Sub Main()
        if Control.IsKeyLocked(Keys.CapsLock) Then
            MessageBox.Show("The Caps Lock key is ON.")
        Else
            MessageBox.Show("The Caps Lock key is OFF.")
        End If
    End Sub 'Main
End Class 'CapsLockIndicator

C#版本:

using System;
using System.Windows.Forms;

public class CapsLockIndicator
{
    public static void Main()
    {
        if (Control.IsKeyLocked(Keys.CapsLock)) {
            MessageBox.Show("The Caps Lock key is ON.");
        }
        else {
            MessageBox.Show("The Caps Lock key is OFF.");
        }
    }
}

我不是 VB.NET 方面的专家,所以我只想到了 PInvoke:

Declare Function GetKeyState Lib "user32" 
   Alias "GetKeyState" (ByValnVirtKey As Int32) As Int16

Private Const VK_CAPSLOCK = &H14

If GetKeyState(VK_CAPSLOCK) = 1 Then ...

创建一个设置为 5 毫秒并启用的 Timer。
然后制作一个名为label1的 label 。 之后,尝试以下代码(在计时器事件处理程序中)。

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    If My.Computer.Keyboard.CapsLock = True Then
        Label1.Text = "Caps Lock Enabled"
    Else
        Label1.Text = "Caps Lock Disabled"
    End If
End Sub

.rp发布的解决方案有效,但与Me.KeyDown事件处理程序冲突。
当按下回车键时,我有一个在 function 中调用符号的子程序(如下所示)。
My.Computer.Keyboard.CapsLock state 有效且与Me.Keydown不冲突。

Private Sub WindowLogin_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown

    If Keyboard.IsKeyDown(Key.Enter) Then
        Call SignIn()
    End If

End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM