找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4485|回复: 1

[教程源码] [转载][361度]可重复运行多开单停

[复制链接]
  • 打卡等级:行侠仗义

1080

主题

2100

回帖

4280

积分

院长

鲜花
6
猫粮
7390
QQ
发表于 2018-10-11 19:01:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

按键精灵通过脚本属性的可重复运行可以让一个脚本未停止时重复启动,这样可以实现脚本多开。



                               
登录/注册后可看大图

将脚本属性的禁止可重复运行取消实现的多开,避免了使用多线程,降低了初学者的多开难度。但是这种方法支持单独启动脚本,不支持单独暂停、恢复和停止脚本,下面的脚本通过检测键盘动作让用可重复运行实现多开的脚本也能单独暂停、恢复和停止:


[按键精灵] 纯文本查看 复制代码
//获得当前窗口的窗口句柄
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/
楼主热帖

1

主题

4

回帖

6

积分

学前班

鲜花
0
猫粮
321
发表于 2018-10-25 22:33:52 | 显示全部楼层
厉害,学习了!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|紫猫编程学园

GMT+8, 2024-3-28 18:53

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表