使用 Logitech G13 LUA 脚本将字符串输出到桌面应用程序

Posted

技术标签:

【中文标题】使用 Logitech G13 LUA 脚本将字符串输出到桌面应用程序【英文标题】:Using Logitech G13 LUA script to output a string to a desktop application 【发布时间】:2021-12-09 09:06:32 【问题描述】:

由于受伤,我正在使用 G13 以几种格式之一自动执行工作任务,其中之一是输入当前日期。使用此处的在线编译器:https://www.tutorialspoint.com/execute_lua_online.php,我能够弄清楚如何获取和格式化日期,但我找不到将字符串发送到 Word、Chrome、记事本等的输出方法 -无论活动窗口是什么。将它输出到日志或 LCD 并没有在我需要的地方得到它。打印不输出到活动窗口,并且 io.write 给出以下错误:[string“LuaVM”]:11:尝试索引全局 'io'(一个 nil 值)。 Os.date 给出了类似的错误,这就是它被注释掉的原因。

我的测试平台代码:

function OnEvent(event, arg)
    OutputLogMessage("event = %s, arg = %s\n", event, arg)
    
    local MKeyState = GetMKeyState("lhc")
    --OutputLogMessage(MKeyState)

    if (event == "G_PRESSED" and arg == 14 and MKeyState == 2) then
        local date = GetDate("%m/%d/%y") --os.date("%m/%d/%y")
        OutputLogMessage(date)
        OutputLCDMessage(date)
        io.write(date)
        --print(os.date("%m/%d/%y"))
    end
end

我的测试台输出:

event = PROFILE_DEACTIVATED, arg = 0
event = PROFILE_ACTIVATED, arg = 0
event = G_PRESSED, arg = 14
10/22/21[string "LuaVM"]:11: attempt to index global 'io' (a nil value)

event = G_RELEASED, arg = 14

提前感谢您的任何想法。

【问题讨论】:

【参考方案1】:

据我所知,必须对字符串的每个字符使用函数PressAndReleaseKey。由于此函数不将字符本身作为参数,而是将 keyname (请参阅 API 中的 扫描码和键名表),情况变得更加复杂文档)。对于您的date 字符串,这可以工作(我还没有测试过):

        for c in date:gmatch '.' do
            if c == '/' then
                c = "slash"
            end
            PressAndReleaseKey(c)
        end

【讨论】:

因此,为了输出日期,我需要它读取字符串中 n = 1 到 string_length 的第 n 个字符,确定与该字符相关的键码字符串,然后 PressAndRelease(that_key)? 是的,这就是上面的 sn-p 应该做的。幸运的是,数字的键名与各自的数字相同,因此不需要翻译。

以上是关于使用 Logitech G13 LUA 脚本将字符串输出到桌面应用程序的主要内容,如果未能解决你的问题,请参考以下文章

游戏Lua脚本 - 使用couroutine或民意调查?

罗技/LGHUB Lua - 带中断的循环

Logitech G系鼠标脚本编程

从 C++ 将字节数组传递给 lua 脚本方法

lua脚本中怎么对比字符串

lua脚本怎么取出自己想要的的部分字符?