-
-
Save ewauq/2702c6b2342517a0ec9206fa101d3d7c to your computer and use it in GitHub Desktop.
| -- 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 |
None of this worked on my G700s mouse. I did the following script to test ALL the keys, nothing worked.
BTW you can pass the keys as a string. Can just do "F19" for example. If the string is invalid, it'll throw an actual error. Just because it's valid though doesn't mean it'll do anything.
counter = 0 function OnEvent(event, arg) -- ## Microsoft's actual standard VKEY codes -- keymap = { -- [5] = 0x82, -- F19 -- [7] = 0x83, -- F20 -- [8] = 0x84, -- F21 -- [9] = 0x85, -- F22 -- [10] = 0x86, -- F23 -- [11] = 0x87 -- F24 -- } -- ## The codes mentioned on https://gist.github.com/ewauq/2702c6b2342517a0ec9206fa101d3d7c -- local keymap = { -- [5] = 106, -- F19 -- [7] = 107, -- F20 -- [8] = 108, -- F21 -- [9] = 109, -- F22 -- [10] = 110, -- F23 -- [11] = 118 -- F24 -- } -- You can apparently pass the key as a string local keymap = { [5] = "F19", -- F19 [7] = "F20", -- F20 [8] = "F21", -- F21 [9] = "F22", -- F22 [10] = "F23", -- F23 [11] = "F24" -- F24 } if arg == 11 then counter = counter + 1 if event == "MOUSE_BUTTON_PRESSED" then OutputLogMessage("TEST KeyDN: %s mapto: %i \t0x%X \n", arg, counter, counter) PressKey(counter) elseif event == "MOUSE_BUTTON_RELEASED" then OutputLogMessage("TEST KeyUP: %s mapto: %i \t0x%X \n", arg, counter, counter) ReleaseKey(counter) end else local keyval = keymap[arg] if keyval then if event == "MOUSE_BUTTON_PRESSED" then -- OutputLogMessage("KeyDN: %s mapto: %i \t0x%X \n", arg, keyval, keyval) OutputLogMessage("KeyDN: %s mapto: %s\n", arg, keyval) PressKey(keyval) elseif event == "MOUSE_BUTTON_RELEASED" then -- OutputLogMessage("KeyUP: %s mapto: %i \t0x%X \n", arg, keyval, keyval) OutputLogMessage("KeyUP: %s mapto: %s\n", arg, keyval) ReleaseKey(keyval) end end end end
Invalid Keys (these throw an exception):
85,89-92,94-99,111,113,114,116,117,122,124,127-240,253-271,273-280,282-287,291,293-301,303,305,307,308,310,313-324,330,332,334,340-346,350-363,366-872
I got tired of clicking at 872.Key combinations that don't throw an exception (but nothing special happens)
86-88,93,100-110,112,115,118-121,123,125,126,241-252,272,281,284,285,288-290,292,302,304,306,309,311,312,325-329, 331,333,335-339,347-349,364-365
None of the valid keys ever pressed a keyboard key or Fkey.
- KeyboardStateView never registered keypress's beyond some media keys, VK_LAUNCH_APP, VK_OEM_4, VK_OEM6, and VK_OEM2
- VSCode's "Keyboard Shortcuts" menu with Search by key or Record Keys never picked anything up
Notes:
288-290: One of these keys opened Calculator / VK_LAUNCH_APP2364-365: One of thse opened Media Player / VK_LAUNCH_MEDIA_SELECT
Should of tried my code, which uses the hex code to get the keys:
-- 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
In your case, you would adapt the code to be as such due the lower number of buttons:
-- 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 G4 on your G700 mouse is bound to F13, G5 to F14, ... G11 to F20.
function OnEvent(event, arg)
EnablePrimaryMouseButtonEvents(true)
-- Table mapping G700 button numbers to F-key hex codes
-- G700 has buttons G4–G11 (8 programmable buttons)
local fKeys = {
[4] = 0x64, -- F13
[5] = 0x65, -- F14
[6] = 0x66, -- F15
[7] = 0x67, -- F16
[8] = 0x68, -- F17
[9] = 0x69, -- F18
[10] = 0x6A, -- F19
[11] = 0x6B, -- F20
}
local function getFKeyName(hexCode)
for i, code in pairs(fKeys) do
if code == hexCode then
return "F" .. (i + 9) -- G4 → F13, G5 → F14, etc.
end
end
return "Unknown"
end
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
WEW!! I GOT IT WORKING.
The trick was to use a Hardware Profile burned into the mouse.
g700s-FKeys.dat
Placed in
%LOCALAPPDATA%\Logitech\Logitech Gaming Software\Logitech Gaming Software\On-Board Profiles\G700s\g700s-FKeys.dat