用CAD之类的软件做图的时候经常需要用到鼠标中间这个按钮,3D打印的软件比如Ultimaker Cura也是。笔记本电脑几乎都是触摸板,没有这个按钮。
最最简单的办法是用AHK,只要下面这一小短行就可以搞定:
^LWin::MButton
同时按下Ctrl和Win键,就相当于按下了鼠标中键。
当然,AHK还可以做很多很多的事情,几乎无所不能,包括GUI,比任何其它Windows的编程语言比如Python和C++等,要简单容易一万倍。不可思议的简单容易,没有编程基础的都可以上,比如上面就这么一行,谁不会?没有任何其它的语言可以做到,not even close。而且这个语言非常的高效,几乎不使用内存和CPU。相比之下,和它非常类似的Autoit就总是会一直不停地使用CPU。
我用AHK最常做的一件是就是让那些恼人的弹出提示自动消失,比如一些更新提示。下面这短短的两行,就能把IDM的更新提示阻挡掉:
Loop {
WinWait, New version of Internet Download Manager is available, Cancel
ControlClick, Cancel, New version of Internet Download Manager is available
}
是不是不能再简单?
再举一个例子,前面有人问怎样disable浏览器的拖动功能(pan mode)。就这样:
MButton::RButton
一目了然,然后你按中键的时候,变成了按右键。
模拟鼠标中键
版主: Jack12345
Re: 模拟鼠标中键
Ahk极好啊,离不开。不过个人觉得ahk(或许是windows窗口机制的原因?)最倒胃的一个问题是,没法cancel button input。。。 一个button一旦击键了就一定会在up时生效,而且只能up 没有cancel,不知道是不是俄太菜有没有高人能支个招
俄是懒虫,弄的日用脚本就是普通鼠标尽可能多功能一鼠(左/右/轮)走天下省点儿心,而且尽可能兼容日常用的各种软件cad/ide/retroware/新软件等等等不要出扰乱。常用安排:
按着右键时,上滑是复制,下滑是粘贴,右击左是enter,右击轮是space
按着轮时,轮击左是backspace,轮击右是custom alt+tab context,上滑是数字符号context menu,下滑是del
其它键盘划的都是很常用的模式/短语/格式快捷方式了,各种tex lisp 常用短语 快速格式化之类
问题就是,按下右键和中键使用各种功能,这个如果想兼容性最好最可靠,那么最好还是按键时只要判断可以就立即button down,那么这个button就一定会在up处生效,无法cancel掉。不这样做的话比如建模/玩游戏时很多拖曳都会被影响。但是抬键up时永远是一个大头痛。。。比如只要按住右键使用那些复制粘贴/回车空格之类鼠标键,那么一定就会最后出个右键菜单或者游戏右键操作生效。如果使用send左键或esc让菜单消失?那么兼容性是大麻烦,比如chrome用esc会乱,老程序比如wordpad用左键关不掉。目前只能用全局变量罗列一下,尽量管理游戏里不会乱;然后脚本弄个查鼠标位置有没有context menu,只要有就关掉control hWnd。。。
俄是懒虫,弄的日用脚本就是普通鼠标尽可能多功能一鼠(左/右/轮)走天下省点儿心,而且尽可能兼容日常用的各种软件cad/ide/retroware/新软件等等等不要出扰乱。常用安排:
按着右键时,上滑是复制,下滑是粘贴,右击左是enter,右击轮是space
按着轮时,轮击左是backspace,轮击右是custom alt+tab context,上滑是数字符号context menu,下滑是del
其它键盘划的都是很常用的模式/短语/格式快捷方式了,各种tex lisp 常用短语 快速格式化之类
问题就是,按下右键和中键使用各种功能,这个如果想兼容性最好最可靠,那么最好还是按键时只要判断可以就立即button down,那么这个button就一定会在up处生效,无法cancel掉。不这样做的话比如建模/玩游戏时很多拖曳都会被影响。但是抬键up时永远是一个大头痛。。。比如只要按住右键使用那些复制粘贴/回车空格之类鼠标键,那么一定就会最后出个右键菜单或者游戏右键操作生效。如果使用send左键或esc让菜单消失?那么兼容性是大麻烦,比如chrome用esc会乱,老程序比如wordpad用左键关不掉。目前只能用全局变量罗列一下,尽量管理游戏里不会乱;然后脚本弄个查鼠标位置有没有context menu,只要有就关掉control hWnd。。。
代码: 全选
----------------------------
$MButton Up::
......
if (mctrlv5>=1)
{
SendInput {MButton Up}
SendInput {MButton down}
}
SendInput {MButton Up}
mctrlv := 0
mctrlv5 := 0
......
if GetKeyState("RButton")
{
;SendInput {Space}
SendInput {RButton Up}
Sleep, 100
closeContextMenu()
SendInput {Space}
;SendInput {Backspace}
mctrlv4 := 1
......
}
----------------------------
$RButton Up::
if GetKeyState("MButton")
{
SendInput {MButton Up}
mctrlv :=0
if (mctrlv3<1)
{
AltTabMenu()
SendInput {RButton Up}
}
if (mctrlv3>=1)
{
AltTabMenu()
mctrlv3 :=0
}
;SendInput {MButton Down}
......
}
else if (mctrlv==1)
{
......
}
else if (mctrlv4==1)
{
SendInput {RButton Up}
Sleep, 100
closeContextMenu()
mctrlv4 := 0
}
else{
SendInput {RButton Up}
}
return
----------------------------
closeContextMenu()
{
vDHW := A_DetectHiddenWindows
DetectHiddenWindows, Off
vTMM := A_TitleMatchMode
SetTitleMatchMode, RegEx
;Get mouse position and handle to wnd under the mouse cursor
MouseGetPos, MouseScreenX, MouseScreenY, MouseWindowUID, MouseControlID
WinGet,ControlHwnd, ID,ahk_id %MouseControlID%
ControlSend,, {LButton}, ahk_id %ControlHwnd%
WinClose, ahk_id %ControlHwnd%
。。。。。。
WinActivate, ahk_pid %ControlHwnd%
DetectHiddenWindows, % vDHW
SetTitleMatchMode, % vTMM
return
}
----------------------------