События KeyUp / KeyDown уровня приложения в VB.NET (не на уровне формы Windows) - PullRequest
1 голос
/ 01 апреля 2012

Я создаю надстройку для Excel, написанную на VB.NET. Я хотел бы связать события KeyDown и KeyUp с электронной таблицей, чтобы записывать, когда пользователь нажимает и отпускает клавиши со стрелками во время навигации по электронной таблице.

В идеале эти события должны быть встроены в Excel вместе с собственными событиями SheetActivate и SheetSelectionChange, например. Увы, нет.

Обратите внимание, что меня НЕ интересуют события KeyDown / KeyUp для элементов управления формы Windows, поскольку я не использую форму Windows для этого. Скорее, я хочу создать эти события на уровне приложения Excel, книги или листа.

1 Ответ

1 голос
/ 02 апреля 2012

Вы можете использовать вызов Windows API GetAsyncKeyState вместе с событием SelectionChange

Вот небольшой фрагмент VBA для демонстрации

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Key As Long
    For Key = 3 To 255
        If GetAsyncKeyState(Key) Then
            MsgBox "KeyCode: " & Key & " was pressed."
        End If
    Next
End Sub
...