分享

StrokesPlus教程(2013年3月26日更新)

 雨夜晓灯 2014-04-25
本帖最后由 samtogo 于 2014-1-4 23:35 编辑



目前S+已经完美支持win8了,包括支持Metro应用下可以划出手势轨迹(原来的版本轨迹不可见),支持win8下的alt+tab切换等等功能,而伴随着这一改进,目前S+的发布方式也发生了变化,不再提供增量更新包,2个安装包(一个win8,一个win8以下系统,因为win8下需要特殊签名才可以使用),一个绿色版



2013.3.26 添加对汉化包失效的说明以及上传个人配置文件



前言:     
相信很多朋友都跟我一样,最初接触到鼠标手势都是从浏览器这小小的窗户开始的,简单的一画就能轻松的实现关闭、刷新等等功能,那时候觉得鼠标手势真神奇。不过,浏览器自带的鼠标手势,总有各种各样的缺点,比如说自定义性不强,流畅度不够,使用有限制等等。而最好的办法就是通过系统的全局鼠标手势软件来解决,当然这并不是说全局就一定比自带的好,浏览器的手势也有一些功能是全局无法完成的。Strokeit应该就是其中的佼佼者了,目测国内手势使用者中占有率很高,不过这个软件从2010年1月4号更新后在也没有更新了。那么StrokesPlus相对于Strokeit来说,不仅仅功能更加强大(支持脚本动作,能实现更多功能),作者更新非常勤快(对win8完美支持,strokeit在win8下有许多小问题)。我也是从Strokeit转到StrokesPlus,熟悉了StrokesPlus之后,Strokeit就可以彻底忽略掉了。
    鉴于目前StrokesPlus就没有什么好一点的教程给新手入门,我准备耐心点写个教程出来,希望又更多人加入到StrokesPlus阵营来吧。


基本信息:
官方网站:http://www./
下载地址:
http://www./forum/forum.asp?FORUM_ID=6
汉化包:http://www./forum/topic.asp?TOPIC_ID=273
(使用方法:将汉化包中的文件解压到StrokesPlus的根目录下即可)
个人自用配置文件:
StrokesPlus.zip (24.9 KB, 下载次数: 3275)

关于StrokesPlus版本,我简单介绍一下,官方提供了32位和64位的两种版本,支持主流的Windows操作系统,从XP到win8。官方发布的发布的版本有3种(32位和64位相同):
绿色版(包含签名版和未签名版)
安装版(不签名版,推荐win8以下系统选用)
安装版(签名版,推荐win8系统选用)
现在来讲讲签名和不签名版本的区别,为了完美支持win8,软件的作者Rob作了很大的努力,目前签名版已经可以实现Metro应用下画出鼠标手势轨迹,原来虽然手势可用,但是轨迹不可见,还有类型alt+tab等等快捷键原来win8下无法实现的现在都已经没有问题了。但是签名版也有缺点,只能运行在受系统保护的路径下才行,推荐系统盘下的Program Files下面,而置于这个目录下面,必须以管理员权限运行,如果不以管理员权限运行的话,必须将配置文件转移到其他路径下,运行方式如C:\Program Files\StrokesPlus\StrokesPlus.exe D:\backup\StrokesPlus.xml


如果你经常使用Metro应用,并且需要使用到如alt+tab这样的特殊快捷键,我推荐你使用签名版,否则,不签名版更加方便!


将以上地址的StrokesPlus解压到指定的目录(最好是非系统目录,这样重装系统后直接运行就可以了)

StrokesPlus文件夹解析:
Licenses.txt 这个没什么好说的了,软件的许可文件。

StrokesPlus.exe 主程序,运行这个就可以了。
StrokesPlus.dll dll文件
StrokesPlus.lua 全局执行的脚本文件
StrokesPlus.xml 所有新建的鼠标手势以及相应各个程序的手势设置全部在这里

StrokesPlus_PAD.xml 包含了此版本的一些基本信息
ActionHelp.xml 脚本的帮助文件
StrokesPlus.html 帮助文件
images文件夹 StrokesPlus.html这个网页所需的图片
如果你使用了汉化包那么还会有Language.xml这个语言文件了。
Tips1:如果要备份StrokesPlus的设置的话,只要备份StrokesPlus.xml(必须的)和StrokesPlus.lua(如果定义了全局脚本)即可。
Tips2:如何设置开机启动?软件默认没有开机启动的选项,要开机启动的话,只需要把StrokesPlus.exe的主程序的快捷方式放到C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs中即可,也就是开始菜单中的启动文件夹中。


本教程将基于英文环境(x86 win7中文旗舰版)编写(有点英文基础的还是不要用汉化包了,都是些很简单的英文单词,官方更新速度比较,有时候汉化包更不上,不过用旧版本的汉化包大部分都是没有问题的)

