多线程脚本可随意启动/停止指定窗口

- 您所在的用户组无法下载或查看附件
本文由按键学院提供技术支持
上一期内容中,我们说到了,多线程多开脚本的实现方法。 在例子中,我们点击QUI上的一键启动按钮,开启多个窗口,每个窗口对应一个线程。 那有同学问了,不想一键启动怎么办? 想要点击一个窗口按下启动热键就启动一个窗口,要如何实现呢? 我们一起来看看要怎么实现~ |
|
上期院刊链接:【院刊】-【201412期】多线程多开脚本如何实现?
我们用记事本来做例子。 实现功能: 1、点击记事本窗口按下f7之后,启动窗口大小渐变线程。每格半秒递增窗口的大小。 2、点击记事本窗口按下f8之后, 关闭窗口所对应的线程。 |
按F7启动线程 1、使用 waitkey (等待按任意键 命令),判断是否按下F7。
F7的按键码=118 代码如下: - Key = WaitKey()
- If key = 118 Then
- //执行后续代码
- End If
复制代码 2、使用MousePoint (得到鼠标指向的窗口句柄 命令),获取窗口句柄 。
获取窗口句柄之后,我们还需要做一个判断,判断当前获取的窗口是不是要绑定的窗口。 如果要绑定的游戏的窗口标题是变化的,我们就判断它的类名。类名不一样的话就重新等待按下F7键,重新获取鼠标指向的窗口句柄。 记事本的类名=“Notepad” 代码如下: - Do
- Key = WaitKey()
- ///////////按下了F7启动线程按钮///////////////
- If key = 118 Then
- //////获取窗口类名,如果类名不是记事本的类名,则退出循环,重新等待按键////////////
- hwnd = Plugin.Window.MousePoint()
- sClass = Plugin.Window.GetClass(Hwnd)
- If sclass <> "Notepad" Then
- Exit Do
- End If
- End if
- Loop
复制代码 3、启动线程,将窗口句柄和线程id记录到ini文件中。
启动线程之后,为了提示线程是否启动,修改记事本的窗口标题为"线程启动成功" 另外:气泡提示、屏幕输出等方式都能起到提示的作用。 修改了标题之后,将窗口句柄和线程id记录到ini文件中。
为什么要用ini文件记录呢?环境变量不是更方便吗? 一般情况下,环境变量确实方便多了,但是当多个脚本整合到同一个小精灵的时候,环境变量相同就会产生干扰。而且,脚本退出之后环境变量会清空,如果我们二次开启脚本还需要使用到上一次的窗口句柄,环境变量是不能实现的。
- Call Plugin.File.WriteINI("窗口句柄", hwnd, hwnd, "C:\记录.ini")//记录窗口句柄
- Call Plugin.File.WriteINI("线程ID", hwnd, 线程ID, "C:\记录.ini")//记录线程id
复制代码 这里记录线程id的时候,把“线程id”小节名下的键值名称设置为窗口句柄,以便于后面结束线程时,根据当前鼠标指向窗口的句柄,找到ini记录里对应的线程id。 将线程id记录到ini文件之前,我们需要先判断下当前所获取到的窗口句柄,是否之前已经启动过线程,用当前的窗口句柄值在ini文件中找对应的线程id, 如果返回值不为空则说明该窗口之前启动过线程,关闭掉线程。(如果不关闭之前开启的线程,会造成一个窗口重复启动多个线程的情况,浪费cpu资源。)
代码如下: - 线程ID = BeginThread(大小)//启动线程
- call Plugin.Window.SetText(hwnd,"线程启动成功!") //修改标题提示绑定成功
- Call Plugin.File.WriteINI("窗口句柄", hwnd, hwnd, "C:\记录.ini") //记录窗口句柄
- xc = Plugin.File.readINI("线程ID", hwnd, "C:\记录.ini")//获取线程id,看看是不是空的,如果不是空的,说明此窗口绑定过线程,关闭线程
- If xc <> "" Then
- StopThread xc
- End If
- Call Plugin.File.WriteINI("线程ID", hwnd, 线程ID, "C:\记录.ini")//记录线程id
复制代码 |
本文由按键学院提供技术支持
━═━═━━═━═━━═━═━◥◤━═━═━━═━═━━═━═━
有钱,就是任性!按键学院的导师就是土豪!
按键学院实战班