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