首次运行,将会弹出 提示窗口。
我来说明下这个意思,就是StrokesPlus默认不是以管理员身份运行,在对待以管理员身份运行的一些程序的时候手势会无效,要在这些程序中也想让S+正常工作的话,那么就要让S+以管理员身份运行。普通权限开机启动:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp(即开始菜单中的启动文件夹,WIN8下没有开始菜单,直接用这个路径即可)下创建S+快捷方式。
管理员权限开机启动:
打开计划任务,创建任务,具体配置如图:

一定要勾上使用最高权限运行!




Win7或者以下的用户普通权限运行即可,如果是Win8的话强烈推荐用管理员权限启动,否则很多地方都将不能使用手势。


基本配置:     

主界面就是这样了。
基本的手势配置就全在Configure Actions这里了。默认内置了3个,Global Actions全局手势,Chrome(难道作者也是Chrome迷?)和Desktop(桌面)。
需要说明的是全局手势的优先级是最低的,将会优先采用应用程序里的手势设置。
添加app(应用程序):


点击左下角的add app,在弹出的对话框中输入Name(名称就可以了),例如IE。
添加完成后就可以再列表里看见IE了

这个只完成了最简单的一部,下面需要将添加的IE和系统中的IE浏览器关联起来。

在FileName中输入IE的进程名即可。
或者更简单一点,将 拖动到IE窗口中再放开

信息将会自动填充,将filename之外的其他项全部清空即可。这样,程序关联就完成了,下面要设置具体的手势了。
为什么要将其他信息清除掉呢?只设置filename的话只要进程名是iexplorer.exe就会执行相应的手势了,如果设置了其他的,如窗口标题等等,那么只有当进程是iexplorer.exe,窗口标题也符合的时候手势才能生效,显示这不是我们想要的,不过后面对于这个特性我们也能运用它去解决一些问题,参加应用1。

下面我们来设置IE下面的手势:

点击Add Action,增加手势

设置名称,如关闭标签

设置完成后,就是这样一种树形目录了。
下面为Close编写具体的代码和设置指定的手势了。
我们都知道浏览器中关闭一个标签的快捷键是ctrl+w。下面我们来看看具体的代码。

执行快捷键,我们需要用到StrokesPlus中的acSendKeys。
acSendKeys是S+中最常用的了,因为我们大部分的操作都是通过快捷键来完成的,具体用法非常简单:acSendKeys("具体快捷键")。
在S+中,是这样表示一些特殊按键的。
下面是对照表
@ = Windows键
+ = SHIFT
^ = CTRL
% = ALT
{F_1}=F1
当中类推
{F_9}=F9
{F10}=F10
当中类推
{F12}=F12
{AT}=@
{PLUS} = +
{CARET} = ^
{PERCENT} = %
a=a
当中类推
z=z
所以ctrl+w就可以表示成^w,整个写法就是acSendKeys("^w")了,ctrl+shift+alt+h就可以表示成(^+%h)了,其他写法类推。
这样语法部分就完成了,下面我们就要为它指定一个手势了。

在guesture下面选择一个我们中意的就可以了。注意的是,一旦在这里我们指定了某个已经被全局手势使用了的手势,那么全局手势将会失效,而同一个程序下面不可以设置两个一样的手势。
如果没有我们想要的手势怎么办,这个可以说是S+做得还不太好的地方,默认带的手势太少了,完全没有Strokeit丰富,自己画一个吧。点击New,
弹出提示框,点击确定,然后画一个自己想要的手势就可以了,画完了,

保存即可。
至此,基本设置已经完毕了,按照这种方式,我们添加其他的程序和手势就可以了。

屏蔽我们不想要使用手势的程序:
在igored List中我们就可以设置了。使用方法与添加应用程序的方法一样,关联好就可以,这个程序中我们就不能再使用手势了(一些需要鼠标右键的游戏中,我们就需要屏蔽掉它们,不然会冲突)。 启用这项的话,运行指定的程序的时候,整个S+都会被禁用掉
搭配其他按键一起使用
除了用鼠标右键,我们还可以配合左键、滚轮以及其他一些按键来一起使用使用。(使用右键的情况下,可以在设置中更改默认的手势按键)


可以使用的按键类型。
推荐使用鼠标的左键和滚轮,不推荐使用键盘按键。使用方法,比如说勾选left button,那么使用的时候只用按住右键,按下左键,松开左键后迅速松开右键,如果按住太长时间的话,那么就会不起作用。自己多试几次,就知道了,滚轮也是一样,可以设置中键点击,也可以上下滚动,分别为其指定不同的手势。不推荐使用键盘按键的原因是,你一边按住鼠标右键,一遍又去点键盘,而且点击完键盘后还要很快的松快鼠标右键,蛋疼不?还有那个X1 button,我想一般的鼠标都是没有的。


