Глобальный отлов зажатия клавиши на клавиатуре - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д