马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
按键精灵通过脚本属性的可重复运行可以让一个脚本未停止时重复启动,这样可以实现脚本多开。
将脚本属性的禁止可重复运行取消实现的多开,避免了使用多线程,降低了初学者的多开难度。但是这种方法支持单独启动脚本,不支持单独暂停、恢复和停止脚本,下面的脚本通过检测键盘动作让用可重复运行实现多开的脚本也能单独暂停、恢复和停止:
[按键精灵] 纯文本查看 复制代码 //获得当前窗口的窗口句柄
hwnd = Plugin.WndEx7_20.GetForegroundWindow()
If hwnd = 0 Then
EndScript
End If
//创建对指定窗口的按键的检测,用于当前窗口对应脚本的暂停、恢复、和停止,“Ctrl+1”用于暂停,“Ctrl+2”用于继续,“Ctrl+3”用于停止
KeyData = Plugin.WndEx7_20.CreateKeyTrack(hwnd, "Ctrl+1|Ctrl+2|Ctrl+3", 1 Or 32)
//IsPause用于保存暂停状态,True是暂停,False是继续
IsPause=False
Do
Do
//获得按键检测的数据,根据CreateKeyTrack参数,这里返回的是按键序号,0对应的是“Ctrl+1”,1对应的是“Ctrl+2”,2对应的是“Ctrl+3”
If Plugin.WndEx7_20.GetKey(KeyData, KeyNum) > 0 Then
//“Ctrl+1”被按下时,GetKey获得的按键序号是0,IsPase被设置为True,告诉后面的流程,现在是暂停状态
//“Ctrl+2”被按下时,GetKey获得的按键序号是1,IsPase被设置为False,告诉后面的流程,现在是停止状态
//“Ctrl+3”被按下时,GetKey获得的按键序号是2,执行EndScript停止脚本
Select Case KeyNum
Case 0
IsPause = True
Case 1
IsPause = False
Case 2
EndScript
End Select
End If
//IsPause为True时延时并执行循环,作为暂停
If IsPause Then
Delay 100
End If
Loop While IsPause
//执行脚本动作,自定义脚本
Delay 100
Loop
Sub OnScriptExit()
//删除对按键的监测,释放资源
Call Plugin.WndEx7_20.DeleteKeyTrack(KeyData)
End Sub
上面的是基本模板,下面给出对记事本窗口标题进行修改的完整例子:
[按键精灵] 纯文本查看 复制代码 //获得当前窗口的窗口句柄
hwnd = Plugin.WndEx7_20.GetForegroundWindow()
//获得窗口类名,判断是否是记事本窗口
If Plugin.WndEx7_20.GetWindowInfo(hwnd, 1) <> "Notepad" Then
MsgBox "当前窗口不是记事本窗口", 4096
EndScript
End If
//查找子窗口ID,通过判断有这个窗口ID的子窗口是否存在来判断脚本是否已在该窗口运行
If Plugin.WndEx7_20.FindWindowId(hwnd, 925) <> 0 Then
MsgBox "脚本已在该窗口上运行",4096
EndScript
End If
//在选中的窗口中创建文本显示区域(这是个窗口)
hwndLabel = Plugin.WndEx7_20.CreateTextRgn(hwnd, 0, 0, 0, 0)
//设置窗口ID,这样可以用FindWindowId查找这个窗口来判断脚本是否运行,窗口ID的取值范围建议是1-65534,另外选择窗口ID不能是它的兄弟窗口已使用的窗口ID,否则会有冲突。窗口ID的值可以随便设置。
Call Plugin.WndEx7_20.SetWindowId(hwndLabel, 925)
//创建对指定窗口的按键的检测,用于当前窗口对应脚本的暂停、恢复、和停止,“Ctrl+1”用于暂停,“Ctrl+2”用于继续,“Ctrl+3”用于停止
KeyData = Plugin.WndEx7_20.CreateKeyTrack(hwnd, "Ctrl+1|Ctrl+2|Ctrl+3", 1 Or 32)
//IsPause用于保存暂停状态,True是暂停,False是继续
IsPause=False
Do
Do
//获得按键检测的数据,根据CreateKeyTrack参数,这里返回的是按键序号,0对应的是“Ctrl+1”,1对应的是“Ctrl+2”,2对应的是“Ctrl+3”
If Plugin.WndEx7_20.GetKey(KeyData, KeyNum) > 0 Then
//“Ctrl+1”被按下时,GetKey获得的按键序号是0,IsPase被设置为True,告诉后面的流程,现在是暂停状态
//“Ctrl+2”被按下时,GetKey获得的按键序号是1,IsPase被设置为False,告诉后面的流程,现在是停止状态
//“Ctrl+3”被按下时,GetKey获得的按键序号是2,执行EndScript停止脚本
Select Case KeyNum
Case 0
IsPause = True
Case 1
IsPause = False
Case 2
EndScript
End Select
End If
//IsPause为True时延时并执行循环,作为暂停
If IsPause Then
Delay 100
End If
Loop While IsPause
//执行脚本动作
Call Plugin.WndEx7_20.SetWindowText(hwnd,"窗口句柄:" & Hex(hwnd) & ", 时间:" & CStr(Now()))
Delay 100
Loop
Sub OnScriptExit()
//删除对按键的监测,释放资源
Call Plugin.WndEx7_20.DeleteKeyTrack(KeyData)
//关闭文本显示区域
Call Plugin.WndEx7_20.SetWindowState(hwndLabel,0)
End Sub
脚本中使用的361度窗口插件下载:
http://pan.baidu.com/s/1ntQswaP
本文转载于361度插件作者博客
http://bg361.blog.163.com/ |