Может ли Lua отправлять расширенные функциональные клавиши? например, F13-F24

#lua

#lua

Вопрос:

Я попытался отправить F13 с помощью kb.stroke(«F13»);

Ну, это не работает, отлично работает с любыми F12 и ниже.

Я пытаюсь использовать это на пользовательском пульте в унифицированном удаленном приложении, поэтому мой единственный обходной путь для know — использовать os.start для запуска ahk-скрипта, который выполняет отправку ключа, но это очень медленный подход.

Любая помощь будет оценена.

Комментарии:

1. У вас есть доступный модуль FFI, поэтому вы можете отправлять что угодно с помощью WinAPI.

Ответ №1:

 local ffi = require"ffi"

ffi.cdef[[
typedef struct {
   uintptr_t type;
   uint16_t  wVk;
   uint16_t  wScan;
   uint32_t  dwFlags;
   uint32_t  time;
   uintptr_t dwExtraInfo;
   uint32_t  x[2];
} INP;
int SendInput(int, void*, int);
]]

local inp_t = ffi.typeof"INP[2]"

local function PressAndReleaseKey(vkey)
   local inp = inp_t()
   for j = 0, 1 do
      inp[j].type = 1
      inp[j].wVk = vkey
      inp[j].dwFlags = j * 2
   end
   ffi.C.SendInput(2, inp, ffi.sizeof"INP")
end

PressAndReleaseKey(0x57)  -- W
PressAndReleaseKey(0x7C)  -- F13
  

VKeys:
https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes