Я только что написал класс текстового поля для захвата событий WM_KEYDOWN / WM_KEYUP / WM_SYSKEYDOWN / WM_SYSKEYUP:
Public Class MyTextbox
Inherits TextBox
Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101
Public Const WM_SYSKEYDOWN = &H104
Public Const WM_SYSKEYUP = &H105
Protected Overrides Sub WndProc(ByRef m As Message)
Select Case m.Msg
Case WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP
Dim vk = m.WParam
Form1.ListBox1.Items.Add(m.Msg.ToString & " - " & vk.ToInt64)
End Select
MyBase.WndProc(m)
End Sub
End Class
Это хорошо работает в Windows 10. Когда я нажимаю клавишу Ctrl + Shift, я получаю 4 строки (клавиши вверх и вниз для Ctrl + Shift) в списке
Однако в Windows 7, когда я нажимаю клавишу Ctrl + Shift, при событии KEYUP оно отсутствует.