进阶阶段:
完成并掌握了上面的基本内容之后,你已经S+常见的一些用法了。接下来这个阶段我们要了解更多,你也会发现S+强大之处了。
1.让手势来完成鼠标点击的日常操作并不是所有的程序都提供了丰富的快捷键可以给我们使用的。这个时候,最简单的acSendKeys就没法用了,那怎么办呢?下面来秀出大招吧——acMouseClick。
这是一个S+的内置函数,我们先来看看简单的使用方法吧。
acMouseClick(x,y,button,down,up)
其中的x和y就是鼠标点击事件发生的起始坐标。最常用的写法就是sp_gesture_start_x(可以简写成gsx)和sp_gesture_start_y和(gsy)。
而button的话,可以使用0,1,2,3,4这些值。我们来看看具体的区别
0:右键
1:中键
2:左键
3:X1键
4:X2键
down可以使用0和1(false and true),如果是1的话,那么S+就会发送一个MOUSE_BUTTON_DOWN ()给应用程序。
up的使用方法同down。
下面来举一个实际应用。在win7的任务管理器中



我们可以通过右键菜单轻松的打开进程所在文件的位置。那么这一操作如何用手势来取代呢?
思路应该是这样的:模拟一个右键点击的事件,然后发送一个O键(这个打开文件位置的快捷键是O),那么这一步就可以顺利完成了。
请看具体代码:
acMouseClick(gsx,gsy,0,1,1)
acSendKeys("{DELAY=50}o")
代码测试应该是没有问题的。不过有没有发现一个问题,代码执行完毕后鼠标又回到了手势的起点处,这给人一种很奇怪的感觉。那怎么办呢?
下面介绍另外一个内置函数——acMouseMove(x,y) x和y同acMouseClick
那么这个时候坐标应该怎么写呢?
显然,我们是想要把最后的光标放在手势的终点处,那么我们就需要使用到sp_gesture_end_x(简写成gex)和sp_gesture_end_y(简写成gey)。
这两个变量即代表了手势终点的x和y坐标。
在上面脚本的基础上加上acMouseMove(gex,gey)即可。
是不是觉得正常多了?
2.延时


如果我们在Windows中删除一个文件,那么用键盘来操作就是按下delete键之后再按enter键。
用一个脚本来表示就是
acSendKeys("{DELETE}")
acSendKeys("{ENTER}")
但是你在具体使用这个脚本的时候,会发现有时候回车并没有起作用。这就是因为没有延时的关系。
我们执行一些操作的时候,总是要暂停一下,让计算机有个反应时间,然后再执行后面的内容,这个就是延时了。
正式因为S+的这种脚本特性,所以在使用多个快捷键的组合的时候,延时就显得特别的重要。
在S+中,有多种延时的写法:
1.acDelay(t) t就是延时,单位是毫秒,t是一个正的整数。
那么
acSendKeys("{DELETE}")
acDelay(50)
acSendKeys("{ENTER}")

这段脚本就正常多了,在按下删除键之后,会有个50ms的暂停,然后再发送回车键。
关于时间的问题,不应该短于50ms,有时候可能50ms也太快了,我们就需要自己适当延长这个时间了。
2.{DELAY X}{DELAY=X}
这是另外的两者写法。怎么用呢?
acSendKeys("{DELETE}")
acSendKeys("{DELAY=50}{ENTER}")
或者
acSendKeys("{DELETE}")
acSendKeys("{DELAY 50}{ENTER}")

有什么区别呢?
虽然都起到了延时的作用。
{DELAY=50}{ENTER}{DELETE}这个例子来说,如果是DELAY=X的话,那么{ENTER}和{DELETE}都将延时50ms(先延时50ms执行回车,然后再延时50ms执行删除,DELAY=X就是设定默认的延时,之后的全部按照这个延时来执行),如果是{DELAY 50}{ENTER}{DELETE}只有{ENTER}延时了50ms,{ENTER}将和{DELETE}一起执行。例外的情况是,{DELAY=50}{DELAY 100}{ENTER}{DELETE},回车键是延时100ms的,删除键延时50ms。
Ps:{DELAY=50}应该和acDelay(50)是相同的
3.按键Down&Up事件
S+提供了按键的Down和Up功能。
最常用的ctrl+w关闭网页标签,我们可以写成acSendKeys("^w"),也可以写成
acSendControlDown() --按下ctrl键
acDelay(50) --延时50ms
acSendKeys("w") --按下w键
acDelay(50)
acSendControlUp() --松开ctrl键
那细看这样写不是更麻烦了吗?除去延时语句,至少也要3句才能完成这个操作?这样的意义何在呢?
举例:
在搜狗浏览器中acSendKeys("^{F_4}")一直不成功,换成了
acSendControlDown()
acSendKeys("{DELAY=50}{F_4}")
acSendControlUp()

