Hola expertos en scripting.
Les explico, tengo speedpad Logitech G13, lo tengo configurado con macros para programas como autocad, revit y 3D max. Ahora quería intentar sacarle mas provecho configurándolo con Lua Scripting, pero me supera por mucho, no se ni como poner las macros en el script.
Lo que intento hacer con Lua es darle una doble función a los botones de modo que al presionar y soltar el botón se ejecute una macros, pero si se mantiene presionado por unos segundos más y se suelte se ejecute una macros distinta.
De antemano muchas gracias.
@CADIAR, eliminé tu mensaje original por error, te envié un MP con el post, si lo vuelves a postear elimino mi post para no crear confusiones.
Porfavor, lee las normas:
1. Los códigos tienen que ir con su etiqueta Geshi, usa el botón para insertar código.
( El autor del siguiente mensaje es @CADIAR, no yo. )
Actualizando...
Conseguí un script que debería hacer lo que quiero, darle dos funciones a los botones según el tiempo que se mantengan presionados, pero me de el siguiente error cuando lo ejecuto:
E:\Logitech Scripts\llProject\llProject.lua:24: chunk has too many syntax levels
este es el script en cuestión:
-- llProject End -->
ll=ll or {}; ll.SETUP = { Folder = [[E:\Logitech Scripts\llProject\]] }
dofile(ll.SETUP.Folder .. [[llProject.lua]])
-- llProject End -->
-- ll.devMode = dm_TEST
function _onActivation()
--
-- ADD ANY START UP ROUTINES HERE
--
ll.mouse.map[0] = {
}
ll.lhc.map[1] = {
G1 = { fn_ClickHold, "a", 30, "b", 1000 },
G2 = { fn_ClickHold, { "lctrl", "c" }, 30, { "lshift", "d"}, 1000 },
}
end
ClickHoldInfo = {}
function fn_ClickHold( ClickTableOrKey, ClickDelay, HoldTableOrKey, HoldDelay )
local key = ll.Event.Mode .. "|" .. ll.Event.Key .. "|" .. ll.Event.Family
if ll.Event.Pressed then
ClickHoldInfo[key] = { timestamp = GetRunningTime(), held = false }
elseif ll.Event.Down then
if not ClickHoldInfo[key].held and GetRunningTime() - ClickHoldInfo[key].timestamp >= HoldDelay then
Press( HoldTableOrKey, ClickDelay )
ClickHoldInfo[key].held = true
end
elseif ll.Event.Released then
if GetRunningTime() - ClickHoldInfo[key].timestamp < HoldDelay then
PressAndRelease( ClickTableOrKey, ClickDelay )
else
Release( HoldTableOrKey, ClickDelay )
end
ClickHoldInfo[key] = nil
end
end
function Press( TableOrKey )
local key, table
if type(TableOrKey) == "table" then
table = TableOrKey
elseif type(TableOrKey) == "string" then
key = TableOrKey
else
return
end
if key then
ll.Press(key)
else
for i, v in ipairs(table) do
ll.Press(v)
end
end
end
function Release( TableOrKey )
local key, table
if type(TableOrKey) == "table" then
table = TableOrKey
elseif type(TableOrKey) == "string" then
key = TableOrKey
else
return
end
if key then
ll.Press(key)
else
for i, v in ipairs(table) do
ll.Release(v)
end
end
end
function PressAndRelease( TableOrKey, delay )
local key, table
local delay = delay or 0
if type(TableOrKey) == "table" then
table = TableOrKey
elseif type(TableOrKey) == "string" then
key = TableOrKey
else
return
end
if key then
ll.Press(key)
Sleep(delay)
ll.Release(key)
else
for i, v in ipairs(table) do
ll.Press(v)
end
Sleep(delay)
for i, v in ipairs(table) do
ll.Release(v)
end
end
end