LUA SCRIPT - BOTONES CON DOBLE FUNCIÓN

Iniciado por CADIAR, 17 Marzo 2014, 18:34 PM

0 Miembros y 1 Visitante están viendo este tema.

CADIAR

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.


Eleкtro

#1
@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:

Código (lua) [Seleccionar]
   -- 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