я поддерживаю приложение, которое отображает ключ состояния Caps Lock, Num Lock и Вставить ключи. Я использовал метод user32.dll
GetKeyState()
для достижения этой цели, как так:Как определить INS состояние клавиши
Public Declare Function GetKeyState Lib "user32" Alias "GetKeyState" (ByVal nVirtKey As Long) As Integer
Public Sub CheckKeys()
lblCaps.ForeColor = CType(IIf(GetKeyState(Keys.CapsLock) <> 0, Color.Black, Color.Gray), System.Drawing.Color)
lblIns.ForeColor = CType(IIf(GetKeyState(Keys.Insert) <> 0, Color.Black, Color.Gray), System.Drawing.Color)
lblNum.ForeColor = CType(IIf(GetKeyState(Keys.NumLock) <> 0, Color.Black, Color.Gray), System.Drawing.Color)
End Sub
Это работало отлично, но теперь после обновления целевой базы для .NET 4.0, я получаю сообщение об ошибке от Managed Debugging Assistant:
Вызов функции PInvoke '[application] :: GetKeyState' имеет несбалансированный стек. Вероятно, это связано с тем, что управляемая подпись PInvoke не соответствует неуправляемой целевой сигнатуре. Убедитесь, что соглашение о вызове и параметры сигнатуры PInvoke соответствуют целевой неуправляемой подписи.
Я знаю, что я могу получить статус Caps Lock и Num Lock ключей с помощью My.Computer.Keyboard.CapsLock
и My.Computer.Keyboard.NumLock
булевых значений, соответственно, но есть подобный способ получить состояние ключа Вставки ?
Декларация неверна, аргумент должен быть целым, возвращаемое значение - короткое. Код тоже не так, вы должны проверить бит # 0, чтобы отличить текущее состояние от нажатого состояния. Используйте GetKeyState (Keys.CapsLock) и 1. –