как изавиться от автоповтора клавиатуры, ломает алгоритм
нужно типа клика, нажал\отпустил
Клавиатура, мешает автоповтор
Сообщений 1 страница 7 из 7
Поделиться104.08.2023 08:51:49
Поделиться204.08.2023 11:24:10
Поставить хук на клавиатуру и уже там обрабатывать.
Поделиться304.08.2023 14:13:11
а где именно? Если в ListIconGadget, то там надо получить тип клика EventType() = #PB_EventType_LeftClick, чтобы не ловить повтор, а не просто гаджет. Я на это уже попадался не раз.
Поделиться404.08.2023 16:44:07
EventType() = #PB_EventType_LeftClick
Это для мыши.
Речь же про клавиатуру.
как изавиться от автоповтора клавиатуры, ломает алгоритм
нужно типа клика, нажал\отпустил
Зависит от кода и метода обработки нажатий кнопок клавиатуры.
Поделиться505.08.2023 04:59:50
Вставить цикл проверки что кнопка нажата и ждать её отлипания посылая сигнал отжатия. Вот пример из утилиты 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)
Поделиться606.08.2023 06:54:31
Зависит от кода и метода обработки нажатий кнопок клавиатуры.
AddKeyboardShortcut(ws\w0n, #PB_Shortcut_Space, #PB_Key_Space) Case #PB_Key_Space:clickPack()
стоит немного придержать клавишу, и проходит несколько раздач, для игры это недопустимо
а мышой не очень удобно
Поделиться706.08.2023 16:10:54
А в чём проблема не запускать копию задачи, если одна уже запущена? Пусть хоть заповторяется тысячу раз. Сделайте флаг «Задача запущена», и не запускайте пока задача выполняется. Три строчки кода.