Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
2 / 2 / 1
Регистрация: 30.12.2012
Сообщений: 18
1

Игнорирование нажатия на клавиатуре кнопок Enter и Space

16.02.2014, 22:52. Показов 1060. Ответов 3
Метки нет (Все метки)

Помогите пожалуйста с написанием одной программы...
Мне нужно сделать так, чтобы нажатия кнопок Enter и Space игнорировалось.

Заранее спасибо!
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.02.2014, 22:52
Ответы с готовыми решениями:

Клик по кнопке только мышкой, запрет нажатия Enter и Space
Добрый день форумчане! C# я недавно изучаю, пишу своё первое приложение. Опишу: Есть форма в...

Изменение расположения курсора на экране и симуляцция нажатия кнопок на мышке и клавиатуре
Есть ли в pascalABC.NET функции 1. Изменяют расположении курсора на экране. К примеру после 5...

После нажатия клавиши Enter или нажатия на Button
Помогите пожалуйста.:-[ Задача: После нажатия клавиши Enter или нажатия на Button поле курсора...

Как сделать, чтобы сочетание клавиш 'enter'+'space' выходили из консоли
#include <iostream> #include <conio.h> using namespace std; int main() { char c; ...

3
241 / 131 / 15
Регистрация: 26.12.2012
Сообщений: 267
17.02.2014, 14:48 2
Лучший ответ Сообщение было отмечено Mihhail Sokolov как решение

Решение

Вопрос не такой уж редкий и способов решения этой проблемы несколько... Но вот один из самых интересных вариантов... Я часто задумывался над тем, как "отловить" нажатие на клавишу ещё до системы... Оказывается выход есть! Дамы и Господа! Встречаем - Hook! Будем использовать библиотеку user32.dll

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
Imports System.Runtime.InteropServices
 
Public Class Form1
 
    Private Declare Sub keybd_event Lib "user32" ( _
      ByVal bVk As Byte, _
      ByVal bScan As Byte, _
      ByVal dwFlags As Integer, _
      ByVal dwExtraInfo As Integer)
 
    Private Const KEYEVENTF_KEYUP = &H2
 
    Private Delegate Function HOOKPROCDelegate( _
      ByVal nCode As Integer, _
      ByVal wParam As IntPtr, _
      ByRef lParam As KBDLLHOOKSTRUCT) As IntPtr
 
    Private HookProc As New HOOKPROCDelegate(AddressOf KeyboardHookProc)
 
    Private Declare Unicode Function GetModuleHandleW Lib "kernel32.dll" ( _
      ByVal lpModuleName As IntPtr) As IntPtr
 
    '~ создаём глобальный Hook ~
    Private Declare Unicode Function SetWindowsHookExW Lib "user32.dll" ( _
      ByVal idHook As Integer, _
      ByVal lpfn As HOOKPROCDelegate, _
      ByVal hMod As IntPtr, _
      ByVal dwThreadId As UInteger) As IntPtr
 
    ' ~ Будем использовать для удаления Hook ~
    Private Declare Unicode Function UnhookWindowsHookEx Lib "user32.dll" ( _
      ByVal hhk As IntPtr) As UInteger
 
    Private Declare Unicode Function CallNextHookEx Lib "user32.dll" ( _
      ByVal hhk As IntPtr, _
      ByVal nCode As Integer, _
      ByVal wParam As IntPtr, _
      ByRef lParam As KBDLLHOOKSTRUCT) As IntPtr
 
    '~ Наши константы ~
    Private Const WM_KEYDOWN As Int32 = &H100
    Private Const WM_KEYUP As Int32 = &H101
    Private Const HC_ACTION As Integer = 0
    Private Const WH_KEYBOARD_LL As Integer = 13
 
    Public PrevWndProc As Integer
    Private mHandle As IntPtr
 
    <StructLayout(LayoutKind.Sequential)> Public Structure KBDLLHOOKSTRUCT
        Public vkCode As Keys
        Public scanCode, flags, time, dwExtraInfo As UInteger
 
        Public Sub New(ByVal key As Keys, _
          ByVal scancod As UInteger, _
          ByVal flagss As UInteger, _
          ByVal zeit As UInteger, _
          ByVal extra As UInteger)
 
            vkCode = key
            scanCode = scancod
            flags = flagss
            time = zeit
            dwExtraInfo = extra
        End Sub
    End Structure
    '~ Вкл./Выкл. :) ~
    Public Property KeyHookEnable() As Boolean
        Get
            Return mHandle <> IntPtr.Zero
        End Get
        Set(ByVal value As Boolean)
            If KeyHookEnable = value Then Return
            If value Then
                mHandle = SetWindowsHookExW(WH_KEYBOARD_LL, HookProc, _
                  GetModuleHandleW(IntPtr.Zero), 0)
            Else
                UnhookWindowsHookEx(mHandle)
                mHandle = IntPtr.Zero
            End If
        End Set
    End Property
 
    '~ Здесь мы отлавливаем нажатие клавиш до системы ~
    '~ fEatKeyStroke=true -> нажатие не воспринимается ~
    '~ системой, как будто его и не было  ~ 
    Private Function KeyboardHookProc(ByVal nCode As Integer, _
      ByVal wParam As IntPtr, _
      ByRef lParam As KBDLLHOOKSTRUCT) As IntPtr
 
        Dim fEatKeyStroke As Boolean
 
        If nCode = HC_ACTION Then
 
            Select Case lParam.vkCode
                '~ Здесь то, что мы хотим игнорировать ~
                Case Keys.Enter
                    fEatKeyStroke = True
                Case Keys.Space
                    fEatKeyStroke = True
            End Select
 
            If fEatKeyStroke Then
                Return New IntPtr(1)
                Exit Function
            End If
 
            Return CallNextHookEx(mHandle, nCode, wParam, lParam)
        End If
    End Function
 
    Private Sub Form1_Load(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles MyBase.Load
 
        '~ включаем Hook ~
        KeyHookEnable = True
 
    End Sub
 
    Private Sub Form1_Closing(ByVal sender As System.Object, _
      ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
 
        '~ ВАЖНО!! НЕ ЗАБЫВАЕМ ВЫКЛЮЧИТЬ Hook ПЕРЕД ЗАКРЫТИЕМ ОКНА!! ~
        KeyHookEnable = False
 
    End Sub
 
End Class
Удачи
4
2 / 2 / 1
Регистрация: 30.12.2012
Сообщений: 18
17.02.2014, 15:56  [ТС] 3
Большое спасибо Splinter_Cell!
0
1392 / 1298 / 299
Регистрация: 03.10.2012
Сообщений: 1,350
18.02.2014, 21:04 4
Лучший ответ Сообщение было отмечено Mihhail Sokolov как решение

Решение

Цитата Сообщение от Mihhail Sokolov Посмотреть сообщение
чтобы нажатия кнопок Enter и Space игнорировалось
Цитата Сообщение от Splinter_Cell Посмотреть сообщение
способов решения этой проблемы несколько
Например, так:
Свойство формы KeyPreview устанавливаем в True
VB.NET
1
2
3
4
5
Private Sub Form1_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
        If Equals(e.KeyCode, Keys.Enter) Or Equals(e.KeyCode, Keys.Space) Then
            Exit Sub
        End If
    End Sub
3
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.02.2014, 21:04

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Имитация нажатия кнопок клавиатуры нажатиями кнопок в окне
Скажите,как заменить нажатие кнопок клавиатуры на нажатие кнопок в окне?

Имитация нажатия кнопок клавиатуры нажатиями кнопок в окне
Скажите,как заменить нажатие кнопок клавиатуры на нажатие кнопок в окне?

Нажатие кнопок на клавиатуре
Как сделать так, что бы, например, при нажатии кнопки &quot;1&quot; на клавиатуре, в программе нажималась...

Действие click() при нажатии на клавиатуре Enter в опредленном div
Есть div. В нем находится инпут и кнопка. Как при нажтии на клавиатуре на Enter заставить кнопку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.