找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3514|回复: 0

[教程源码] [转载][361度]多线程多开单停

[复制链接]
  • 打卡等级:寻得绝学

1082

主题

2112

回帖

4296

积分

院长

鲜花
7
猫粮
6386
QQ
发表于 2018-10-11 19:04:40 | 显示全部楼层 |阅读模式

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

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

×

这里以控制记事本为例,搜索所有记事本窗口,对每个窗口创建一个线程序,修改其窗口标题为窗口句柄和当前时间。当一个记事本为当前窗口时,可以通过“Ctrl+1”组合键暂停,可以通过“Ctrl+2”组合键恢复,实现窗口的单独控制。


[按键精灵] 纯文本查看 复制代码
//根据记事本类名“Notepad”查找第一个窗口句柄
hwnd = Plugin.WndEx7_20.FindWindow("Notepad", 0)
n = 0
max = 64
//创建保存窗口句柄和脚本工作线程ID的二维数组
ReDim HwndArray(1, max)
Do While hwnd <> 0
    //创建脚本的工作线程
    tid = BeginThread(MyThread)
    //将窗口句柄发送给指定线程
    Call Plugin.WndEx7_20.PostThreadData(tid, hwnd, 0)
    //将窗口句柄和脚本工作线程ID保存到数组中
    HwndArray(0, n) = hwnd
    HwndArray(1, n) = tid
    n = n + 1
    If n > max Then 
        max = max + 64
        //数组大小不够用时扩大数组
        ReDim Preserve HwndArray(1, max)
    End If
    //根据记事本类名“Notepad”查找下一个窗口句柄
    hwnd = Plugin.WndEx7_20.FindWindowEx(0,hwnd,"Notepad",0)
Loop
//没找到符合条件的窗口时停止脚本
If n = 0 Then 
    EndScript
End If
//创建对指定窗口的按键的检测,用于当前窗口对应脚本的暂停、恢复、和停止
//“Ctrl+1”用于暂停,“Ctrl+2”用于继续
KeyWndData = Plugin.WndEx7_20.CreateKeyWindowTrack("Ctrl+1|Ctrl+2", 1 Or 32)
Do
    //获得按键检测的数据,根据CreateKeyWindowTrack参数,这里返回的是按键序号
    //0对应的是“Ctrl+1”,1对应的是“Ctrl+2”
    If Plugin.WndEx7_20.GetKeyWindow(KeyWndData, KeyNum, hwnd) > 0 Then 
        tid = 0
        For i = 0 To n-1
            If HwndArray(0, i) = hwnd Then 
                tid = HwndArray(1, i)
                Exit For
            End If
        Next
        If tid<>0 Then
            //“Ctrl+1”被按下时,GetKeyWindow获得的按键序号是0
            //“Ctrl+2”被按下时,GetKeyWindow获得的按键序号是1
            Select Case KeyNum
            Case 0
                Call PauseThread(tid)
            Case 1
                Call ContinueThread(tid)
            End Select
        End If
    End If
    Delay 100
Loop
Sub MyThread()
    Do
        //接收PostThreadData发送的窗口句柄
        If Plugin.WndEx7_20.RecvThreadData(hwnd)=0 Then
            Exit Do
        End If
    Loop
    Do
        //执行对目标窗口的操作
        //MsgBox Hex(hwnd),4096,"子线程"
        Call Plugin.WndEx7_20.SetWindowText(hwnd,"窗口句柄:" & Hex(hwnd) & ", 时间:" & CStr(Now()))
        Delay 100
    Loop
End Sub
Sub OnScriptExit()
    //删除对按键的监测,释放资源
    Call Plugin.WndEx7_20.DeleteKeyWindowTrack(KeyWndData)
End Sub


脚本中使用的361度窗口插件下载:
http://pan.baidu.com/s/1ntQswaP

本文转载于361度插件作者博客
http://bg361.blog.163.com/
楼主热帖
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-10 21:53

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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