就能正常执行了。
记住,Down之后一定要Up,否则键盘的状态将一直是这个键被按下的状态。
除了ctrl之外,还有
acSendAltDown()和acSendAltUp()      Alt
acSendShiftDown和acSendShiftUp()   Shift
acSendWinDown()和acSendWinUp()   Windows键

更多用法请看应用2

4.运行指定的程序
有2中方法,先介绍第一种:
acRunProgram(fullpath, parameters, seconds, style)
fullpath即完整路径,写法C:\\windows\\notepad.exe。
parameters即运行参数,如果不需要的话就不用写。
seconds 程序花费多少时间去等待运行的程序结束,如果过了这个时间程序还没有结束的话,返回0,默认我们填0即可。
style 程序运行风格,请参看http://msdn.microsoft.com/en-us/ ... sktop/ms633548.aspx
默认用1就可以了。
来个完整的实例吧,ping一下卡饭吧。
写法如下:acRunProgram("C:\\Windows\\System32\\PING.exe","bbs.kafan.cn",0,1)


第二种方法:
acShellExecute(verb, file, parameters, directory, style)
verb即执行具体的动作,可以是edit, explore, find, open, print之中的某个值,下面会仔细讲解。
file,即文件名
parameters 同第一种方法,是传递的参数
directory 即目录,这里要讲解下(还是ping卡饭),如果这边写了"C:\\Windows\\System32"的话,那么file那里只要写个"PING.exe"就可以了,这里也可以空着,但是file那里必须写成第一种那种形式。
style 同1 默认1即可

verb讲解(加入D盘下面有个test.doc和test.exe):
当verb使用edit的时候,file只能为可编辑类的文件,比如说txt、doc、ppt等,你如果写个exe或者dll上去,那么这个手势是无效的。
正确写法:acShellExecute("edit","test.doc","","d:\\",1)
explore:可以用来打开文件夹。比如说我们经常使用某个目录如迅雷下载目录,那么我们就可以通过acShellExecute("explore","","","d:\\TdDownload",1),file不能填。
find:可以在directory 指定的目录下搜索,file不能填。
open:全能型的,文件和目录都可以开。填了file打开文件,不填就打开路径。
print与edit相当,用来打印文件

讲解了这么多,打开一个程序的写法就非常简单了。acShellExecute("open","C:\\Windows\\System32\\PING.exe","www.kafan.cn","",1)
如果不写verb呢?
参见应用4


5.剪贴板操作
关于剪贴板的操作,StrokesPlus中提供了2个函数acGetClipboardText()和acSetClipboardText(value)
acGetClipboardText()就是从系统剪贴板中获得保存的值
而acSetClipboardText(value)就是将value保存到系统剪贴板
可能有人会好奇,这两个东西在手势中能起到什么作用呢?
来看个实例吧
日常中,QQ上或者Word中的文档里,我们看到了某个东西,想搜索下,那么我们需要进行的操作有复制,打开浏览器,用搜索引擎搜索。如果有一个手势,直接就能打开浏览器来完成搜索的话,那就方便了。
请看脚本代码:
acSendKeys("^c")  --首先复制选定的字符
local SearchURL="http://www./search?q="..acGetClipboardText()  
这句话是关键,我们通过一个变量来拼接搜索字段,内容就是从剪贴板里获取的。这里是Google,要使用其他搜索引擎请自己更换字段
acShellExecute("",SearchURL,"","","")

--这句用来打开URL。
这样一个全局手势搜索就完成了!

6.窗体信息的获取
S+提供了Find Window让我们可以轻松的获取一个窗体的一些信息,如Title、Class Name、FileName等等,下面就是IE10中新建标签页和打开卡饭的时候分别获取到的信息。
我们可以看到,Title和ClassName都发生了变化,我们正好可以利用这点来实现更多的个性化。建议阅读这个的时候先去阅读下应用1(解决QQ2013的手势配置)。
关于这方面的函数,S+中提供了acGetWindowTitle()acGetClassName()acGetControlID()acGetExecutableName()这4个函数。这4个函数的用法都是一样的,只需要提供3个参数即可,如acGetClassName(hwndTarget,x, y)hwndTarget用于获取窗体的句柄,xy就是窗体的坐标。默认情况下,我们更多是采用acGetClassName(nil,gsx,gsy)这样的写法去获取窗体的Class Name,其他几个函数的用法也是一样的。
那么讲了这么多,这个东西又有什么用呢?下面举一个实例来说明:
我们要在Win7的资源管理器中打开一个进程的位置的时候,如果首先打开的是应用程序选项卡的时候,就需要右键先转到进程,
然后再指定的进程中右键打开文件位置,
如果我们用2action来完成的话(先转到进程,然后打开位置),那么就需要分别指定两个不同的手势来完成。
首先来提一点,在进行鼠标模拟操作的时候,我尝试了很多的方案,我发现,最优的设计,应该是这样一个过程:
     acMouseMove(gex,gey)
     acMouseClick(gex,gey,0,1,1)
     acSendKeys("{DELAY=50}g")
