Skip to content

Instantly share code, notes, and snippets.

@ewauq
Last active October 9, 2024 21:26
Show Gist options
  • Save ewauq/2702c6b2342517a0ec9206fa101d3d7c to your computer and use it in GitHub Desktop.
Save ewauq/2702c6b2342517a0ec9206fa101d3d7c to your computer and use it in GitHub Desktop.
How to: Bind F13 to F24 keys on the G-keys (Logitech Gaming Keyboards)
-- How to use this script:
-- 1. Install the Logitech Gaming Software: http://support.logitech.com/en_us/software/lgs
-- 2. Launch it, and right click on your profile (the gear icon) and then click on "Scripts".
-- 3. Add the following code into the Script window, save it, and close it. Enjoy.
-- Now G1 is bound to F13, G2 to G14, ... G12 to F24.
function OnEvent(event, arg)
-- OutputLogMessage("event = %s, arg = %s\n", event, arg)
fKey = {
[1] = 0x64, -- F13
[2] = 0x65, -- F14
[3] = 0x66, -- F15
[4] = 0x67, -- F16
[5] = 0x68, -- F17
[6] = 0x69, -- F18
[7] = 0x6A, -- F19
[8] = 0x6B, -- F20
[9] = 0x6C, -- F21
[10] = 0x6D, -- F22
[11] = 0x6E, -- F23
[12] = 0x76 -- F24
}
if (event == "G_PRESSED") then
PressKey(fKey[arg])
end
if (event == "G_RELEASED") then
ReleaseKey(fKey[arg])
end
end
@Thespikedballofdoom
Copy link

I guess then the effort I put in yesterday was worth it. See this gist for anyone who wants a demonstration on targeting a specific M-profile and only one G-key.

https://gist.github.com/Thespikedballofdoom/569c3516ad83b008d4204ba7140b9751

@AeliusAlias
Copy link

AeliusAlias commented Oct 9, 2024

This code won't work for mouse such as the G600. For those who want to implement this on a mouse, use the following new and greatly improved code:

-- How to use this script:
-- 1. Install the Logitech Gaming Software: http://support.logitech.com/en_us/software/lgs
-- 2. Launch it, and right click on your profile (the gear icon) and then click on "Scripts".
-- 3. Add the following code into the Script window, save it, and close it. Enjoy.
-- Now G9 on your G600 mouse is bound to F13, G10 to G14, ... G12 to F24.

function OnEvent(event, arg)
    -- Enable logging
    EnablePrimaryMouseButtonEvents(true)

    -- Table mapping mouse button numbers to F-key hex codes
    local fKeys = {
        [9] = 0x64,  -- F13
        [10] = 0x65, -- F14
        [11] = 0x66, -- F15
        [12] = 0x67, -- F16
        [13] = 0x68, -- F17
        [14] = 0x69, -- F18
        [15] = 0x6A, -- F19
        [16] = 0x6B, -- F20
        [17] = 0x6C, -- F21
        [18] = 0x6D, -- F22
        [19] = 0x6E, -- F23
        [20] = 0x76, -- F24
    }

    -- Debug function to get F-key name from hex code
    local function getFKeyName(hexCode)
        for i, code in pairs(fKeys) do
            if code == hexCode then
                return "F" .. (i + 4)  -- Adjusted to start from F13
            end
        end
        return "Unknown"
    end

    -- Function to handle key press and release
    local function handleKey(keyAction)
        if fKeys[arg] then
            local fKeyHex = fKeys[arg]
            local fKeyName = getFKeyName(fKeyHex)
            local actionName = keyAction == PressKey and "Pressing" or "Releasing"
            
            OutputLogMessage("Mouse button %d: %s %s (Hex: 0x%02X)\n", arg, actionName, fKeyName, fKeyHex)
            keyAction(fKeyHex)
        else
            OutputLogMessage("Unhandled mouse button: %d\n", arg)
        end
    end

    OutputLogMessage("Event: %s, Arg: %d\n", event, arg)

    if event == "MOUSE_BUTTON_PRESSED" then
        handleKey(PressKey)
    elseif event == "MOUSE_BUTTON_RELEASED" then
        handleKey(ReleaseKey)
    end
end

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment