脚本特色:*支持单控恽但炎杰和全部一次性控制的操作,不会冲突,不会重复启动。*”热键“版特色,方便用户指定窗口直接启动。*”列表“版特色,实时更新、添加、删除句柄,用户可选中句柄点击操作,母皿钟床双击句柄会自动显示句柄并绘图提醒。在本人测试的期间发现如下改动:1:“热键”控件,支持“热键”事件触发“热键”的注册。即修改了“热键”的按键码后脚本下次启动的时候即可生效,无需其他”事件“来帮助注册。以前需要“按钮”的点击、界面的“加载”、“加载完成”等事件来帮助注册。2:“列表”等以前无法储存内容的控件,(即非默认内容后期赋的值)现在可直接赋值并保存到脚本结束(在按键中反复打开和关闭界面,内容还在),无需事件赋值。原因:脚本启动后界面自动触发“加载”和”加载完成“事件,故后期的赋值可保存到脚本结束。虽然以前也完成过,但按键精灵9.6的改动使得完成以上功能更为简便,故重新优化后发布。发现BUG:在”定时器“的”定时“事件中利用按键精灵自带插件,反复查找句柄时,句柄时常为空。因此在”列表“控制线程中,本人使用了其他插件来帮助查找句柄。热键版源码:
Dimenv全部窗口启动,全部窗口暂停,全部窗口继续,全部窗口停止
Dimenv指定窗口启动,指定窗口暂停,指定窗口继续,指定窗口停止
Dimenv全局句柄,脚本开启状态
全部窗口启动=0
全部窗口暂停=0
全部窗口继续=0
全部窗口停止=0
指定窗口启动=0
指定窗口暂停=0
指定窗口继续=0
指定窗口停止=0
DimHwnd,临时线程ID
Dim句柄线程存放数组()
Dim数组维数
Dim指向窗口句柄,指向窗口进程
Do
WaitKey
临时句柄=Plugin.Window.MousePoint()
If指定窗口启动=1Or指定窗口暂停=1Or指定窗口继续=1Or指定窗口停止=1Then
If指定窗口启动=1Then
Call指定窗口启动程序(临时句柄,1)
指定窗口启动=0
ElseIf指定窗口暂停=1Then
Call指定窗口暂停程序(临时句柄,1)
指定窗口暂停=0
ElseIf指定窗口继续=1Then
Call指定窗口继续程序(临时句柄,1)
指定窗口继续=0
ElseIf指定窗口停止=1Then
Call指定窗口停止程序(临时句柄,1)
指定窗口停止=0
EndIf
ElseIf全部窗口启动=1Or全部窗口暂停=1Or全部窗口继续=1Or全部窗口停止=1Then
If全部窗口启动=1Then
Call全部窗口启动程序
全部窗口启动=0
ElseIf全部窗口暂停=1Then
Call全部窗口暂停程序
全部窗口暂停=0
ElseIf全部窗口继续=1Then
Call全部窗口继续程序
全部窗口继续=0
ElseIf全部窗口停止=1Then
Call全部窗口停止程序
全部窗口停止=0
EndIf
EndIf
Loop
Sub测试线程
DimHwnd,i
i=1
Hwnd=全局句柄
脚本开启状态=1
Do
CallPlugin.Bkgnd.SendString(Hwnd,i)
Delay50
CallPlugin.Bkgnd.KeyPress(Hwnd,13)
i=i+1
Delay500
Loop
EndSub
Sub指定窗口启动程序(Hwnd,提示类型)
IfUbound(Filter(句柄线程存放数组,Hwnd,2))=-1Then
IfIsEmpty(数组维数)=TrueThen
数组维数=0
Else
数组维数=数组维数+1
EndIf
RedimPreserve句柄线程存放数组(数组维数)
全局句柄=Hwnd
临时线程ID=BeginThread(测试线程)
句柄线程存放数组(数组维数)=Hwnd&":"&临时线程ID
Else
If提示类型=1Then
MessageBox"此窗口已启动过脚本!"
EndIf
EndIf
EndSub
Sub指定窗口暂停程序(Hwnd,提示类型)
IfUbound(Filter(句柄线程存放数组,Hwnd,2))<>-1Then
指向窗口句柄=Split(Filter(句柄线程存放数组,Hwnd,2)(0),":")(0)
指向窗口进程=Split(Filter(句柄线程存放数组,Hwnd,2)(0),":")(1)
PauseThread指向窗口进程
Else
If提示类型=1Then
MessageBox"此窗口未启动任何脚本!"
EndIf
EndIf
EndSub
Sub指定窗口继续程序(Hwnd,提示类型)
IfUbound(Filter(句柄线程存放数组,Hwnd,2))<>-1Then
指向窗口句柄=Split(Filter(句柄线程存放数组,Hwnd,2)(0),":")(0)
指向窗口进程=Split(Filter(句柄线程存放数组,Hwnd,2)(0),":")(1)
ContinueThread指向窗口进程
Else
If提示类型=1Then
MessageBox"此窗口未启动任何脚本!"
EndIf
EndIf
EndSub
Sub指定窗口停止程序(Hwnd,提示类型)
Dimi,k
IfUbound(Filter(句柄线程存放数组,Hwnd,2))<>-1Then
指向窗口句柄=Split(Filter(句柄线程存放数组,Hwnd,2)(0),":")(0)
指向窗口进程=Split(Filter(句柄线程存放数组,Hwnd,2)(0),":")(1)
StopThread指向窗口进程
Fori=0ToUBound(句柄线程存放数组)
IfInStr(句柄线程存放数组(i),Hwnd)>0Then
ExitFor
EndIf
Next
Fork=iToUBound(句柄线程存放数组)-1
句柄线程存放数组(k)=句柄线程存放数组(k+1)
Next
数组维数=数组维数-1
RedimPreserve句柄线程存放数组(数组维数)
Else
If提示类型=1Then
MessageBox"此窗口未启动任何脚本!"
EndIf
EndIf
EndSub
Sub全部窗口启动程序
DimAllHwnds,i
AllHwnds=Plugin.Window.SearchEx("","记事本",0)
Fori=0ToUBound(Split(AllHwnds,"|"))-1
TracePrintSplit(AllHwnds,"|")(i)
临时句柄=Plugin.Window.FindEx(Split(AllHwnds,"|")(i),0,"Edit","")
脚本开启状态=0
Call指定窗口启动程序(临时句柄,2)
Do
Delay50
LoopUntil脚本开启状态=1
Next
EndSub
Sub全部窗口暂停程序
DimAllHwnds,i
AllHwnds=Plugin.Window.SearchEx("","记事本",0)
Fori=0ToUBound(Split(AllHwnds,"|"))-1
临时句柄=Plugin.Window.FindEx(Split(AllHwnds,"|")(i),0,"Edit","")
Call指定窗口暂停程序(临时句柄,2)
Next
EndSub
Sub全部窗口继续程序
DimAllHwnds,i
AllHwnds=Plugin.Window.SearchEx("","记事本",0)
Fori=0ToUBound(Split(AllHwnds,"|"))-1
临时句柄=Plugin.Window.FindEx(Split(AllHwnds,"|")(i),0,"Edit","")
Call指定窗口继续程序(临时句柄,2)
Next
EndSub
Sub全部窗口停止程序
DimAllHwnds,i
AllHwnds=Plugin.Window.SearchEx("","记事本",0)
Fori=0ToUBound(Split(AllHwnds,"|"))-1
临时句柄=Plugin.Window.FindEx(Split(AllHwnds,"|")(i),0,"Edit","")
Call指定窗口停止程序(临时句柄,2)
Next
EndSub
EventForm1.指定窗口启动键.Change
Form1.指定窗口启动键.RegisterTrue
EndEvent
EventForm1.指定窗口暂停键.Change
Form1.指定窗口暂停键.RegisterTrue
EndEvent
EventForm1.指定窗口继续键.Change
Form1.指定窗口继续键.RegisterTrue
EndEvent
EventForm1.指定窗口停止键.Change
Form1.指定窗口停止键.RegisterTrue
EndEvent
EventForm1.指定窗口启动键.Hotkey
指定窗口启动=1
指定窗口暂停=0
指定窗口继续=0
指定窗口停止=0
EndEvent
EventForm1.指定窗口暂停键.Hotkey
指定窗口启动=0
指定窗口暂停=1
指定窗口继续=0
指定窗口停止=0
EndEvent
EventForm1.指定窗口继续键.Hotkey
指定窗口启动=0
指定窗口暂停=0
指定窗口继续=1
指定窗口停止=0
EndEvent
EventForm1.指定窗口停止键.Hotkey
指定窗口启动=0
指定窗口暂停=0
指定窗口继续=0
指定窗口停止=1
EndEvent
EventForm1.全部窗口启动.Click
全部窗口启动=1
全部窗口暂停=0
全部窗口继续=0
全部窗口停止=0
KeyPress"Ctrl",1
EndEvent
EventForm1.全部窗口暂停.Click
全部窗口启动=0
全部窗口暂停=1
全部窗口继续=0
全部窗口停止=0
KeyPress"Ctrl",1
EndEvent
EventForm1.全部窗口继续.Click
全部窗口启动=0
全部窗口暂停=0
全部窗口继续=1
全部窗口停止=0
KeyPress"Ctrl",1
EndEvent
EventForm1.全部窗口停止.Click
全部窗口启动=0
全部窗口暂停=0
全部窗口继续=0
全部窗口停止=1
KeyPress"Ctrl",1
EndEvent
EventForm1.LoadOver
Form1.指定窗口启动键.RegisterTrue
Form1.指定窗口暂停键.RegisterTrue
Form1.指定窗口继续键.RegisterTrue
Form1.指定窗口停止键.RegisterTrue
EndEvent
EventForm1.打开记事本.Click
RunApp"NotePad.exe"
EndEvent
列表版源码:
DimAllHwnds父,AllHwnds子,临时句柄,i
AllHwnds父=Plugin.WndEx6.EnumWindowA(0,0,"Notepad",0)
IfUBound(AllHwnds父)<>-1Then
AllHwnds子=""
Fori=0ToUBound(AllHwnds父)
临时句柄=Plugin.WndEx6.EnumWindowA(AllHwnds父(i),0,"Edit",0)(0)
IfAllHwnds子=""Then
AllHwnds子=临时句柄
Else
AllHwnds子=AllHwnds子&"|"&临时句柄
EndIf
Next
Form1.句柄列表.List=AllHwnds子
EndIf
Form1.读取信息定时器.Enabled=1
Dimenv全部窗口启动,全部窗口暂停,全部窗口继续,全部窗口停止
Dimenv选中窗口启动,选中窗口暂停,选中窗口继续,选中窗口停止
Dimenv全局句柄,脚本开启状态
全部窗口启动=0
全部窗口暂停=0
全部窗口继续=0
全部窗口停止=0
选中窗口启动=0
选中窗口暂停=0
选中窗口继续=0
选中窗口停止=0
DimHwnd,临时线程ID
Dim句柄线程存放数组()
Dim数组维数
Dim选中窗口句柄,选中窗口进程
Do
WaitKey
If选中窗口启动=1Or选中窗口暂停=1Or选中窗口继续=1Or选中窗口停止=1Then
临时句柄=Clng(Split(Form1.句柄列表.List,"|")(Form1.句柄列表.ListIndex))
If选中窗口启动=1Then
Call选中窗口启动程序(临时句柄,1)
选中窗口启动=0
ElseIf选中窗口暂停=1Then
Call选中窗口暂停程序(临时句柄,1)
选中窗口暂停=0
ElseIf选中窗口继续=1Then
Call选中窗口继续程序(临时句柄,1)
选中窗口继续=0
ElseIf选中窗口停止=1Then
Call选中窗口停止程序(临时句柄,1)
选中窗口停止=0
EndIf
ElseIf全部窗口启动=1Or全部窗口暂停=1Or全部窗口继续=1Or全部窗口停止=1Then
If全部窗口启动=1Then
Call全部窗口启动程序
全部窗口启动=0
ElseIf全部窗口暂停=1Then
Call全部窗口暂停程序
全部窗口暂停=0
ElseIf全部窗口继续=1Then
Call全部窗口继续程序
全部窗口继续=0
ElseIf全部窗口停止=1Then
Call全部窗口停止程序
全部窗口停止=0
EndIf
EndIf
Loop
Sub测试线程
DimHwnd,i
i=1
Hwnd=全局句柄
脚本开启状态=1
Do
CallPlugin.Bkgnd.SendString(Hwnd,i)
Delay50
CallPlugin.Bkgnd.KeyPress(Hwnd,13)
i=i+1
Delay500
Loop
EndSub
Sub选中窗口启动程序(Hwnd,提示类型)
IfUbound(Filter(句柄线程存放数组,Hwnd,2))=-1Then
IfIsEmpty(数组维数)=TrueThen
数组维数=0
Else
数组维数=数组维数+1
EndIf
RedimPreserve句柄线程存放数组(数组维数)
全局句柄=Hwnd
临时线程ID=BeginThread(测试线程)
句柄线程存放数组(数组维数)=Hwnd&":"&临时线程ID
Else
If提示类型=1Then
MessageBox"此窗口已启动过脚本!"
EndIf
EndIf
EndSub
Sub选中窗口暂停程序(Hwnd,提示类型)
IfUbound(Filter(句柄线程存放数组,Hwnd,2))<>-1Then
选中窗口句柄=Split(Filter(句柄线程存放数组,Hwnd,2)(0),":")(0)
选中窗口进程=Split(Filter(句柄线程存放数组,Hwnd,2)(0),":")(1)
PauseThread选中窗口进程
Else
If提示类型=1Then
MessageBox"此窗口未启动任何脚本!"
EndIf
EndIf
EndSub
Sub选中窗口继续程序(Hwnd,提示类型)
IfUbound(Filter(句柄线程存放数组,Hwnd,2))<>-1Then
选中窗口句柄=Split(Filter(句柄线程存放数组,Hwnd,2)(0),":")(0)
选中窗口进程=Split(Filter(句柄线程存放数组,Hwnd,2)(0),":")(1)
ContinueThread选中窗口进程
Else
If提示类型=1Then
MessageBox"此窗口未启动任何脚本!"
EndIf
EndIf
EndSub
Sub选中窗口停止程序(Hwnd,提示类型)
Dimi,k
IfUbound(Filter(句柄线程存放数组,Hwnd,2))<>-1Then
选中窗口句柄=Split(Filter(句柄线程存放数组,Hwnd,2)(0),":")(0)
选中窗口进程=Split(Filter(句柄线程存放数组,Hwnd,2)(0),":")(1)
StopThread选中窗口进程
Fori=0ToUBound(句柄线程存放数组)
IfInStr(句柄线程存放数组(i),Hwnd)>0Then
ExitFor
EndIf
Next
Fork=iToUBound(句柄线程存放数组)-1
句柄线程存放数组(k)=句柄线程存放数组(k+1)
Next
数组维数=数组维数-1
RedimPreserve句柄线程存放数组(数组维数)
Else
If提示类型=1Then
MessageBox"此窗口未启动任何脚本!"
EndIf
EndIf
EndSub
Sub全部窗口启动程序
DimAllHwnds,临时句柄,i
AllHwnds=Plugin.WndEx6.EnumWindowA(0,0,"Notepad",0)
Fori=0ToUBound(AllHwnds)
临时句柄=Plugin.WndEx6.EnumWindowA(AllHwnds(i),0,"Edit",0)(0)
脚本开启状态=0
Call选中窗口启动程序(临时句柄,2)
Do
Delay50
LoopUntil脚本开启状态=1
Next
EndSub
Sub全部窗口暂停程序
DimAllHwnds,临时句柄,i
AllHwnds=Plugin.WndEx6.EnumWindowA(0,0,"Notepad",0)
Fori=0ToUBound(AllHwnds)
临时句柄=Plugin.WndEx6.EnumWindowA(AllHwnds(i),0,"Edit",0)(0)
Call选中窗口暂停程序(临时句柄,2)
Next
EndSub
Sub全部窗口继续程序
DimAllHwnds,临时句柄,i
AllHwnds=Plugin.WndEx6.EnumWindowA(0,0,"Notepad",0)
Fori=0ToUBound(AllHwnds)
临时句柄=Plugin.WndEx6.EnumWindowA(AllHwnds(i),0,"Edit",0)(0)
Call选中窗口继续程序(临时句柄,2)
Next
EndSub
Sub全部窗口停止程序
DimAllHwnds,临时句柄,i
AllHwnds=Plugin.WndEx6.EnumWindowA(0,0,"Notepad",0)
Fori=0ToUBound(AllHwnds)
临时句柄=Plugin.WndEx6.EnumWindowA(AllHwnds(i),0,"Edit",0)(0)
Call选中窗口停止程序(临时句柄,2)
Next
EndSub
EventForm1.选中窗口启动.Click
选中窗口启动=1
选中窗口暂停=0
选中窗口继续=0
选中窗口停止=0
KeyPress"Ctrl",1
EndEvent
EventForm1.选中窗口暂停.Click
选中窗口启动=0
选中窗口暂停=1
选中窗口继续=0
选中窗口停止=0
KeyPress"Ctrl",1
EndEvent
EventForm1.选中窗口继续.Click
选中窗口启动=0
选中窗口暂停=0
选中窗口继续=1
选中窗口停止=0
KeyPress"Ctrl",1
EndEvent
EventForm1.选中窗口停止.Click
选中窗口启动=0
选中窗口暂停=0
选中窗口继续=0
选中窗口停止=1
KeyPress"Ctrl",1
EndEvent
EventForm1.全部窗口启动.Click
全部窗口启动=1
全部窗口暂停=0
全部窗口继续=0
全部窗口停止=0
KeyPress"Ctrl",1
EndEvent
EventForm1.全部窗口暂停.Click
全部窗口启动=0
全部窗口暂停=1
全部窗口继续=0
全部窗口停止=0
KeyPress"Ctrl",1
EndEvent
EventForm1.全部窗口继续.Click
全部窗口启动=0
全部窗口暂停=0
全部窗口继续=1
全部窗口停止=0
KeyPress"Ctrl",1
EndEvent
EventForm1.全部窗口停止.Click
全部窗口启动=0
全部窗口暂停=0
全部窗口继续=0
全部窗口停止=1
KeyPress"Ctrl",1
EndEvent
EventForm1.读取信息定时器.Timer
DimAllHwnds父,AllHwnds子,临时句柄,分割列表,分割句柄,i
AllHwnds父=Plugin.WndEx6.EnumWindowA(0,0,"Notepad",0)
IfUBound(AllHwnds父)<>-1Then
AllHwnds子=""
Fori=0ToUBound(AllHwnds父)
临时句柄=Plugin.WndEx6.EnumWindowA(AllHwnds父(i),0,"Edit",0)(0)
IfAllHwnds子=""Then
AllHwnds子=临时句柄
Else
AllHwnds子=AllHwnds子&"|"&临时句柄
EndIf
Next
//获取记事本可输入文字的句柄组
分割句柄=Split(AllHwnds子,"|")
Fori=0ToUBound(分割句柄)
IfInstr(Form1.句柄列表.List,分割句柄(i))>0Then
Else
Form1.句柄列表.AddItem分割句柄(i)
EndIf
Next
//添加现有句柄到列表
分割列表=Split(Form1.句柄列表.List,"|")
Fori=0ToUBound(分割列表)
IfUBound(Filter(分割句柄,分割列表(i),2))=-1Then
Form1.句柄列表.RemoveItemi
EndIf
Next
//删除列表中不存在的句柄
Else
Form1.句柄列表.List=""
EndIf
EndEvent
EventForm1.句柄列表.DblClick
Dim选中句柄
选中句柄=Clng(Split(Form1.句柄列表.List,"|")(Form1.句柄列表.ListIndex))
Plugin.WndEx6.SetWindowState选中句柄,1
For4
Plugin.WndEx6.HighlightWindow选中句柄,4,"800080",80
Delay50
Next
EndEvent
SubOnScriptExit()
Form1.读取信息定时器.Enabled=0
Form1.句柄列表.List=""
EndSub
SubOnScriptLoad()
sPath=Plugin.Sys.GetDir(0)
PutAttachmentsPath&"\plugin","WndEx6.dll"
EndSub
EventForm1.打开记事本.Click
RunApp"NotePad.exe"
EndEvent