@dog 兄帮我写个屏蔽右键连击的 AHK 好不好

费劲,估计是内部回弹力量不足导致的,金属老化吧。

老了,脑子记不住,其实五键鼠标我都自定义的记不住功能过……

我来现身说法了,7月初喷的 wd40,至今未复发

我鼠标用了 10年 自己修了N次
我是怎么修的
微动说白了 坏的就是那个小方盒子里的小铜片
我这些年都没用过烙铁
就是网上买欧姆龙的微动
然后 都拆开 每次替换 那个小铜片
几分钟就替换好 0 人工费用 费用只有买微动的费用
罗技的鼠标 自从过了 3年质保只会 坏了一直这么换的
我鼠标有左右右 3个按钮 用这个方法都换遍了 妥投的
就网上号称5000万次点击的绿点微动 小弹片 我都换4 5个了
坏了微动就换鼠标 犯不上 也不打游戏对鼠标的唯一要求就是按钮要多 可以自定义罗技G600这鼠标跟了我10年 真的太耐用了
其他功能都没问题 也舍不得换。。 侧键 10年没坏过 滚轮 是光栅滚轮 进过灰 进过头发挡住过光栅那个光感器 用镊子清理干净也没啥打毛病
而且因为不动烙铁 不会损坏PBC主板 可以无限次的更换
如果是直接换整个微动 烙铁烙铁的多了也会损坏PBC主板 烙几次就挂了
对了还有脚垫的成本 螺丝都在脚垫下边 撕开脚垫只会 有时候粘性不足就需要买一副新的鼠标脚垫

现在这个有线鼠标不是特别喜欢,下一次打算换无线款,然后长期用,可能就类似你这种修修补补的玩法。

罗技的鼠标做工真不错,就是不好拆。还有脚垫拆了一次以后弄不回去了,于是买了两幅脚垫,觉得有点亏,而且还不太合适,不过我索性贴在别的位置了,再拆的话倒是不再影响了。

以前有的鼠标滚轮的轴断过,当时我整个人都懵了,我不知道鼠标还能这么坏,那款鼠标我这样坏了两个,确定是质量问题。

还有就是磨砂的外壳都镜面了,看看贴纸还挺贵,就不值当的折腾,一切等买无线的再说了。

现在就想软件层面先将就一下……

这个方法最好。 但是我感觉自己手残,有没有技巧? 是否需要多练习或者靠天赋?

只需要一把 弯头的尖嘴镊子。。。 没技巧。。简单

你试一下这个方案吧。
应该是最简单的了,理论上能运行,有问题再改。

image

把第一段代码保存成 killR1.ahk

#Persistent
~Rbutton up::
{
run killR2.ahk
exitapp
}

把第二段代码保存成 killR2.ahk

#Persistent

sleep,300
run killR1.ahk
exitapp

Rbutton::
{
return
}

然后运行 killR1.ahk

1 个赞

明天我看看怎么用一个ahk 就能搞定,
两个ahk切换的时候有些慢,可能不足以屏蔽特别特别快的右键连击。

你这个方案有点恐怖。正常应该是从"#HotIf"入手吧,你们怎么没一个用的。

类似

#HotIf r_up()
Rbutton up::
{

}

#HotIf r_dn()
Rbutton::
{

}
#HotIf

我试过,拦截r_dn 的话,长按右键拖动功能就失效了,没想出来怎么搞定拖动
你试试呗

你可能把要拦截的事件想反了。

这是我写的。我测试正常按下弹起,最快也到达了120毫秒。所以这里设置小于100的都作为热键触发。
在我这测试没有任何效果,因为我常规操作都是大于100毫秒的。所以自然右键拖动也正常。

__r(r) {
	static time := 0, skip := 0
	if skip
		return skip := 0
	DllCall('QueryPerformanceCounter', 'Int64P', &t := 0)
	out := Round((t - time) / 10000) > 100 ? 0 : 1
	time := t, skip := r
	return out
}

#HotIf __r(0)
RButton up::
{}
#HotIf __r(1)
RButton::
{}
#HotIf
1 个赞

双脚本是个有趣的思路,不管是否解决问题,倒是很让我开阔眼界。

@foyax 的代码我读不懂,我好菜……

