Здравствуйте, гость ( Вход | Регистрация )

> Распознавание нажатий клавиш клавиатуры
qimer
сообщение 24.8.2020, 14:47
Сообщение #1


*

Registred
Сообщений: 5
Регистрация: 24.8.2020
Группа: Пользователи
Наличность: 0
Пользователь №: 19.729



Здравствуйте! Прошерстил вроде бы весь мануал по UOPilot но нигде не нашел как прога могла бы считывать нажатия клавиш. Т.е. к примеру есть такая задача, как отметить окна в игре, и чтобы он именно в них искал некие изображения, а не по всему экрану. И это бы осуществлялось например так: подводишь мышь к левому верхнему углу окна и жмешь "пробел", а потом к правому нижнему и тоже нажимаешь "пробел". Очень необходима эта функция и для других реализаций. Очень не хватает справки по всем возможностям программы. Я очень надеюсь, что такая возможность в ней есть

upd: нашел как реализовать одну клавишу через ascii-коды, а как реализовать например "Alt+1"

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
sutra
сообщение 7.10.2021, 9:59
Сообщение #2


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Фонарик, даю реально работающий пример работы проверки клавиш. Именно проверки, а не перехвата. Он реально нужен тебе? Используй уникальные клавиши для варьирования своего кода. Про 256 - это число у которого младший байт равен нулю - оно требуется для проверки старшего байта возвращаемого функцией результата. Функции GetKeyState и GetAsyncKeyState различны, можешь посмотреть какая тебе лично больше нравится. GetAsyncKeyState учитывает была ли клавиша нажата начиная с ПОСЛЕДНЕГО вызова функции GetAsyncKeyState и позволяет также отслеживать клавиши мыши.
код
Код

--lua
log "clear" log "mode compact"
local ffi = require("ffi")
ffi.cdef[[short GetKeyState(int vKey);]]
function getkeystate(key)
  if bit.band(ffi.C.GetKeyState(key), 256) ~= 0 then  return true
      else  return false
  end
end

local function CheckStatus(key1,key2,key3) -- Проверка нажатия от 1-ой до 3-х клавиш
  if getkeystate(key1)then
    if not(key2)or getkeystate(key2)then
      if not(key3)or getkeystate(key3)then  return  true  end
    end
  end
  return false
end

local function WaitStatus(key1,key2,key3) -- Ожидание нажатия и отпускания от 1-ой до 3-х клавиш
while true do   -- Этот цикл нужен если требуется ожидание нажатий
  while key2 do
    while key3 do
      if getkeystate(key3) then break end
    end
    if getkeystate(key2) then break end
  end
  if getkeystate(key1) then break end
end
-- Ниже ожидание отпускания клавиш (чтобы скрипт не "понёсся" дальше)
while true do
  while key2 do
    while key3 do
      if not(getkeystate(key3)) then break end
    end
    if not(getkeystate(key2)) then break end
  end
  if not(getkeystate(key1)) then break end
end
end

while true do
  if CheckStatus(17,49) then   -- Если CTRL-1 - выполняем код №1
    WaitStatus(17,49)  log("Code#1")
  end
  if CheckStatus(17,50) then   -- Если CTRL-2 - выполняем код №2
    WaitStatus(17,50)  log("Code#2")
  end
  if CheckStatus(17,51) then   -- Если CTRL-3 - выполняем код №3
    WaitStatus(17,51)  log("Code#3")
  end
  if CheckStatus(17,18,16)then   -- Если CTRL+ALT+SHIFT - выход из цикла
     log("End work")
     break
  end
end

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
qimer   Распознавание нажатий клавиш клавиатуры   24.8.2020, 14:47
cirus   --lua local ffi = require("ffi") f...   24.8.2020, 15:13
qimer   [spoiler=код][code]--lua local ffi = require...   24.8.2020, 15:21
фонарик   [spoiler=код][code]--lua local ffi = require...   4.10.2021, 16:23
cirus   --lua local ffi = require("ffi") f...   24.8.2020, 15:29
qimer   Спасибо больше, cirus! Что бы я без тебя делал...   24.8.2020, 15:39
qimer   cirus, где-нибудь есть полный список команд для uo...   24.8.2020, 18:51
nykep   cirus, где-нибудь есть полный список команд для u...   25.8.2020, 15:45
Fors1k   Где-нибудь есть полный список команд для uopilot?...   25.8.2020, 18:38
cirus   https://uopilot.uokit.com/wiki/index.php?ti...к_ф...   25.8.2020, 1:48
apaul   local arr, a = findimage (startX, startY, endX, ...   4.10.2021, 20:14
cirus   --lua local ffi = require("ffi") ...   5.10.2021, 1:55
фонарик   Товарищ cirus, спасибо вам, пробел отслеживается к...   5.10.2021, 23:33
cirus   --lua local ffi = require("ffi") l...   6.10.2021, 2:08
sutra   Вообще крайне полезная вещь. У меня с тех пор, как...   6.10.2021, 16:02
фонарик   Работает работает :yahoo: Спасибо вам огромное, ми...   6.10.2021, 20:30
фонарик   Интересно, а есть ли возможность при отслеживании ...   6.10.2021, 21:38
DarkMaster   Насколько мне известно только через глобальные хо...   7.10.2021, 8:13
Gendalfgreen   Выше написан ООчень интересный код . но почему то ...   22.6.2022, 18:02
DarkMaster   Возможно проблемы с областью. Попробуйте искать ме...   23.6.2022, 22:31


Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 8.7.2025, 5:26
Designed by Nickostyle