Глобальный отлов зажатия клавиши на клавиатуре - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5
Похожие ответы