这是一个非常顺畅的过程,但是这样一个手势,对手势有一个要求,就是只能是right或者left方向的,因为菜单是纵向排布的关系,横向移动是不会改变菜单的选择。你可以对比看一下
     acMouseClick(gsx,gsy,0,1,1)
     acMouseMove(gex,gey)
     acSendKeys("{DELAY=50}g")
这样的写法体验显然不如上面来的好。
那么回到正题,如果想要让上面那两个操作公用一个手势(例如向右)该如何实现呢?
我们先用find window分别查看下两个选项卡下的信息。
我们看到了controlid是不同的。思路来了,请看下面的脚本:
local id=acGetControlID(nil,gsx,gsy)   --首先我们需要获得操作窗体的control id
if id=="1053" then                              --如果是应用程序选项卡
     acMouseMove(gex,gey)
     acMouseClick(gex,gey,0,1,1)
     acSendKeys("{DELAY=50}g")
else                                                   --如果是进程选项卡。
     acMouseMove(gex,gey)
     acMouseClick(gex,gey,0,1,1)
     acSendKeys("{DELAY=50}o")
end
这样就可以使用一个手势在一个程序中完成不同的操作了。思路就是这样了,具体的其他应用,大家自己去挖掘吧。
7.另作他用的acDisplayText()
S+中提供了acDisplayText()这样一个函数用来在窗体上显示指定的文本信息。我们首先来看一下使用参数message: 需要显示的消息   
font: 使用的字体名
size: 字体大小
red: RGB中红色的值
green: RGB中绿色的值
blue: RGB中蓝色的值
duration: 显示间隔   
x: 显示位置的X坐标
y: 显示位置的Y坐标
     虽然参数很多,但是谁也不是没事找事的在屏幕上来画个手势来显示点什么吧,如果你是这样的人,我想你也无聊到一定的境界了。当然了,我想到一种情况,画个爱心,显示点”XX,我爱你一生一世”,给你女朋友一个惊喜。为什么要介绍这个东西呢,一开始我也觉得这个东西没什么意义,后来才发现在深入使用的过程中还是能起到帮助的。我们要把这个东西拿来作为调试用,因为本身S+带有脚本功能,而编写脚本的过程中难免出错,只要在一些过程中我们现实一下过程中变量的值,就能帮助我们发现错误,找到错误了。例如在6.窗体信息的获取中,我们获取了control id,我们就可以用类似
local id=acGetClassName(nil,gsx,gsy)
acDisplayText(id, "微软雅黑", 300,0, 0, 0, 1000, 0, 0)
来显示下,看看对不对了。

ps:另外,如果你想画一个手势的时候能够屏显提示信息的话,那么也可以用这个。
acDisplayText("关闭", "Arial", 32, 0, 0, 0, 1000, 0, 0)
把这句话加在脚本代码的第一行就可以了

8.脚本代码注释方法

修改代码的过程中不可避免的要使用代码注释功能,下面简单来提提这个。如果是单行注释的话,这样写就可以了。--acSendKeys(“a”)如果是多行注释的话,这样写就可以了。--[[acSendKeys(“a”)acSendKeys(“b”)acSendKeys(“c”)]]--

9.窗口置顶
S+中提供了3个与窗口置顶的相关函数,分别是:

acSetTopmost(hwndTarget,x, y) 设置窗口在最前acClearTopmost(hwndTarget, x, y)
不设置窗口在最前acToggleTopmost(hwndTarget, x, y)
切换窗口是否在最前

推荐使用acToggleTopmost(nil,gsx, gsy)进行窗口状态切换即可。

10.InputBox

StrokePlus中提供了acInputBox来显示一个输入框获得我们输入的值。用法如下:
acInputBox(title, message, default, delim)
title  输入框标题
message 输入框显示的信息
default 输入框中的默认值
delim 分隔符,用来分隔default中的值,如果这里填写了值的话那么这个输入框将会变成下拉框的形式。

acInputBox("姓名","请输入您的姓名","Jack ","")显示如下


acInputBox("姓名","请输入您的姓名","Jack&Tom&Lucy&Lily","&")显示如下

我们可以通过local i= acInputBox("姓名","请输入您的姓名","Jack ","")来获取输入框中的值
下面举一个应用范例:比如说我们有时候复制了一段话或者其他什么东西,需要重复黏贴N次。那么这时候就可以用到acInputBox来帮助我们快速完成任务了。代码如下:

  1. local number=acInputBox("Paste", "Please Enter The Number", "6", "")
  2. acSendKeys("{RIGHT}")

  3. for i=1,number do
  4.         acSendKeys("{DELAY=50}{ENTER}^v")
  5. end
