ToolTip Mouse Menu (requires XP/2k/NT) -- by Rajat (original) (raw)
ToolTip Mouse Menu (requires XP/2k/NT) -- by Rajat
This script displays a popup menu in response to briefly holding down the middle mouse button. Select a menu item by left-clicking it. Cancel the menu by left-clicking outside of it. A recent improvement is that the contents of the menu can change depending on which type of window is active (Notepad and Word are used as examples here).
Download This Script | Other Sample Scripts | Home
; You can set any title here for the menu: MenuTitle = -=-=-=-=-=-=-=-
; This is how long the mouse button must be held to cause the menu to appear: UMDelay = 20
SetFormat, float, 0.0 SetBatchLines, 10ms SetTitleMatchMode, 2 #SingleInstance
;___________________________________________ ;Menu Definitions_________________
; Create / Edit Menu Items here. ; You can't use spaces in keys/values/section names.
; Don't worry about the order, the menu will be sorted.
MenuItems = Notepad/Calculator/Section 3/Section 4/Section 5
;___________________________________________ ;Dynamic menuitems here_________
; Syntax: ; Dyn# = MenuItem|Window title
Dyn1 = MS Word|- Microsoft Word Dyn2 = Notepad II|- Notepad
;___________________________________________
Exit
;___________________________________________ ;Menu Sections____________________
; Create / Edit Menu Sections here.
Notepad: Run, Notepad.exe Return
Calculator: Run, Calc Return
Section3: MsgBox, You selected 3 Return
Section4: MsgBox, You selected 4 Return
Section5: MsgBox, You selected 5 Return
MSWord: msgbox, this is a dynamic entry (word) Return
NotepadII: msgbox, this is a dynamic entry (notepad) Return
;___________________________________________ ;Hotkey Section___________________
~MButton:: HowLong = 0 Loop { HowLong ++ Sleep, 10 GetKeyState, MButton, MButton, P IfEqual, MButton, U, Break } IfLess, HowLong, %UMDelay%, Return
;prepares dynamic menu DynMenu = Loop { IfEqual, Dyn%a_index%,, Break
StringGetPos, ppos, dyn%a_index%, |
StringLeft, item, dyn%a_index%, %ppos%
ppos += 2
StringMid, win, dyn%a_index%, %ppos%, 1000
IfWinActive, %win%,
DynMenu = %DynMenu%/%item%
}
;Joins sorted main menu and dynamic menu Sort, MenuItems, D/ TempMenu = %MenuItems%%DynMenu%
;clears earlier entries Loop { IfEqual, MenuItem%a_index%,, Break MenuItem%a_index% = }
;creates new entries Loop, Parse, TempMenu, / { MenuItem%a_index% = %a_loopfield% }
;creates the menu Menu = %MenuTitle% Loop { IfEqual, MenuItem%a_index%,, Break numItems ++ StringTrimLeft, MenuText, MenuItem%a_index%, 0 Menu = %Menu%`n%MenuText% }
MouseGetPos, mX, mY HotKey, ~LButton, MenuClick HotKey, ~LButton, On ToolTip, %Menu%, %mX%, %mY% WinActivate, %MenuTitle% Return
MenuClick: HotKey, ~LButton, Off IfWinNotActive, %MenuTitle% { ToolTip Return }
MouseGetPos, mX, mY ToolTip mY -= 3 ;space after which first line starts mY /= 13 ;space taken by each line IfLess, mY, 1, Return IfGreater, mY, %numItems%, Return StringTrimLeft, TargetSection, MenuItem%mY%, 0 StringReplace, TargetSection, TargetSection, %a_space%,, A Gosub, %TargetSection% Return