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