复制代码



问题和应用:
问题1:不知道各位使用StrokesPlus的朋友有没有遇到过这种情况,这边在用视频播放器(设置了播放时在最前)看视频那边在用浏览器浏览网页,然后往浏览器上画了一个漂漂亮亮的关闭标签的手势,结果网页那边没生效,但是在视频播放器上生效了,蛋疼吗?
原因:strokeit不会有这种问题,因为strokeit默认就会去激活手势所画在的程序,而S+的作者则是设计成了默认不激活,就导致了这个问题。
解决方法:
function sp_before_action(gnm, gsx, gsy, gex, gey, gwd, gapp, gact)

        acActivateWindow(aGetAncestor(acGetWindowByPoint(gsx, gsy), GA_ROOT), 0, 0)

end



aliencore = alien.core

user32 = aliencore.load("user32.dll")





-- ************ GetAncestor ************



gGetAncestor = user32.GetAncestor

gGetAncestor:types{ ret = 'long', abi = 'stdcall', 'long', 'uint'}

GA_PARENT = 1

GA_ROOT = 2

GA_ROOTOWNER = 3



function aGetAncestor(iWnd, iFlags)

        return gGetAncestor(iWnd, iFlags)

end
将代码添加到Global Lua下面就可以解决这个问题

问题2:刚安装完S+后无法运行怎么办?
重启即可解决(安装版会有这个问题,绿色版暂时没有遇到)

问题3:在桌面画个C,桌面图标消失了,右键菜单也无法使用了?
相信很多用Strokeit的用户都是在桌面画个C,然后关机的。在S+中出现这个问题,主要是因为全局手势设置中画个C执行的是Close Program,而它的代码是acCloseApplication(nil, gsx,gsy),并不是我们常见的alt+F4。
临时解决方案:用任务管理器结束掉explorer.exe进程,然后重建即可。
完美解决方案:将相应的手势代码换成acSendKeys("%{F_4}")即可。

问题3:Windows8的Metro下是否可以使用:
手势轨迹无法显示,但是功能正常!

问题4:将关闭手势配置为alt+F4,不能关闭某个应用程序怎么办?
cmd就存在这个问题,这种情况只要为cmd单独建立一个APP配置,然后设置关闭手势,手势为:acCloseApplication(nil,gsx,gsy)即可。
问题5:如何快速禁用StrokesPlus
用键盘快捷键Ctrl+shift+Windows+Z

问题5:如何让同一文件夹下的EXE文件都公用一套手势方案?
新建一个APP,只在File Path Pattern中填入.*StrokesPlus.*即可,其他保持空。
那么这样StrokesPlus中的文件都可以使用这套方案了。
不过这样有一个问题,不同路径下的StrokesPlus的文件夹都会应用这套手势,比如说c:\StrokesPlus和d:\StrokesPlus。
如果只让d:\StrokesPlus使用这套方案呢?
\\Device\\HarddiskVolume3\\TweakCube3\\.*
File Path Pattern中这样写就可以了。其中HarddiskVolume3就是磁盘的卷标。
在每个人的系统中,卷标并不同,如何获得这个卷标呢?
运行cmd,执行diskpart,然后输入list volume,就可以看到各个分区的卷标。只要把HarddiskVolume3中的数字3你自己想要分区的标号就可以了。

问题6:为何语言文件不起作用?
这种情况只出现在安装版身上,自StrokesPlus的某个版本开始,安装版的配置文件一律保存在%appdata%\StrokesPlus路径下,当此路径下相应的文件不存在的时候,才回去安装目录下读取。反映语言文件没用的朋友,都是把语言文件直接放在了安装目录下,从程序逻辑上来说,这应该算是一个bug。


应用1:解决QQ2013的手势配置
有没有发现QQ的主界面用最小化手势后是有点小问题的(好友的聊天窗口是好的)。

任务栏会一直有个打开的状态在。怎么解决呢?
别忘记了,QQ还有个隐藏和打开的快捷键ctrl+alt+a这个快捷键在。
添加下就行了,不过,如果我想将这个手势设置成跟windows最小化的手势是一样的怎么办?如果直接设置的话,QQ主界面正常隐藏是没有问题了,任务栏不会有多余的东西了,可是聊天窗口的最小化就失效了。那么来了,这时候将Find window拖到QQ主界面上,好了,不用改了,直接确定,那么这个时候你设置的这个手势就只对QQ的主界面有效了,而QQ的聊天窗口已经不属于这个APP了,恭喜你,成功实现了QQ的最小化。



