Last active
August 3, 2024 21:35
-
-
Save llinfeng/c09d6c1de0d0646dd2d11a5fa15382e1 to your computer and use it in GitHub Desktop.
AHK - scroll with middle-mouse-key + trackpoint for Thinkpad keyboards
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; Midbutton down for scrolling {{{ | |
; Feature: with acceleration as intended. | |
; Source: http://forum.notebookreview.com/threads/ultranav-middle-click-button-scroll.423415/ | |
; Linking source: https://superuser.com/questions/91074/thinkpad-trackpoint-scrolling-and-middle-click-possible | |
; Working version {{{ | |
$*MButton:: | |
Hotkey, $*MButton Up, MButtonup, off | |
KeyWait, MButton, T0.2 | |
If ErrorLevel = 1 | |
{ | |
Hotkey, $*MButton Up, MButtonup, on | |
MouseGetPos, ox, oy | |
SetTimer, WatchTheMouse, 5 | |
SystemCursor("Toggle") | |
} | |
Else | |
Send {MButton} | |
return | |
MButtonup: | |
Hotkey, $*MButton Up, MButtonup, off | |
SetTimer, WatchTheMouse, off | |
SystemCursor("Toggle") | |
return | |
WatchTheMouse: | |
MouseGetPos, nx, ny | |
dy := ny-oy | |
dx := nx-ox | |
If (dx**2 > 0 and dx**2>dy**2) ;edit 4 for sensitivity (changes sensitivity to movement) | |
{ | |
times := Abs(dy)/1 ;edit 1 for sensitivity (changes frequency of scroll signal) | |
Loop, %times% | |
{ | |
If (dx > 0) | |
Click WheelRight | |
Else | |
Click WheelLeft | |
} | |
} | |
If (dy**2 > 0 and dy**2>dx**2) ;edit 0 for sensitivity (changes sensitivity to movement) | |
{ | |
times := Abs(dy)/1 ;edit 1 for sensitivity (changes frequency of scroll signal) | |
Loop, %times% | |
{ | |
If (dy > 0) | |
Click WheelDown | |
Else | |
Click WheelUp | |
} | |
} | |
MouseMove ox, oy | |
return | |
SystemCursor(OnOff=1) ; INIT = "I","Init"; OFF = 0,"Off"; TOGGLE = -1,"T","Toggle"; ON = others | |
{ | |
static AndMask, XorMask, $, h_cursor | |
,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13 ; system cursors | |
, b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13 ; blank cursors | |
, h1,h2,h3,h4,h5,h6,h7,h8,h9,h10,h11,h12,h13 ; handles of default cursors | |
if (OnOff = "Init" or OnOff = "I" or $ = "") ; init when requested or at first call | |
{ | |
$ = h ; active default cursors | |
VarSetCapacity( h_cursor,4444, 1 ) | |
VarSetCapacity( AndMask, 32*4, 0xFF ) | |
VarSetCapacity( XorMask, 32*4, 0 ) | |
system_cursors = 32512,32513,32514,32515,32516,32642,32643,32644,32645,32646,32648,32649,32650 | |
StringSplit c, system_cursors, `, | |
Loop %c0% | |
{ | |
h_cursor := DllCall( "LoadCursor", "uint",0, "uint",c%A_Index% ) | |
h%A_Index% := DllCall( "CopyImage", "uint",h_cursor, "uint",2, "int",0, "int",0, "uint",0 ) | |
b%A_Index% := DllCall("CreateCursor","uint",0, "int",0, "int",0 | |
, "int",32, "int",32, "uint",&AndMask, "uint",&XorMask ) | |
} | |
} | |
if (OnOff = 0 or OnOff = "Off" or $ = "h" and (OnOff < 0 or OnOff = "Toggle" or OnOff = "T")) | |
$ = b ; use blank cursors | |
else | |
$ = h ; use the saved cursors | |
Loop %c0% | |
{ | |
h_cursor := DllCall( "CopyImage", "uint",%$%%A_Index%, "uint",2, "int",0, "int",0, "uint",0 ) | |
DllCall( "SetSystemCursor", "uint",h_cursor, "uint",c%A_Index% ) | |
} | |
} | |
; }}} | |
; }}} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@theheart2012 我试了下,左右滚动是支持的,至少在OneNote里面(用的是T480笔记本上的小红点)。
另,安利一波TEX Shinobi键盘,它左右上下的滚动都是支持的,也支持独立的中键点击