Stroke 开源鼠标手势软件

多谢! :smile:

嗯?在高分屏上有什么问题吗?是 dpiAware 是 true 的,不响应缩放。不一定不需要操作任务栏呀,stroke 的设计是手势的起点下面是操作的窗体,所以用户要操作任务栏的话是需要从任务栏开始画的。

明白了,确实可以 :+1: 楼主代码写的很简洁漂亮。在屏幕绘制上,winform确实比wpf性能好。

多谢,你的 Quicker 也很有趣。

嗯嗯,其实Quicker里也有手势功能,不过我不推荐用户用,推荐用轮盘菜单 :joy: 它更简单一些,不用记忆位置,手势功能只给个别需要的人作为触发方式的一种。

做手势功能的时候我还研究过怎么把手势和轮盘结合,比如刚开始的时候显示轮盘,划出去之后轮盘自动收缩,然后显示手势,不过效果都不太理想撤掉了。

Quicker手势独创的一个功能是发呆提示,如果当前识别出来的手势不是想要的那个的时候,可以停住绘制,过一段时间会根据匹配度显示动作列表,鼠标移动到某个上松开就可以触发动作了。

Stroke 目前似乎还没有增加手势识别提示,估计也是需要的,对于使用者有可视化的反馈非常重要。 另外也缺不了按应用添加自定义动作的功能,还有非常多的工作要做。

另外,我简单看了一下代码,目前手势的绘制和识别似乎是在UI线程,这可能会有一定的性能影响(在连续识别手势的情况下)。

以上供参考。

嗯,是呀,绘制手势必须在主线程进行呀,即使是使用多线程,修改 UI 都必须转到主线程来。
不准备做手势提示或者类似的东西,主要是考虑到用户一般也不会去看,画对了就是对了,错了就错了,因为画手势就是一瞬间的事情呀。根据我使用鼠标手势这些年的理解,使用这东西的人最在意的是效率,你应该也不会画完手势之后去看看提示再决定是不是释放鼠标键吧?Stroke 识别的准确率还是挺高的,根据自己这些天的使用经验来说,可能一天也没识别错几次。
关于是不是能记住,我个人来说是完全没问题的,首先,其实适合鼠标手势来做的事情也并不是很多,除非有特殊的需求否则也没有必要把一些不常用的复杂功能做进去;其次合理的编排手势也有利于记忆,例如我给出的配置来说,先向左划的三个手势都和媒体键相关,这样就有利于记忆,熟练之后都是肌肉记忆了,就类似于你学双拼之类的,基本是不需要思考的,这本身也是效率的来源。有时候事物都是有两面性的,比如说你的那种轮盘的方式,或者模仿你的做的那个,都是需要观察屏幕再点击特定的位置的,操作的效率上来说肯定会比手势慢上一些了,因为手势可以连看都不看直接就划。
按应用添加自定义动作?是不是指在操作不同的程序的窗体时候的同一手势执行不同的脚本?这个是有的喔,在我这里是叫做动作包,所有的动作都是在动作包里的,动作包使用正则表达式来定义,就看看是不是能够匹配可执行文件的路径。比如你看我配置的那个浏览器的动作包,里面有用Chrome和Firefox,标签页就是含有标签页并且能响应那几个快捷键的动作包。
可以看一下上面的测试情况,Stroke 大概从识别到完成invoke脚本执行大概是4毫秒,如果用户1秒能画出 250 个手势 Stroke 就会有压力。性能方面目前来说还不错,感兴趣的话可以体验一下喔。
Stroke 的目标并不是做一个功能丰富的鼠标手势,我准备让它尽可能精简,它本身不提供任何的功能,正如你看到的代码,那些功能不过是在 Base 库里实现的罢了,并且我也要保证 Base 尽可能少的功能,只提供我认为作为鼠标手势最常用的函数,我设计的软件一贯都有的风格就是这样,我只提供我觉得最好的方式给用户,不添加任何我觉得不必要的东西,因此用户需要更高的学习成本或门槛。其实这些软件做出来的初衷就是给我自己用的,开源和分享是顺便的事情:smile:当我在用目前的软件不太爽的时候,就会考虑自己写一个,之前我用的是 strokesplus.net,功能很全面很强大(他甚至考虑了触屏怎么画手势,弄了一个悬浮球),但是加载太慢、识别速度也有点延迟,配置界面看起来太臃肿,我就思考,这些东西都是我需要的吗?平常用到的不过就是那十几个手势呀,所以我才自己写了一个。所以我的目的和你不一样,你做的是商业软件,首要考虑的是用户,而且是大多数的用户,所以需要满足他们各种各样的需求,还要考虑怎么把软件做得基本不需要学习成本,“小白”一看也会用,但这些不是我考虑的,哈哈哈哈。不涉及到钱的问题就可以很轻松。
不过话又说回来,我还是很看中扩展性的,因此Stroke 提供了最大的自由度给高级用户,在 Base 库都不能满足的情况下,允许他们直接写 C# 代码,也可以直接调用现有的库,比如说如果你的 quicker 如果有什么功能是写成了 dll 的,那么我的 Stroke 也是可以直接用的。

