模拟鼠标中键

版主: Jack12345

回复
fard楼主
论坛点评
论坛点评
帖子互动: 311
帖子: 2107
注册时间: 2023年 12月 5日 14:39

模拟鼠标中键

帖子 fard楼主 »

用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

一目了然,然后你按中键的时候,变成了按右键。
Elvingg
见习点评
见习点评
帖子互动: 204
帖子: 1799
注册时间: 2022年 11月 28日 01:20

Re: 模拟鼠标中键

帖子 Elvingg »

出来以前上课用过触摸板,其它时间必带鼠标啊
fard楼主
论坛点评
论坛点评
帖子互动: 311
帖子: 2107
注册时间: 2023年 12月 5日 14:39

Re: 模拟鼠标中键

帖子 fard楼主 »

Elvingg 写了: 2024年 1月 18日 22:40 出来以前上课用过触摸板,其它时间必带鼠标啊
现在触摸板很好用了,我都不用传统鼠标了,感谢苹果,在那之前几十年笔记本上的鼠标都没法用。
Elvingg
见习点评
见习点评
帖子互动: 204
帖子: 1799
注册时间: 2022年 11月 28日 01:20

Re: 模拟鼠标中键

帖子 Elvingg »

fard 写了: 2024年 1月 18日 23:43 现在触摸板很好用了,我都不用传统鼠标了,感谢苹果,在那之前几十年笔记本上的鼠标都没法用。
还是太累,太慢
Riikanbkk(递归鼠)
见习点评
见习点评
帖子互动: 235
帖子: 1489
注册时间: 2022年 12月 7日 23:03

Re: 模拟鼠标中键

帖子 Riikanbkk(递归鼠) »

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。。。

代码: 全选

----------------------------

$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
}

----------------------------
回复

回到 “电脑手机 - 精华区”