多语言展示
当前在线:548今日阅读:103今日分享:49

脚本开发教程:按键多线程脚本启动指定窗口

上一期内容中,我们说到了,多线程多开脚本的实现方法。在例子中,我们点击QUI上的一键启动按钮,开启多个窗口,每个窗口对应一个线程。那有同学问了,不想一键启动怎么办? 想要点击一个窗口按下启动热键就启动一个窗口,要如何实现呢? 我们一起来看看要怎么实现~
工具/原料

按键精灵2014

方法/步骤
1

我们用记事本来做例子。实现功能: 1、点击记事本窗口按下f7之后,启动窗口大小渐变线程。每格半秒递增窗口的大小。 2、点击记事本窗口按下f8之后, 关闭窗口所对应的线程。

2

按F7启动线程1、使用 waitkey (等待按任意键 命令),判断是否按下F7。 F7的按键码=118代码如下:                   Key = WaitKey()If key = 118 Then //执行后续代码End If

3

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 IfEnd ifLoop

4

3、启动线程,将窗口句柄和线程id记录到ini文件中。   启动线程之后,为了提示线程是否启动,修改记事本的窗口标题为'线程启动成功'    另外:气泡提示、屏幕输出等方式都能起到提示的作用。    修改了标题之后,将窗口句柄和线程id记录到ini文件中。    为什么要用ini文件记录呢?环境变量不是更方便吗?     一般情况下,环境变量确实方便多了,但是当多个脚本整合到同一个小精灵的时候,环境变量相同就会产生干扰。而且,脚本退出之后环境变量会清空,如果我们二次开启脚本还需要使用到上一次的窗口句柄,环境变量是不能实现的。

5

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资源。)

6

代码如下:线程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 xcEnd IfCall Plugin.File.WriteINI('线程ID', hwnd, 线程ID, 'C:\记录.ini')//记录线程id

7

按下F8结束线程判断按下的键是否是F8,如果是,则获取鼠标指向窗口的窗口句柄。判断ini文件中线程id的记录,是否有该窗口句柄对应的线程id,有的话,则停止此线程,没有则提示该窗口没有启动过线程。

8

代码如下:Do    If key = 119 Then         /////////////获取窗口句柄,看下ini文件中,是否有该窗口句柄的线程id的记录,有的话则停止,没有的话则提示该窗口没有启动过线程////////////        hwnd = Plugin.Window.MousePoint()                          关闭线程id = Plugin.File.readINI('线程ID', hwnd, 'C:\记录.ini')        If 关闭线程id = '' Then             MessageBox '当前窗口没启动过线程。'            Exit Do        Else             StopThread 关闭线程id //关闭线程            call  Plugin.Window.SetText(hwnd,'停止!')                 End If    End IfLoop rning�000�ߊ��:p>                End IfEnd ifLoop

9

被线程启动的子程序子程序命名为:大小。功能:用于改变记事本的窗口大小。         从宽100,高100,每隔半秒钟递增一次。直到窗口大小为宽1000,高1000 代码如下:////////////////窗口大小渐变////////////////////////Sub 大小()     窗口句柄 = hwnd    For i = 0 To 90        Call Plugin.Window.Size(窗口句柄, 100+i*10, 100+i*10)        Delay 500    Next        End Sub

10

整体代码:Dimenv hwndhwnd = 0For 3    RunApp 'Notepad'NextBeginThread 启动Sub 启动()    Do        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                                     线程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            End If            //////////////按下f8停止线程按钮///////////////////            If key = 119 Then                 /////////////获取窗口句柄,看下ini文件中,是否有该窗口句柄的线程id的记录,有的话则停止,没有的话则提示该窗口没有启动过线程////////////                hwnd = Plugin.Window.MousePoint()                                  关闭线程id = Plugin.File.readINI('线程ID', hwnd, 'C:\记录.ini')                If 关闭线程id = '' Then                     MessageBox '当前窗口没启动过线程。'                    Exit Do                Else                     StopThread 关闭线程id //关闭线程                    call  Plugin.Window.SetText(hwnd,'停止!')                         End If            End If        Loop    LoopEnd Sub////////////////窗口大小渐变////////////////////////Sub 大小()     窗口句柄 = hwnd    For i = 0 To 90        Call Plugin.Window.Size(窗口句柄, 100+i*10, 100+i*10)        Delay 500    Next        End Sub

推荐信息