Чем заменить setVirtualKeyDown?

XRLM

Против ветра рождённый
Модератор
1,658
1,337
setVirtualKeyDown эмулирует нажатие только внутри игрового движка. keyboard.lua использует встроенные функции MoonLoader isKeyDown и isKeyJustPressed.
Чтобы инпут долетал и засчитывался в keyboard.lua, нужно слать нажатия на уровне WinAPI через FFI.


Lua:
local ffi = require 'ffi'

ffi.cdef[[
   void keybd_event(unsigned char bVk, unsigned char bScan, unsigned long dwFlags, unsigned long dwExtraInfo);
]]

local KEYEVENTF_KEYUP = 0x0002

-- Функция для полной эмуляции клика
function simulate_key(vkey, delay)
   ffi.C.keybd_event(vkey, 0, 0, 0) -- зажали
   if delay then
      wait(delay)
   end
   ffi.C.keybd_event(vkey, 0, KEYEVENTF_KEYUP, 0) -- отпустили
end
Как использовать:

Lua:
-- Зажать кнопку (например, W = 0x57)
ffi.C.keybd_event(0x57, 0, 0, 0)

-- Отпустить кнопку
ffi.C.keybd_event(0x57, 0, 2, 0) -- 2 это KEYEVENTF_KEYUP
так же setVirtualKeyDown:
1780969815707.png

p.s SendInput это современная замена keybd_event, а так же более надежная и более функциональная
 
  • Нравится
Реакции: Tema05