TC官方合作论坛

 找回密码
 立即注册
查看: 184|回复: 2

[已解决] 大漠多线程分开绑定

[复制链接]
发表于 2019-8-31 19:27:18 | 显示全部楼层 |阅读模式

马上加入TC

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

x
想用一次全局注册 可以给不同的窗口句柄 绑定  解绑也是 萌新求实例或者源码
回复

使用道具 举报

发表于 2019-8-31 21:57:53 | 显示全部楼层
附件上传不了,自己把界面写好,然后源码与界面关联,生成文件夹内创建一个文件夹“ZYML”用于存放大漠插件3.1233版本与免注DmReg.dll源码:
变量 Q, 句柄组 = 数组(), dx = 数组(), 线程组 = 数组(), 小窗口句柄组 = 数组()
功能 多开框架_初始化()
    如果(注册dm(Q, "3.1233", "") == -1)
        消息框("插件注册失败,关掉杀软后重试!", "错误")
        退出()
    否则
        调试输出("插件注册成功")
        遍历(变量 i = 0; i < 4; i++)
            热键销毁("热键" & i)
            热键注册("热键" & i)  
        结束
    结束
结束
功能 注册dm(&对象, 版本, 注册码)
    变量 路径, 路径1, 路径2, 插件版本
    路径 = 系统获取进程路径()
    路径1 = 路径 & "ZYML\\"&"DmReg.dll"
    路径2 = 路径 & "ZYML\\"&"dm.dll"
    卸载(路径2)
    如果(动态库调用(路径1, "int", "SetDllPathW", "wchar *", 路径2, "int", 0) == 1)
        对象 = com("dm.dmsoft")
        插件版本 = 对象.Ver()
        如果(插件版本 == 版本)
            如果(注册码 != "")
                如果(对象.Reg(注册码, "0001") == 1)
                    返回 1
                否则
                    返回 -1
                结束
            否则
                返回 1
            结束
        否则
            返回 -1
        结束
    否则
        返回 -1
    结束
结束
功能 卸载(KS路径)
    如果(注册插件(KS路径, 假))
        调试输出("卸载成功")
    结束
结束
功能 热键0_热键()//全开
    变量 句柄集, 返回数组, 返回值, 绑定位置, 下标, 路径
    句柄集 = Q.EnumWindow(0, "记事本", "Notepad", 1 + 2 + 16)
    调试输出(句柄集)
    如果(句柄集 == "" || 句柄集 == null)
        消息框("未检测到已打开的目标窗口,请打开后重试!", "错误")
        返回
    结束
    字符串分割(句柄集, ",", 返回数组)
    遍历(变量 i = 0; i < 数组大小(返回数组); i++)
        返回值 = 数组值查找(句柄组, 返回数组[i], 1)
        如果(返回值 != -1)
            调试输出("当前窗口已绑定,跳过重复绑定")
            继续
        结束
        绑定位置 = 数组值查找(句柄组, "", 1)
        如果(绑定位置 == -1)
            绑定位置 = 数组值查找(句柄组, null, 1)
        结束
        如果(绑定位置 != -1)
            下标 = 绑定位置
        否则
            下标 = 数组大小(句柄组)
        结束
        返回值 = 绑定窗口(返回数组[i], 下标)
        如果(返回值 == -1)
            返回
        否则
            线程组[下标] = 线程开启("执行任务", 下标)
            调试输出("线程" & 下标 & "开启")
        结束
    结束
结束
功能 热键2_热键()//单开
    变量 句柄, 标题, 类名, 返回值, 绑定位置, 下标, 路径
    句柄 = Q.GetMousePointWindow()
    标题 = Q.GetWindowTitle(句柄)
    类名 = Q.GetWindowClass(句柄)
    如果(字符串查找(标题, "记事本") != -1 && 类名 == "Notepad")
        返回值 = 数组值查找(句柄组, 句柄, 1)
        如果(返回值 != -1)
            调试输出("当前窗口已绑定,跳过重复绑定")
            返回
        结束
        绑定位置 = 数组值查找(句柄组, "", 1)
        如果(绑定位置 == -1)
            绑定位置 = 数组值查找(句柄组, null, 1)
        结束
        如果(绑定位置 != -1)
            下标 = 绑定位置
        否则
            下标 = 数组大小(句柄组)
        结束
        返回值 = 绑定窗口(句柄, 下标)
        如果(返回值 == -1)
            返回
        否则
            线程组[下标] = 线程开启("执行任务", 下标)
            调试输出("线程" & 下标 & "开启")
        结束
    否则
        调试输出("无效句柄")
    结束