不过,大概我得买新鼠标了,中键偶尔也连击,均匀老化,我总不能给每个按键都定制化补偿一下(就怪乖的,2333

你测试下脚本是否有效,我鼠标测试不出来。

似乎挺好用的,让我用几天看看

1 个赞

这个是单一 ahk 的版本,原理一样,但是相比双ahk更快,可以试试这个

#Persistent
runwith("admin")

Hotkey, ~Rbutton up, MyLabel2, on
return

MyLabel1:
{
return
}

MyLabel2:
{
Hotkey, ~Rbutton up, , off
Hotkey, Rbutton , MyLabel1, on
settimer, MyLabel3, -300
return
}

MyLabel3:
{
Hotkey, Rbutton , , off
Hotkey, ~Rbutton up, MyLabel2, on
return
}

RunWith(RunAsAdmin:="Default", ANSI_U32_U64:="Default")
{
	; 格式化预期的模式
	switch, RunAsAdmin
	{
		case "Normal","Standard","No","0":		RunAsAdmin:=0
		case "Admin","Yes","1":								RunAsAdmin:=1
		case "Default":												RunAsAdmin:=A_IsAdmin
		default:															RunAsAdmin:=A_IsAdmin
	}
	switch, ANSI_U32_U64
	{
		case "A32","ANSI","A":								ANSI_U32_U64:="AutoHotkeyA32.exe"
		case "U32","X32","32":								ANSI_U32_U64:="AutoHotkeyU32.exe"
		case "U64","X64","64":								ANSI_U32_U64:="AutoHotkeyU64.exe"
		case "Default":												ANSI_U32_U64:="AutoHotkey.exe"
		default:															ANSI_U32_U64:="AutoHotkey.exe"
	}
	; 获取传递给 “.ahk” 的用户参数(不是 /restart 之类传递给 “.exe” 的开关参数)
	for k, v in A_Args
	{
		if (RunAsAdmin=1)
		{
			; 转义所有的引号与转义符号
			v:=StrReplace(v, "\", "\\")
			v:=StrReplace(v, """", "\""")
			; 无论参数中是否有空格,都给参数两边加上引号
			; Run       的内引号是 "
			ScriptParameters  .= (ScriptParameters="") ? """" v """" : A_Space """" v """"
		}
		else
		{
			; 转义所有的引号与转义符号
			; 注意要转义两次 Run 和 RunAs.exe
			v:=StrReplace(v, "\", "\\")
			v:=StrReplace(v, """", "\""")
			v:=StrReplace(v, "\", "\\")
			v:=StrReplace(v, """", "\""")
			; 无论参数中是否有空格,都给参数两边加上引号
			; RunAs.exe 的内引号是 \"
			ScriptParameters .= (ScriptParameters="") ? "\""" v "\""" : A_Space "\""" v "\"""
		}
	}
	; 判断当前 exe 是什么版本
	if (!A_IsUnicode)
		RunningEXE:="AutoHotkeyA32.exe"
	else if (A_PtrSize=4)
		RunningEXE:="AutoHotkeyU32.exe"
	else if (A_PtrSize=8)
		RunningEXE:="AutoHotkeyU64.exe"
	; 运行模式与预期相同,则直接返回。 ANSI_U32_U64="AutoHotkey.exe" 代表不对 ahk 版本做要求。
	if (A_IsAdmin=RunAsAdmin and (ANSI_U32_U64="AutoHotkey.exe" or ANSI_U32_U64=RunningEXE))
		return
	; 如果当前已经是使用 /restart 参数重启的进程,则报错避免反复重启导致死循环。
	else if (RegExMatch(DllCall("GetCommandLine", "str"), " /restart(?!\S)"))
	{
		预期权限:=(RunAsAdmin=1) ? "管理员权限" : "普通权限"
		当前权限:=(A_IsAdmin=1)  ? "管理员权限" : "普通权限"
		ErrorMessage=
		(LTrim
		预期使用: %ANSI_U32_U64%
		当前使用: %RunningEXE%
		预期权限: %预期权限%
		当前权限: %当前权限%
		程序即将退出。
		)
		MsgBox 0x40030, 运行状态与预期不一致, %ErrorMessage%
		ExitApp
	}
	else
	{
		; 获取 AutoHotkey.exe 的路径
		SplitPath, A_AhkPath, , Dir
		if (RunAsAdmin=0)
		{
			; 强制普通权限运行
			switch, A_IsCompiled
			{
				; %A_ScriptFullPath% 必须加引号,否则含空格的路径会被截断。%ScriptParameters% 必须不加引号,因为构造时已经加了。
				; 工作目录不用单独指定,默认使用 A_WorkingDir 。
				case, "1": Run, RunAs.exe /trustlevel:0x20000 "\"%A_ScriptFullPath%\" /restart %ScriptParameters%",, Hide
				default: Run, RunAs.exe /trustlevel:0x20000 "\"%Dir%\%ANSI_U32_U64%\" /restart \"%A_ScriptFullPath%\" %ScriptParameters%",, Hide
			}
		}
		else
		{
			; 强制管理员权限运行
			switch, A_IsCompiled
			{
				; %A_ScriptFullPath% 必须加引号,否则含空格的路径会被截断。%ScriptParameters% 必须不加引号,因为构造时已经加了。
				; 工作目录不用单独指定,默认使用 A_WorkingDir 。
				case, "1": Run, *RunAs "%A_ScriptFullPath%" /restart %ScriptParameters%
				default: Run, *RunAs "%Dir%\%ANSI_U32_U64%" /restart "%A_ScriptFullPath%" %ScriptParameters%
			}
		}
		ExitApp
	}
}
1 个赞

考虑到权限问题好评,我晚点测试

刚才实际拆装了一次鼠标,回来膜拜大佬。

方法可行,但是我做不来,我拆开微动又装回去就挺费劲了,外壳和铜片几乎被我搞报废。拆的凯华微动。

小,并且铜片是卡在里面的,自己拆装之后影响铜片原本的弹性系数,我弄完以后变得软趴趴的了。

开始意识到自己笨蛋(

感觉我也是手残党. :sob:


我是用这种弯口镊子 个人感觉挺好按的…
然后我买的这种 可能是我这个鼠标的这种微动比较好按吧
比较微动也有很多种

哈哈多买几个多试试就熟练了 怎么说也比直接换个同款新鼠标强 个人感觉

这个我没拆……不过我手头还有一个旧的这种欧姆龙微动一会儿我拆一下看看。

镊子倒是都有……就是觉得自己手指头像个胡萝卜:carrot:

还是直接换微动简单一点,电烙铁加热用镊子一撬就下来了。