Очистка буфера клавиатуры.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4159
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Очистка буфера клавиатуры.

Сообщение Mikle » 03.11.2003 (Пн) 10:12

В программе опрашиваю клаву асинхронно через API. По определенным причинам нельзя довольно длительные промежутки времени позволять происходить событиям. За это время буфер клавиатуры успевает переполниться и комп начинает щелкать спикером, что неприятно. Подскажите, как этому препятствовать, повторюсь, давать событиям происходить нельзя.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 03.11.2003 (Пн) 10:18

BlockInput?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4159
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 03.11.2003 (Пн) 10:25

Если можно по-подробнее. Но, судя по названию, оно просто блокирует клаву, а она должна работать, я ее опрашиваю асинхронно без событий.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 03.11.2003 (Пн) 10:31

Честно говоря, не понял вопроса :roll:
Ты сам опрашиваешь? И сам события генеришь? Так почему бы просто не генерить их?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

kazah_
Обычный пользователь
Обычный пользователь
 
Сообщения: 99
Зарегистрирован: 13.01.2003 (Пн) 18:37
Откуда: Russia

Сообщение kazah_ » 03.11.2003 (Пн) 14:24

GSerg писал(а):Честно говоря, не понял вопроса :roll:
Ты сам опрашиваешь? И сам события генеришь? Так почему бы просто не генерить их?

КОРОЧЕ КЛАВА ДОЛЖНА РАБОТАТЬ ТОГДА, КОГДА ЕЁ ОБ ЭТОМ ПРОСЯТ! а БУФЕР ОБМЕНА ЗАПОЛНЯЕТСЯ НЕ НАЖАТИЕМ НА КЛАВУ А ПРОГРАММНО!

В ТАКО СЛУЧАЕ МОГУ ПРЕДПОЛОЖИТЬ, ЧТО ЧЕЛОВЕК ХОЧЕТ УВЕЛИЦИТЬ ОБЪЕМ БУФЕРА ПАМЯТИ. ЭТО НЕВОЗМОЖНО.
а ВОТ УБРАТЬ ПРОЦЕЕСЫ КОТОРЫЕ ЗАПОЛНЯЮТ КЛАВУ МОЖНО!
Mr DEN - THE WAY YOU KNOW / Мр. ДЕН - Ваш Путь к Познанию!

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4159
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 03.11.2003 (Пн) 16:01

Ты сам опрашиваешь? И сам события генеришь?

Поясню примером. Создадим проект Standart EXE, на форму кинем два произвольных Shape с именами Shape1 и Shape2 и один TextBox. Вот код формы:
Код: Выделить всё
Option Explicit
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Private Function Pressed(k As Long) As Boolean
  If GetAsyncKeyState(k) < 0 Then Pressed = True Else Pressed = False
End Function

Private Sub Form_Load()
  Me.Show
  Me.Refresh
  Do
    If Pressed(37) Then
      If Shape1.Visible Then Shape1.Visible = False: Me.Refresh
    Else
      If Not Shape1.Visible Then Shape1.Visible = True: Me.Refresh
    End If
   
    If Pressed(39) Then
      If Shape2.Visible Then Shape2.Visible = False: Me.Refresh
    Else
      If Not Shape2.Visible Then Shape2.Visible = True: Me.Refresh
    End If
   
    If Pressed(27) Then Exit Do
  Loop
End Sub


Я не генерирую никаких событий. Кроме того не позволяю им происходить - попытка ввода текста в TextBox кончается неудачей. Но программа работает (по-нажимайте стрелки вправо\влево). По нажатию на Esc цикл завершается и все содержимое буфера клавы вываливается в текст.
Переполнение буфера вызывает щелчки, а нажатие "несовместимых" клавиш (на моей клаве это, к примеру, "вверх+влево+Z".) писк спикера и тормоза. Нужно избавиться хотя бы от этого. Я пишу игру, а там нажатия "несовместимых" клавиш идут постоянно.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 03.11.2003 (Пн) 16:52

Тогда:
насчёт переполнения буфера ничего не могу сказать;
начсёт несовместимых клавиш сказать могу: в ридми к играм пишут постоянно, что ежели у вас клава пищит от нажатия таких-то клавиш сразу, то это у вас такая клава, и никуда вы от неё не денетесь.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 11

    TopList