-
-
Save pondermatic/224790183061d1aeaff7 to your computer and use it in GitHub Desktop.
; Microsoft Office Keyboard RT9450 | |
; written by pondermatic 2015-06-03 | |
; This AutoHotkey 1.1 script makes the scroll wheel work with Windows 7, 8 and 10. | |
; The wheel has four speeds: slowest, slow, fast, fastest. | |
; requires AHKHID library from https://github.com/jleb/AHKHID | |
; 0 1 2 3 4 5 6 7 | |
; -- -- -- -- -- -- -- -- ----- | |
; 01 01 00 00 00 00 00 00 Help | |
; 01 00 00 00 01 00 00 00 Office Home | |
; 01 00 10 00 00 00 00 00 Task Pane | |
; 01 00 80 00 00 00 00 00 New | |
; 01 00 00 01 00 00 00 00 Open | |
; 01 00 00 02 00 00 00 00 Close | |
; 01 00 00 00 20 00 00 00 Reply | |
; 01 00 00 00 40 00 00 00 Fwd | |
; 01 00 00 00 80 00 00 00 Send | |
; 01 00 20 00 00 00 00 00 Spell | |
; 01 00 00 04 00 00 00 00 Save | |
; 01 00 00 08 00 00 00 00 Print | |
; 01 00 00 10 00 00 00 00 Undo | |
; 01 00 00 00 10 00 00 00 Redo | |
; 01 00 00 00 00 01 00 00 = | |
; 01 00 00 00 00 02 00 00 ( | |
; 01 00 00 00 00 04 00 00 ) | |
; Back space | |
; | |
; 01 10 00 00 00 00 00 00 Word | |
; 01 20 00 00 00 00 00 00 Excel | |
; 01 00 00 00 02 00 00 00 Web/Home | |
; 01 40 00 00 00 00 00 00 Mail | |
; 01 80 00 00 00 00 00 00 Calendar | |
; 01 00 40 00 00 00 00 00 Files | |
; 01 00 01 00 00 00 00 00 Calculator | |
; 01 02 00 00 00 00 00 00 Mute | |
; 01 04 00 00 00 00 00 00 Volume - | |
; 01 08 00 00 00 00 00 00 Volume + | |
; 01 00 02 00 00 00 00 00 Log Off | |
; Sleep | |
; | |
; 01 00 00 00 04 00 00 00 Back | |
; 01 00 00 00 08 00 00 00 Forward | |
; 01 00 00 00 00 00 01 00 scroll up slowest | |
; 01 00 00 00 00 00 21 00 scroll up slow | |
; 01 00 00 00 00 00 41 00 scroll up fast | |
; 01 00 00 00 00 00 61 00 scroll up fastest | |
; 01 00 00 00 00 00 1F 00 scroll down slowest | |
; 01 00 00 00 00 00 3F 00 scroll down slow | |
; 01 00 00 00 00 00 5F 00 scroll down fast | |
; 01 00 00 00 00 00 7F 00 scroll down fastest | |
; 01 00 00 40 00 00 00 00 Cut | |
; 01 00 00 20 00 00 00 00 Copy | |
; 01 00 00 80 00 00 00 00 Paste | |
; 01 00 08 00 00 00 00 00 Application left (alt-tab) | |
; 01 00 04 00 00 00 00 00 Application right | |
; | |
; 7 Qualifier Key | |
; -- ------------- | |
; 00 none | |
; 01 left control | |
; 02 left shift | |
; 04 left alt | |
; 08 left windows | |
; 10 right control | |
; 20 right shift | |
; 40 right alt | |
#SingleInstance force | |
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. | |
SendMode Input ; Recommended for new scripts due to its superior speed and reliability. | |
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. | |
; Set up the AHKHID constants | |
AHKHID_UseConstants() | |
; Create GUI to receive messages (won't be displayed) | |
Gui, +LastFound | |
hGui := WinExist() | |
; Intercept WM_INPUT messages | |
WM_INPUT := 0xFF | |
OnMessage(WM_INPUT, "InputMsg") | |
; Register with RIDEV_INPUTSINK (so that data is received even in the background) | |
result := AHKHID_Register(12, 1, hGui, RIDEV_INPUTSINK) | |
Return | |
InputMsg(wParam, lParam) | |
{ | |
Local devh, bData, bSize, wheel, direction, speed | |
Critical | |
; Check for the correct HID device | |
devh := AHKHID_GetInputInfo(lParam, II_DEVHANDLE) | |
vn := AHKHID_GetDevInfo(devh, DI_HID_VERSIONNUMBER, True) | |
if (devh == -1) | |
or (AHKHID_GetDevInfo(devh, DI_DEVTYPE, True) != RIM_TYPEHID) | |
or (AHKHID_GetDevInfo(devh, DI_HID_VENDORID, True) != 1118) ; Microsoft 0x045E | |
or (AHKHID_GetDevInfo(devh, DI_HID_PRODUCTID, True) != 72) ; Office keyboard 0x0048 | |
or (AHKHID_GetDevInfo(devh, DI_HID_VERSIONNUMBER, True) != 292) ; 0x0124 | |
{ | |
return | |
} | |
bSize := AHKHID_GetInputData(lParam, bData) | |
; hex := Bin2Hex(&bData, bSize) | |
; OutputDebug Data: %hex% | |
; return | |
if (bSize != 8) { | |
return ; we are expecting exactly 8 bytes | |
} | |
b1 := NumGet(bData, 1, "UChar") | |
b2 := NumGet(bData, 2, "UChar") | |
b3 := NumGet(bData, 3, "UChar") | |
b4 := NumGet(bData, 4, "UChar") | |
b5 := NumGet(bData, 5, "UChar") | |
if (b5 = 0x01) { | |
Send {=} | |
} | |
if (b5 = 0x02) { | |
Send ( | |
} | |
if (b5 = 0x04) { | |
Send ) | |
} | |
wheelData := NumGet(bData, 6, "UChar") | |
if (wheelData) { | |
HandleWheel(wheelData) | |
} | |
} | |
HandleWheel(data) { | |
direction := (data & 0x0F) >> 3 | |
speed := (data>>4) // 2 * 2 + 1 | |
if (direction == 1) { | |
Send {WheelDown %speed%} | |
} else { | |
Send {WheelUp %speed%} | |
} | |
} | |
; By Laszlo, adapted by TheGood | |
; http://www.autohotkey.com/forum/viewtopic.php?p=377086#377086 | |
Bin2Hex(addr,len) { | |
Static fun, ptr | |
If (fun = "") { | |
If A_IsUnicode | |
If (A_PtrSize = 8) | |
h=4533c94c8bd14585c07e63458bd86690440fb60248ffc2418bc9410fb6c0c0e8043c090fb6c00f97c14180e00f66f7d96683e1076603c8410fb6c06683c1304180f8096641890a418bc90f97c166f7d94983c2046683e1076603c86683c13049ffcb6641894afe75a76645890ac366448909c3 | |
Else h=558B6C241085ED7E5F568B74240C578B7C24148A078AC8C0E90447BA090000003AD11BD2F7DA66F7DA0FB6C96683E2076603D16683C230668916240FB2093AD01BC9F7D966F7D96683E1070FB6D06603CA6683C13066894E0283C6044D75B433C05F6689065E5DC38B54240833C966890A5DC3 | |
Else h=558B6C241085ED7E45568B74240C578B7C24148A078AC8C0E9044780F9090F97C2F6DA80E20702D1240F80C2303C090F97C1F6D980E10702C880C1308816884E0183C6024D75CC5FC606005E5DC38B542408C602005DC3 | |
VarSetCapacity(fun, StrLen(h) // 2) | |
Loop % StrLen(h) // 2 | |
NumPut("0x" . SubStr(h, 2 * A_Index - 1, 2), fun, A_Index - 1, "Char") | |
ptr := A_PtrSize ? "Ptr" : "UInt" | |
DllCall("VirtualProtect", ptr, &fun, ptr, VarSetCapacity(fun), "UInt", 0x40, "UInt*", 0) | |
} | |
VarSetCapacity(hex, A_IsUnicode ? 4 * len + 2 : 2 * len + 1) | |
DllCall(&fun, ptr, &hex, ptr, addr, "UInt", len, "CDecl") | |
VarSetCapacity(hex, -1) ; update StrLen | |
Return hex | |
} | |
Thanks for your reply. I had ahdhid.ahk placed in lib folder, while KeyWheel.ahk was in AutoHotKey directory. Once I have renamed ahdhid.ahk to AHDHID the script started working correctly and scroll wheel is working fine now... Result!
As you mentioned I have tried converting file to EXE however it won't let me save, it was done using autohotkey software Convert .ahk to .exe, might have to look into shell:startup so it will run automatically.
Thanks for your reply. I had ahdhid.ahk placed in lib folder, while KeyWheel.ahk was in AutoHotKey directory. Once I have renamed ahdhid.ahk to AHDHID the script started working correctly and scroll wheel is working fine now... Result!
As you mentioned I have tried converting file to EXE however it won't let me save, it was done using autohotkey software Convert .ahk to .exe, might have to look into shell:startup so it will run automatically.
I can provide you a compiled version if you'd like. I have it placed in my Startup folder in my Start menu, so it always runs.
https://onoitsu2.com/Files/KeyWheel.exe
Thank you very much, you are a star!
You need the item mentioned at the top of the script, that URL is https://github.com/jleb/AHKHID
I placed the files ahkhid.* files in C:\Program Files\AutoHotkey\lib, then was able to run this script, or in my case, simply compiled it into an EXE, so that I no longer need that software installed to utilize it, just moving that EXE over to any computer I need use the full functions of the keyboard on, with of course the MS software for it being installed as well.