PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » Клавиатура, мешает автоповтор


Клавиатура, мешает автоповтор

Сообщений 1 страница 7 из 7

1

как изавиться от автоповтора клавиатуры, ломает алгоритм
нужно типа клика, нажал\отпустил

0

2

Поставить хук на клавиатуру и уже там обрабатывать.

0

3

а где именно? Если в ListIconGadget, то там надо получить тип клика EventType() = #PB_EventType_LeftClick, чтобы не ловить повтор, а не просто гаджет. Я на это уже попадался не раз.

0

4

AZJIO написал(а):

EventType() = #PB_EventType_LeftClick

Это для мыши.
Речь же про клавиатуру.

newJS написал(а):

как изавиться от автоповтора клавиатуры, ломает алгоритм
нужно типа клика, нажал\отпустил

Зависит от кода и метода обработки нажатий кнопок клавиатуры.

0

5

Вставить цикл проверки что кнопка нажата и ждать её отлипания посылая сигнал отжатия. Вот пример из утилиты TextCorrection, как я проверяю три клавиши, чтобы они были отпущены, 3 цикла While - Wend с высылкой SendInput_() где указана в структуре клавиша #VK_SHIFT (или другая) и отжатие #KEYEVENTF_KEYUP и ждём 10 мсек чтобы повторить до тех пор пока GetAsyncKeyState_(#VK_SHIFT) не вернёт что клавиша отпущена. Также посмотри GetKeyState - для немодификаторов и GetKeyboardState - для всех клавиш одновременно.

Код:
Procedure ReleaseKey()
	While GetAsyncKeyState_(#VK_SHIFT)
    g_Key\ki\wVk = #VK_SHIFT
    g_Key\ki\dwFlags = #KEYEVENTF_KEYUP
    SendInput_( 1, @g_Key, SizeOf(INPUT))
    Delay(10)
	Wend
	While GetAsyncKeyState_(#VK_CONTROL)
    g_Key\ki\wVk = #VK_CONTROL
    g_Key\ki\dwFlags = #KEYEVENTF_KEYUP
    SendInput_( 1, @g_Key, SizeOf(INPUT))
    Delay(10)
	Wend
	While GetAsyncKeyState_(#VK_MENU)
    g_Key\ki\wVk = #VK_MENU
    g_Key\ki\dwFlags = #KEYEVENTF_KEYUP
    SendInput_( 1, @g_Key, SizeOf(INPUT))
    Delay(10)
	Wend
EndProcedure

Смысл этого кода, что при высылке горячих клавиш - имитация нажатия клавиша может "залипнуть" в нажатом состоянии и когда нажимаешь другой хоткей и при этом зажать какой то модификатор, то высылается совсем другой хоткей, поэтому при высылке хоткея я проверяю что клавиши-модификаторы отпущены. Ну или ждёт пока пользователь отпустит хоткей, чтобы начать свою высылку хоткеев.

Отредактировано AZJIO (05.08.2023 05:04:58)

0

6

Пётр написал(а):

Зависит от кода и метода обработки нажатий кнопок клавиатуры.

Код:
AddKeyboardShortcut(ws\w0n, #PB_Shortcut_Space, #PB_Key_Space)
Case #PB_Key_Space:clickPack()

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

0

7

А в чём проблема не запускать копию задачи, если одна уже запущена? Пусть хоть заповторяется тысячу раз. Сделайте флаг «Задача запущена», и не запускайте пока задача выполняется. Три строчки кода.

0


Вы здесь » PureBasic - форум » PureBasic для Windows » Клавиатура, мешает автоповтор