Stroke 开源鼠标手势软件

我昨天测试的时候还发现 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 类型的对象,它能够获取当前手势的起点。

提供的配置文件中手势的设置如下:

手势鼠标键:鼠标右键。

标签页:firefox、chrome、Code。
资源管理器:explorer。
网页浏览器:firefox、chrome。

“痕迹:左键”表示划手势的过程中除了手势鼠标键只曾按下过“鼠标左键”。即使按下后释放痕迹依然保留到手势执行完成。

如果你没有五键(或更多)鼠标,我强烈建议你可以将“左键点击”手势绑定到启动器(例如我的Laufe)的快捷键上(对于 Laufe 是 Base.PressKeys("<#C0>");),这也是一个非常提高效率的好办法(否则你可以直接绑定到 X1 会更方便)。
另外,将“中键点击”手势绑定到截图(比如我的 Screenote)的快捷键(对于 Screenote 来说是Base.PressKeys("#2C");)上也不错。

除了通过痕迹来处理不同的情况,你还可以通过设置一些状态让 Stroke 来执行一些特定环境的操作,例如一个有意思的 idea 是,你可以通过改变画笔的颜色,例如将画笔变成红色,那么复制文字后直接使用百度来搜索关键字,关闭的时候的行为是关闭所有同类型的窗体(例如资源管理器),由于你可以直接写 C# 代码,所以只要你能想到的在 Windows 上的操作,很大概率是可以实现的。甚至你可以基于 COM 组件去生成一个 Word 文档,或者解压缩 zip 里的所有符合某正则表达式的文件等等。如果你不想写代码,那么如果你有熟悉的库想使用,只需要把它放在 Stroke.exe 的同目录中,如果希望简化库中的名称可以在配置文件中添加引用即可。如果你有大段的代码,最好在 Visual Studio 中调试通过再粘贴到配置程序中,调试时只需要保证用到的程序集添加到测试项目中即可。脚本所在的位置相当于一个方法体中,因此测试项目的准备工作仅仅是创建一个空方法。

原来Screenote也是你写的,那我顺便提一句,Screenote是截图、贴图一体化的,其实这两种功能并不一定会同时用到,能否以命令行参数的方式分别调用截图和贴图功能呢?(Snipaste的命令行居然要求软件本身在后台运行,对于平时并不经常用的人而言,这个设计我不太接受,毕竟Snipaste还是太“重”了)
PS:Screenote这个软件也很轻便,要是有一些简单的编辑功能就是我理想中的截图工具了(Snipaste很好用也很强大,但是大多数功能其实不太用得到,综合起来居然是QQ的截图功能我个人的体验更好),不过我估计作者的重点也不在这里。

直接贴剪贴板的图就是加多一个 Shift 呀。
考虑到截图之后肯定是要么保存截图到文件、要么复制一下之类的嘛,所有我就干脆直接贴出来了,想要复制就复制想要保存就保存,不用了就右键或者 Esc 关闭也不麻烦呀。
Screenote 也是开源的喔,如果确实需要添加参数来运行改改也很简单嘛。
编辑我是这样考虑的,不是有很多在屏幕上编辑的软件(比如这个 ppInk)嘛,而且做得都蛮成熟了,所以可以先在屏幕上标好再截图,这样可以保持 Screenote 不变得复杂。

试用了一下,非常优势,准备切换过来了
不过作为不会超能力的普通人有几个问题希望解决下。

1,
if(_ == 0x00000001)
请问这是什么意思,看下文好像是个条件设置,假设我想将这条件设置为Notepad.exe应该怎么弄。

2,希望有忽略程序的选项。

3,现有好像都是根据进程判断,有没有针对任务栏 Shell_TrayWnd的窗口判断选项,唯一切换难点在这了,我上一曲,下一曲,音量增加剪,最大化最小化全是在任务栏上面实现的。

4,小建议Stroke.Configure设置确定后启动Stroke,稍微减少下不方便。

大佬,S+net无敌

关于 1,这个是按键痕迹,在项目主页有介绍:
按键痕迹:当你按下手势鼠标键后,其余的鼠标键在被按下时将被记录,从而你可以根据痕迹的不同来使得动作具有不同的含义。痕迹在脚本中使用标识符“_”来获取,根据不同的按键,痕迹中相应的位将被置成“1”,因此除去被设置为手势鼠标键的按键外,还有 4 个按键可能被记录痕迹,你可以根据它们来区分 16 种不同的情况:
Left:0x00000001
Right:0x00000002
XButton1:0x00000004
XButton2:0x00000008
Middle:0x00000010
_ == 0x00000001 表示曾经除了手势键外只按下过鼠标左键。
如果你想单独为“Notepad.exe”设置相关的操作,应该新建一个动作包,只需要在动作包的规则中填写正则表达式“notepad.exe”或“notepad”(更好的方式是使用“添加路径”按钮将十字光标拖到记事本上),动作包里的动作就只有 Notepad.exe 能响应了。

关于 2,有考虑,不过最近比较忙,暂时没有时间更新。

关于 3,Base 库没有针对 “Shell_TrayWnd”来进行判断的函数,如果需要的话可以通过引入 Stroke 项目中的 Stroke.CurrentWindow,然后使用 WIN32 API 的 GetClassName 函数进行判断。上一曲、下一曲;音量增加、减少;最大化、最小化这些我提供的配置里面都有喔,可以直接使用手势操作。

关于 4,用户有可能希望或者不希望使用管理员身份执行,因此不便关闭 Configure 时启动 Stroke。

任务栏这个我没编程能力,只会AHK之类的脚本,所以准备先自己调用脚本。
但是居然连脚本也调用不成功。。
比方说这个,
Base.Run(“D:\Program Files\OneDrive\Stroke\MediaNext.ahk”);
我调用的是"D:\Program Files\OneDrive\Stroke\MediaNext.ahk"
无论我转义还是不不转义都不成功。
想请教具体格式是什么。

Base.Run("D:\\Program Files\\OneDrive\\Stroke\\MediaNext.ahk");
在 C# 中字符串里的 \ 需要转义写成 \\

下一曲压缩包里的配置就有喔,Base.PressKeys("#B0"); 这个就相当于下一曲。虚拟键码可以对照 Keys.xlsx。我给出的配置的手势在这个帖子的某层楼里面有,可以找找。

我是需要一个全局切换歌曲且手势够简单(→)的需求,→在通用里也有,所以需要单独监听任务栏窗口,为了配合这手势软件改为直接在AHK脚本里监听了按键,现在已经差不多符合我的要求了,程序忽略不是很急,等待作者的下一次更新吧。
谢谢啦。

请问有没有在某个程序下禁止Stroke的功能?或者是已经有了,但是我不会设置。

1 能否像s+net那样支持摇杆手势,鼠标左右键,鼠标右左键,鼠标按右键滚轮上下

2 分屏幕上下左右中间区域手势起止点脚本如何写

非管理员模式下,任务管理器最大化的时候,右键点击任务栏无效,不会弹出菜单