A few months back, LH posted a link to TouchFreeze: http://lifehacker.com/5412986/touchfreeze-disables-your-touchpad-as-soon-as-you-start-typing
This program was designed to stop you from accidentally hitting your laptop/netbook's trackpad with your thumbs while you are typing. However, this program didn't really work for me - I still accidentally jumped the cursor from time-to-time.
So here's my Autohotkey version, which has been working very well for me for the last couple of weeks since I created it. (Note that you can tweak the timer line if the 500ms default still isn't quite long enough for you.) I've noticed no performance lag at all with method, since it's a keyboard hook.
I think it's always better to add little functions like these to my AHK master script, rather than installing YAU (yet another utility) for these small tweaks.
; Script Function:
; Disables trackpad for 500ms any time a key is pressed (prevents accidental mouse clicks)
;
#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.
;keyboard hook code credit: http://www.autohotkey.com/forum/post-127490.html#127490
#Persistent
OnExit, Unhook
hHookKeybd := SetWindowsHookEx(WH_KEYBOARD_LL := 13, RegisterCallback("Keyboard", "Fast"))
Return
ReenableTrackpad:
BlockInput, MouseMoveOff
Return
Unhook:
UnhookWindowsHookEx(hHookKeybd)
ExitApp
Keyboard(nCode, wParam, lParam)
{
Critical
If !nCode
{
BlockInput, MouseMove
SetTimer, ReenableTrackpad, 500
}
Return CallNextHookEx(nCode, wParam, lParam)
}
SetWindowsHookEx(idHook, pfn)
{
Return DllCall("SetWindowsHookEx", "int", idHook, "Uint", pfn, "Uint", DllCall("GetModuleHandle", "Uint", 0), "Uint", 0)
}
UnhookWindowsHookEx(hHook)
{
Return DllCall("UnhookWindowsHookEx", "Uint", hHook)
}
CallNextHookEx(nCode, wParam, lParam, hHook = 0)
{
Return DllCall("CallNextHookEx", "Uint", hHook, "int", nCode, "Uint", wParam, "Uint", lParam)
}
New version 1.1!
Thanks to all you Lifehackers who offered your suggestions!
; v1.0 2010-02-23 Original Release
; v1.1 2010-02-25 Added user configuration section
; Added option to block mouse clicks
; Added option to omit blocking for shift, ctrl, alt, win keys
#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.
;user configuration
DisableTime := 500 ;in milliseconds
BlockMouseMove := True
BlockLeftClick := True
BlockMiddleClick := True
BlockRightClick := True
AllowShift := True
AllowCtrl := True
AllowAlt := True
AllowWin :=True
;keyboard hook code credit: http://www.autohotkey.com/forum/post-127490.html#127490
#Persistent
OnExit, Unhook
;initialize
hHookKeybd := SetWindowsHookEx(WH_KEYBOARD_LL := 13, RegisterCallback("Keyboard", "Fast"))
Hotkey, LButton, DoNothing, Off
Hotkey, MButton, DoNothing, Off
Hotkey, RButton, DoNothing, Off
Return
DisableTrackpad:
ShiftActive := AllowShift && GetKeyState("Shift")
CtrlActive := AllowCtrl && GetKeyState("Ctrl")
AltActive := AllowAlt && GetKeyState("Alt")
LWinActive := AllowWin && GetKeyState("LWin")
RWinActive := AllowWin && GetKeyState("RWin")
if (!ShiftActive && !CtrlActive && !AltActive && !LWinActive && !RWinActive)
{
if (BlockMouseMove)
BlockInput, MouseMove
if (BlockLeftClick)
Hotkey, LButton, DoNothing, On
if (BlockMiddleClick)
Hotkey, MButton, DoNothing, On
if (BlockLeftClick)
Hotkey, RButton, DoNothing, On
}
Return
ReenableTrackpad:
if (BlockMouseMove)
BlockInput, MouseMoveOff
if (BlockLeftClick)
Hotkey, LButton, Off
if (BlockMiddleClick)
Hotkey, MButton, Off
if (BlockLeftClick)
Hotkey, RButton, Off
Return
DoNothing:
Return
Unhook:
UnhookWindowsHookEx(hHookKeybd)
ExitApp
Keyboard(nCode, wParam, lParam)
{
Critical
If !nCode
{
Gosub, DisableTrackpad
SetTimer, ReenableTrackpad, %DisableTime%
}
Return CallNextHookEx(nCode, wParam, lParam)
}
SetWindowsHookEx(idHook, pfn)
{
Return DllCall("SetWindowsHookEx", "int", idHook, "Uint", pfn, "Uint", DllCall("GetModuleHandle", "Uint", 0), "Uint", 0)
}
UnhookWindowsHookEx(hHook)
{
Return DllCall("UnhookWindowsHookEx", "Uint", hHook)
}
CallNextHookEx(nCode, wParam, lParam, hHook = 0)
{
Return DllCall("CallNextHookEx", "Uint", hHook, "int", nCode, "Uint", wParam, "Uint", lParam)
}
This works perfectly, thanks.
One problem, though, I now can't play full screen games. Perhaps this might not actually be a problem, since I am now more productive without them :)
What about disabling the touch pad but leaving the "eraser" style mouse active for those of us with Dell's that have both?
Or at least increasing the delay on the touch pad but leaving the eraser mouse active all the time?
I love Autohotkey scripts.
thanks for the tool
Alan
You must log in to post.