Middle click sends a normal middle click unless:
- Over the taskbar: Closes the window whose button is under the mouse (aborts if window prompts to save,etc).
- Over the titlebar of a window: closes the window (can be made more sensitive to specific window areas - see Shimanov's post:
<!-- m -->http://www.autohotke...opic.php?t=8486<!-- m --> ).
- Over an internet explorer class window: Opens a link in a new window (keep holding the button down to switch back to the original window).
MButton:: SetBatchLines, -1 CoordMode, Mouse, Screen SetMouseDelay, -1 ; no pause after mouse clicks SetKeyDelay, -1 ; no pause after keys sent MouseGetPos, ClickX, ClickY, WindowUnderMouseID WinActivate, ahk_id %WindowUnderMouseID% ; WM_NCHITTEST SendMessage, 0x84,, ( ClickY << 16 )|ClickX,, ahk_id %WindowUnderMouseID% WM_NCHITTEST_Result =%ErrorLevel% /* #define HTERROR (-2) #define HTTRANSPARENT (-1) #define HTNOWHERE 0 #define HTCLIENT 1 #define HTCAPTION 2 #define HTSYSMENU 3 #define HTGROWBOX 4 #define HTSIZE HTGROWBOX #define HTMENU 5 #define HTHSCROLL 6 #define HTVSCROLL 7 #define HTMINBUTTON 8 #define HTMAXBUTTON 9 #define HTLEFT 10 #define HTRIGHT 11 #define HTTOP 12 #define HTTOPLEFT 13 #define HTTOPRIGHT 14 #define HTBOTTOM 15 #define HTBOTTOMLEFT 16 #define HTBOTTOMRIGHT 17 #define HTBORDER 18 #define HTREDUCE HTMINBUTTON #define HTZOOM HTMAXBUTTON #define HTSIZEFIRST HTLEFT #define HTSIZELAST HTBOTTOMRIGHT #if(WINVER >= 0x0400) #define HTOBJECT 19 #define HTCLOSE 20 #define HTHELP 21 */ ; Close window with titlebar click If WM_NCHITTEST_Result in 2,3,8,9,20,21 ; in titlebar enclosed area - top of window { PostMessage, 0x112, 0xF060,,, ahk_id %WindowUnderMouseID% ; 0x112 = WM_SYSCOMMAND, 0xF060 = SC_CLOSE Return } ; Close taskbar program click IfWinActive, ahk_class Shell_TrayWnd { MouseClick, Right, %ClickX%, %ClickY% Sleep, 50 Send, c WinWaitNotActive, ahk_class Shell_TrayWnd,, 0.5 ; wait for save dialog, etc If ErrorLevel =1 Send, !{Tab} Return } ; Open IE link in new window IfWinActive, ahk_class IEFrame ; going to click on a link to open in new window { If A_Cursor =Unknown ; pointer is probably the Hand icon (for links) { StatusBarGetText, IEStatusBarText, 1 StringLeft, IEStatusBarText, IEStatusBarText, 4 If IEStatusBarText = java ; javascript - should open in its own new window anyhow { Click, %ClickX%, %ClickY% SetTimer, OpenIELinkInNewWindowSleep, 400 ; new thread } Else { Send +{Click %ClickX%, %ClickY%} ; Shift+LeftClick SetTimer, OpenIELinkInNewWindowSleep, 400 ; new thread } Return } } ; else send normal middle click If GetKeyState("MButton", "P") ; The middle button is physically down MouseClick, Middle, %ClickX%, %ClickY%,, Down Else MouseClick, Middle, %ClickX%, %ClickY% Return OpenIELinkInNewWindowSleep: ; if still holding middle mouse down, returns to original window SetTimer, OpenIELinkInNewWindowSleep, Off WinWaitNotActive, ahk_id %WindowUnderMouseID%,, 1 Sleep, 100 WinMaximize, A If GetKeyState("MButton", "P") ; The middle button is physically down WinActivate ahk_id %WindowUnderMouseID% Return