应用2:实现彻底删除文件
只要彻底按下shift+delete,再执行回车键就可以了。
具体代码如下:
acSendShiftDown()
acSendKeys("{DEL}")
acSendShiftUp()
acSendKeys("{DELAY=300}{ENTER}")
这个是调试了很久调出来的,主要是一开始使用的+{DELETE}这种方式,有时候shift老是没有按下,只能删除到回收站,另外关于回车键的延时,建议用300,用50ms的时候经常没有按下回车。


应用3:让多个浏览器共用一套方案
可能你的电脑里有很多个浏览器,每个浏览器最常用的操作都是差不多的,那是不是就要为每套浏览器都写一套方案呢?
不是的,S+已经提供了解决方法。
在APP设置里,

我们注意看到有File Name Pattern,即文件名匹配模式,我们如果想让火狐和Chrome公用一套方案的话,只要在这里填入chrome.exe|firefox.exe即可。
注意一点的是一定要与进程的大小写完全匹配,否则识别不了。
其他类似的,只要用a.exe|b.exe|c.exe写进这里,那么abc都可以用一套方案了。Tips:
扩展下,东西是死的,人是活的。
下面扩展下,两个的浏览器不能保证所有的手势都是相同的,那么怎么办呢?如何公用呢?
思路如下:
一套公用APP,2个私有APP就可以解决了。
建立一个Common Broswer的APP,将通用的手势写在这里。
分别建立Chrome和Firefox两个APP,单独设置不同的手势就可以了。


应用4:为打开某个网站指定手势
以卡饭为例
acShellExecute("", "http://www.kafan.cn", "", "", "")

应用5:用手势打造最快的Chrome这里我们需要借助一个Chrome扩展Shortcut Manager,大家去商店里搜索下就可以了。
这个扩展能够支持为脚本和一些特定的内置动作指定快捷键。
安装后打开扩展Shortcut Manager选项,选择Add a new shortcut即可新建一个配置,右侧的Shortcut key里面指定我们需要的快捷键,URL patterns自己看需求,没特别要求的就保持原样,然后在Action指定脚本或者动作。其中Browser action中就有关闭左侧标签,关闭右侧标签,关闭其他标签这3个是我使用的。弄好了保存下就行了。
page.rar (7.7 KB, 下载次数: 226)
这里提供了上一页和下一页的脚本,放到Execute Javascript里面里面就可以了。
现在,是不是你的Chrome快多了呢?



应用6:用手势来实现关机
不用那么麻烦了。
acRunProgram("c:\\windows\\system32\\shutdown.exe","-s -t 0",0, 1)  (感谢47楼兄弟提供)
其他重启或者注销自己看下shutdown的用法改一下参数就行了这里说明下,上面的只适用于win8以下系统,因为win8启用了全新的混合关机,如果用上面方法的话就会拖慢系统启动速度,因为使用了传统的关机模式。
要使用混合关机的话,请使用
acRunProgram("c:\\windows\\system32\\shutdown.exe","-s -hybrid -t 0",0, 1),推荐win8用户使用这种方式!



应用7:最快的页面内搜索
上面在剪贴板操作那里我给大家介绍过了一个全局搜索的手势,现在来讲讲最快的页面内手势操作吧,废话不多说,直接看脚本代码吧:
acSendKeys("^c")  --先复制要搜索的内容,当然你也可以预先复制,只要不选中内容即可
acDelay(50)          --延时50ms
acSendKeys("^f")   --查找的快捷键
acSendKeys("^v")   --此时输入焦点在搜索框中,我们粘贴即可
acSendKeys("{DELAY=50}%{ENTER}") --回车执行搜索操作
这个不仅仅可以用在浏览器中,在word等等文档中也是非常高频率的使用的。

应用8:加强版的前进后退
相应前进和后退手势是大部分人最常用的了,不过有时候前进和后退并不是一直可用的。比如说你直接打开了E:\test1\test2\test3之后你想要回到E:\test1\test2的话,那么显然是实现不了,只能按一下键盘上的Backspace才可以做到。那么如何用手势来实现这个操作呢?请看脚本代码:
function aGetURL()
        acSendKeys("^l")      --选中地址栏
        acSendKeys("^c")      --复制地址栏的内容  
        return acGetClipboardText()   --返回剪贴板的值
end

local x=aGetURL()           --获取第一次地址栏的值
acSendKeys("{BROWSERBACK}")   --执行返回操作
local y=aGetURL()           --获取第二次地址栏的值

if x==y then                  --这里就是关键,通过比较前后两次的值,如果相同的话,就说明后退是不可用的,那么就需要执行下backspace按键操作
acMouseClick(gex, gey, 2, 1, 1) --this sample clicks the right mouse button at 100,100; sending down and up button events  --这一步主要是解决焦点问题,因为复制之后焦点在地址栏那里
acSendKeys("{BS}")        --退格操作。
end