@strong 已更新。

理解了,确实是一个很好的思路。 如果需要代码签名开启uiAccess,我可以义务一下 :smile:

2 个赞

谢谢,我发布的很频繁,总是劳烦你签名不太好。如果只是为了开启 uiAccess 就让用户生成证书自己签吧。证书挺贵的,我也没赚钱,哈哈哈哈。

StrokesPlus.net 如果是臃肿, 那StrokesPlus 会不会更好点? 支持快捷键?

目前的版本来说,如果在 StrokesPlus.net 和 StrokesPlus 之间选一个,我比较倾向于 StrokesPlus,至少启动速度上来说 StrokesPlus 更快一些。
你问的是 StrokesPlus 支持快捷键吗?什么快捷键?

辛苦!基本都正常了,就是在chrome下偶尔还是无法弹出任务栏,需将chrome最小化一次以后才正常.

我昨天测试的时候还发现 vs 如果不是最大化,而是正常状态但是遮盖了那一个像素,任务栏也是弹不出来的,不过和 Stroke 没有关系喔,关掉 Stroke 也这样的。不过不知道 Chrome 是不是这种情况。目前来说 Stroke 在画完手势的时候立刻就取消置顶了,所有按理说不会有影响。主要是 Windows 的这种实现不太健壮呀,就不能直接通过判断鼠标的位置来弹出任务栏嘛 :sweat_smile:

StrokesPlus非常小巧.启动非常快. 用了很久了. StrokesPlus支持快捷键功能 通过快捷键执行脚本.不知道你那个学习成本高不高 还没适用

Stroke 不支持快捷键执行脚本,这个交给 ahk 不是更好吗?
关于学习成本,如果只是使用Base库,简单看看项目主页的介绍根据我提供的配置依葫芦画瓢就差不多了(或者你也可以直接用我的配置,那样的话学习成本就是熟练使用几个手势),如果想自己编写高级功能,学习成本就是学 C# 的成本。如果你本身就会 C#,那就没有什么成本。

论坛帖子的时间轴好像出了一点问题喔。

发现了。

你看下这个手势,还有触摸板手势,双指下滑粘贴 :joy:

有没有想添加触摸板手势的感觉

没有打算支持触摸板(没有测试过,不知道表现得怎么样),当然鼠标也划不了双指了。不过我昨天添加了一个新特性,暂时把它叫做按键痕迹吧。就是划动鼠标的过程中记录用户是否按过中键、左剪、右键、X1、X2 之中的哪些键。用户可以根据这个痕迹进行判断,从而执行不同的操作。例如原本往左上角在浏览器中划是关闭标签页,那么如果我中途按下过左键(右键划手势),那么就直接关闭窗体。除去被设定为触发手势的键,其余有4个键可能产生痕迹,因此用户可以依据的情况有16种。这个版本已经提交到 GitHub 了,但是还没有发布,感兴趣的可以先编译试试。

1 个赞

2020-10-15

按键痕迹:当你按下手势鼠标键后,其余的鼠标键在被按下时将被记录,从而你可以根据痕迹的不同来使得动作具有不同的含义。痕迹在脚本中使用标识符“_”来获取,根据不同的按键,痕迹中相应的位将被置成“1”,因此除去被设置为手势鼠标键的按键外,还有 4 个按键可能被记录痕迹,你可以根据它们来区分 16 种不同的情况:

  • Left:0x00000001
  • Right:0x00000002
  • XButton1:0x00000004
  • XButton2:0x00000008
  • Middle:0x00000010

Base 库:
Base.KeyPoint:是一个 Point 类型的对象,它能够获取当前手势的起点。