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

2025-11-01 12:27:57

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

2、按F7启动线程

1、使用 waitkey (等待按任意键 命令),判断是否按下F7。 

F7的按键码=118代码如下:                   

Key = WaitKey()

If key = 118 Then 

//执行后续代码

End If      

3、使用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

4、启动线程,将窗口句柄和线程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 xc

End If

Call 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 If

Loop

rning�000�ߊ��:p>

                End If

End if

Loop

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 hwnd

hwnd = 0

For 3

    RunApp "Notepad"

Next

BeginThread 启动

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

    Loop

End Sub

////////////////窗口大小渐变////////////////////////

Sub 大小() 

    窗口句柄 = hwnd

    For i = 0 To 90

        Call Plugin.Window.Size(窗口句柄, 100+i*10, 100+i*10)

        Delay 500

    Next        

End Sub

 

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