前进的脚本思路类似,只要把退格换成回车就可以了。
不过这样的操作对于浏览器是没有意义的,而且这样的操作效率也不高。我们可以限定只在资源管理器中使用。代码如下
local i=acGetExecutableName(nil, gsx, gsy)  --获取操作的进程名
if i~="explorer.exe" then                          --如果不是资源管理器
        acSendKeys("{BROWSERBACK}")
else                                                     --如果是资源管理器

function aGetURL()
        acSendKeys("^l")
        acSendKeys("^c")
        return acGetClipboardText()
end

local x=aGetURL()
acSendKeys("{BROWSERBACK}")
local y=aGetURL()

if x==y then
acMouseClick(gex, gey, 2, 1, 1) --this sample clicks the right mouse button at 100,100; sending down and up button events
acSendKeys("{BS}")
end
end
ps:此外,还可以通过判断窗口标题acGetWindowTitle的变化来实现,不过这样有个缺点,有时候会碰到d:\test\test\test这样的路径,手势就失效了,不过这样的方法从效率上来说比上面的判断地址栏要好。

应用9 打造鼠标右键的超级拖拽
不多说了,以Chrome为例,已经测试通过了。

acSetClipboardText("") --首先要清空原有剪贴板的内容
acSendKeys("^c")    --如果是要进行搜索,就会先选中文字,那么这步就是要获得选中的文字
local url=acGetClipboardText() --从剪贴板获取值
acMouseClick(gsx, gsy, 0, 1, 1) --右击
if url~="" then                       --如果剪贴板中有值,即是要进行搜索
acSendKeys("{DELAY=50}s")   --请看右键菜单,你会明白,这个是要干嘛
else                                     --如果没有值,即是要打开一个链接
acSendKeys("{DELAY=50}t")
end
acMouseMove(gex,gey)           --做一个鼠标移动,让手势平滑


再来看个增强版,可以实现,在不选中文字并且没有在网页链接上执行手势的时候进行自动翻页。



acSetClipboardText("") --首先要清空原有剪贴板的内容
acSendKeys("^c")    --如果是要进行搜索,就会先选中文字,那么这步就是要获得选中的文字
local url=acGetClipboardText() --从剪贴板获取值
acMouseClick(gsx, gsy, 0, 1, 1) --右击
if url~="" then                       --如果剪贴板中有值,即是要进行搜索
acSendKeys("{DELAY=50}s")   --请看右键菜单,你会明白,这个是要干嘛
else
acDelay(50)   
acSendAltDown()                                 --先关闭右键菜单
acSendAltUp()
local prevTitle=acGetWindowTitle(nil, gsx, gsy)   --获取当前浏览器标题

acSendControlDown()                                    --按下ctrl键,来实现后台打开网页acSendShiftDown()
acMouseClick(gsx, gsy, 2, 1, 1) --模拟左键单击
acSendShiftUp()
acSendControlUp()
local lastTitle=acGetWindowTitle(nil, gsx, gsy)   --获取第二次的浏览器标题
if prevTitle==lastTitle then                             --如果两次结果相同,即没有在链接上执行手势
        acSendKeys("{PGDN}")                            --翻页操作
end
end
acMouseMove(gex,gey)           --做一个鼠标移动,让手势平滑


以上都是基于Chrome的,下面再来个通用版的,感谢defpt提供acMouseMove(gsx,gsy)
acSetClipboardText("")  
acSendKeys("^c")           
acDelay(50)                           
if acGetClipboardText()~="" then   
   acSendKeys("^e")
   acSendKeys("^v")
   acSendKeys("%{ENTER}")              
   elseif acGetMouseCursorType() == "HAND" then   --判定链接
   acMouseClick(gsx, gsy, 1, 1, 1)                           --点击中键,后台新标签打开链接
else acSendKeys("{PGDN}") end                               --向下滚屏
acMouseMove(gex,gey)


应用10 open with other Browser


感谢defpt提供
Open with IE:

if acGetExecutableName(nil,gsx,gsy)~="iexplore.exe"
then
acSendKeys("^l") --聚焦地址栏
acSendKeys("^c") --复制地址
local url=acGetClipboardText()
url=string.gsub(url,"https?://","")  --地址匹配,IE不需要 "http://" or "https://"
acRunProgram("C:\\Program Files\\Internet Explorer\\iexplore.exe",url,0, 1)
end

//Open with Firefox

if acGetExecutableName(nil,gsx,gsy)~="firefox.exe"
then
acSendKeys("^l")
acSendKeys("^c")  
local url=acGetClipboardText()
--url=string.gsub(url,"https?://",""), Firefox does not need this.
acRunProgram("D:\\Program Files\\Mozilla Firefox\\firefox.exe",url,0, 1) --注意自己的Firefox路径
end









    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多