结束
功能 绑定窗口(句柄, 下标)
    变量 返回值
    dx[下标] = 插件("dm.dmsoft")
    dx[下标].SetShowErrorMsg(0)
    返回值 = dx[下标].BindWindow(句柄, "normal", "normal", "normal", 0)
    如果(返回值 == 1)
        调试输出("窗口" & (下标 + 1) & "绑定成功")
        窗口设置大小(句柄, 450, 355)
        句柄组[下标] = 句柄
        建立信息窗口(下标)
        dx[下标].EnableRealMouse(2, 20, 30)
        写入窗口信息("窗口" & (下标 + 1) & "绑定成功", 下标)
        dx[下标].SetPath(系统获取进程路径() & "ZYML\\")
        dx[下标].SetDict(0, "ZK.txt")
        dx[下标].UseDict(0)
    否则
        调试输出("窗口" & (下标 + 1) & "绑定失败")
        写入窗口信息("窗口" & (下标 + 1) & "绑定失败", 下标)
        返回 -1
    结束
结束
功能 建立信息窗口(下标)
    变量 返回值, x1, y1, x2, y2
    小窗口句柄组[下标] = dx[下标].CreateFoobarRect(窗口查找子窗口(句柄组[下标], "", "msctls_statusbar32"), 45, 3, 200, 18)
    dx[下标].FoobarLock(小窗口句柄组[下标])
    dx[下标].FoobarFillRect(小窗口句柄组[下标], 0, 0, 200, 18, "bcddfd")
    dx[下标].FoobarUpdate(小窗口句柄组[下标])
    dx[下标].FoobarSetFont(小窗口句柄组[下标], "宋体", 10, 1)
结束
功能 写入窗口信息(内容, 下标)
    如果(小窗口句柄组[下标] > 0)
        dx[下标].FoobarClearText(小窗口句柄组[下标])
        dx[下标].FoobarPrintText(小窗口句柄组[下标], 内容, "000000")
        dx[下标].FoobarUpdate(小窗口句柄组[下标])
    结束
结束
功能 执行任务()
    //这里写要窗口做的事情相关代码
结束
功能 热键1_热键()//全停
    遍历(变量 i = 0; i < 数组大小(句柄组); i++)
        如果(句柄组[i] > 0)
            线程关闭(线程组[i])
            dx[i].UnBindWindow()
            调试输出("窗口" & i & "解绑")
        结束
    结束
    数组清空(句柄组)
    数组清空(dx)
    数组清空(线程组)
    数组清空(小窗口句柄组)
结束
功能 热键3_热键()//单停
    变量 句柄, 标题, 类名, 下标
    句柄 = Q.GetMousePointWindow()
    下标 = 数组值查找(句柄组, 句柄, 1)
    如果(下标 != -1)
        线程关闭(线程组[下标])
        dx[下标].UnBindWindow()
        调试输出("窗口" & 下标 & "解绑")
        句柄组[下标] = ""
        dx[下标] = ""
        线程组[下标] = ""
        小窗口句柄组[下标] = ""
    结束
结束
功能 多开框架_销毁()//窗口销毁
    热键1_热键()
结束

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-4 23:51:55 | 显示全部楼层
zxczxc1968531 发表于 2019-8-31 21:57
附件上传不了,自己把界面写好,然后源码与界面关联,生成文件夹内创建一个文件夹“ZYML”用于存放大漠插件 ...

谢谢您了 论坛死气沉沉的 非常感谢  拿去学习了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2019-9-23 11:46 , Processed in 0.034189 second(s), 24 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

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