Глобальный отлов зажатия клавиши на клавиатуре - Visual Basic .NET
Формулировка задачи:
Здравствуйте, мне нужна ваша помощь. Мне нужно чтоб свернутая программа отлавливала моменты нажатия, отжатия и удержания клавиши клавиатуры. Программа должна приглушать звук системы пока клавиша удерживается и возвращать громкость когда я отпускаю клавишу. Реализовал это так:
Код работает нормально. Но за полтора часа программа сожрала около 90 мб памяти. И чем дальше тем больше памяти ей нужно.
Где моя ошибка?
Решение задачи: «Глобальный отлов зажатия клавиши на клавиатуре»
textual
Листинг программы
Private Declare Auto Function RegisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Boolean
Private Declare Auto Function UnregisterHotKey Lib "user32" (ByVal hWnd As IntPtr, ByVal id As Integer) As Boolean
Private Const WM_HOTKEY As Integer = &H312
Private Enum Modifiers As Integer
ALT = &H1
CONTROL = &H2
SHIFT = &H4
WIN = &H8
End Enum
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
RegisterHotKey(Me.Handle, 8, Nothing, Keys.A)
RegisterHotKey(Me.Handle, 16, Modifiers.CONTROL, Nothing)
RegisterHotKey(Me.Handle, 32, Modifiers.CONTROL, Keys.A)
End Sub
Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
UnregisterHotKey(Me.Handle, 8)
UnregisterHotKey(Me.Handle, 16)
UnregisterHotKey(Me.Handle, 32)
End Sub
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
MyBase.WndProc(m)
If (m.Msg = WM_HOTKEY) Then
Dim keys As String = String.Empty
Dim hotKeyId As Integer = m.WParam.ToInt32()
Select Case hotKeyId
Case 8
keys = "A"
Case 16
keys = "Ctrl"
Case 32
keys = "Ctrl+A"
End Select
MsgBox("Нажатие: " & keys)
End If
End Sub