按键精灵子程序和调用多线程子程序调用不了

按键精灵实现多线程多开脚本教程_百度经验
&&&&&&电脑按键精灵实现多线程多开脚本教程听语音
百度经验:jingyan.baidu.com“多线程到底怎么实现?好复杂!”&小编时常在论坛里,看到有童鞋发出这样的疑问。小编觉得多线程就好似冰山美人,外冷内热。乍一看,好像很不好相处,近一步,则会发现其实她很温柔。 到底有多温柔呢?一起来看看~百度经验:jingyan.baidu.com按键精灵2014百度经验:jingyan.baidu.com1QUI界面写代码之前,我们先画脚本的Qui界面。如下图:2思路我们拿记事本作为多开的对象。脚本由以下三个按钮点击事件组成:1、点击QUI界面中的&一键启动&按钮,启动记事本,启动的记事本个数由InputBox1里填入的数值决定。启动线程,将线程id、窗口句柄记录到ini文件中。在线程调用的子程序里,对记事本输入内容。2、点击“关闭所有窗口”按钮,则读取ini中保存的线程id、窗口句柄,关闭线程之后关闭窗口。3、点击“暂停”按钮,则读取ini文件中和InputBox2文本框中对应数值的窗线程id,暂停该线程。再次点击“暂停”按钮,则读取ini文件中和InputBox2文本框中对应数值的窗线程id,恢复该线程。3“一键启动”按钮点击事件&步骤:1、启动记事本窗口。2、修改记事本的标题名称。3、每个记事本窗口对应启动一个线程。4、将窗口句柄、线程id记录到ini文件中。&41、启动记事本窗口。&&&&&&&&&&&&&&&&&&&&获取InputBox1中的数值。利用for循环打开记事本窗口。&&&&&&&For&i&=&1&To&Form1.InputBox1.Text&&&&&&&&//打开记事本&&&&&&&&RunApp&&Notepad.exe&Next&&&&&&&&&打开记事本之后,我们需要判断下记事本是不是已经打开,如果打开了则获取窗口句柄,如果没有打开,则继续循环判断记事本是不是已经打开。避免当游戏窗口还没有打开获取不到窗口句柄的情况。&&&&&&&&do&&&&&&&&&&&&&&&&&&&&&&&hwnd&=&Plugin.Window.Find(0,&&无标题&-&记事本&)//获取记事本句柄&&&&&&&&Loop&while&(Hwnd=0)52、修改记事本窗口的标题。&&&&&&&&&&&&&&&&&&&&修改了窗口标题,便于我们管理多窗口。且:第1点中说到的判断记事本窗口是不是打开,当游戏窗口标题都是一样的情况下,这个方法就会失效。第一个窗口打开了,第二个窗口不管有没有打开,那么获取到的还是第一个窗口的句柄。&&&&&&&Do&&&&&&&&&&&&&If&stext&=&第&&i&&窗口&&Then&&&&&&&&&&&&&&&&&&Exit&Do&&&&&&&&&&&&End&If&&&&&&&&&&&&call&&Plugin.Window.SetText(hwnd,&第&&i&&窗口&)&&&&&&&&&&&&stext&=&Plugin.Window.GetText(hwnd)&&&&&&&&Loop&&//循环的第一次修改窗口标题,第二次开始判断标题有没有修改成功,没有的话则继续修改,成功的话则退出do循环。63、启动多线程。(&线程相关知识&)&&&&&&&&&线程ID&=&BeginThread(打字)&&&&&&&&&&在for循环里加入这一句启动线程的代码,每循环一次开启一个新的线程。&&&&&&&&&&所以,在启动完线程之后,要趁热把线程id记录起来。74、将窗口句柄、线程id&存放到ini文件中。&(&ini文件读取写入相关知识&)&&&&&&&&&&&&&&&&&Call&Plugin.File.WriteINI(&窗口句柄&,&&第&&i&&窗口&,hwnd,&&C:\记录.ini&)&Call&Plugin.File.WriteINI(&线程ID&,&&第&&i&&窗口&,线程ID,&&C:\记录.ini&)8线程调用子程序被线程调用的子程序和平常的子程序有什么不同吗?有两点不一样:1、被线程调用的子程序,不支持参数传递。2、被线程调用的子程序,不支持dim定义的局部变量的传递。&&&&&建立一个要被线程调用的子程序&,命名为&“打字”&Sub&打字()&&&&&窗口句柄&=&hwnd//hwnd是环境变量,在一键启动事件中,将窗口句柄赋值给了它。&&&&Do&&&&hwnds&=&Plugin.Window.FindEx(窗口句柄,&0,&&Edit&,&0)&&&&Loop&While(hwnds=0)&&&&For&i&=&1&To&200&&&&&&&&Call&Plugin.Bkgnd.SendString(hwnds,&i)&&&&&&&&Call&Plugin.Bkgnd.KeyPress(Hwnds,&13)&&&&&Next&&&&&&&&End&Sub9注意:为什么在子程序的开头&,要拿一个新的变量&窗口句柄&去获取&hwnd&的值呢? 本例中,我们循环多开窗口的时候,每循环一次,hwnd的值就变化一次。 循环第一次,hwnd的值为:328202,启动线程之后,&调用&sub&打字()&子程序,获取记事本的子窗口句柄。& 循环第二次,hwnd的值为:197298,启动线程之后,&调用&sub&打字()&子程序,获取记事本的子窗口句柄。 如果顺利循环下去没有问题,但是,如果第一个窗口开启的时候卡住了呢?第二个窗口开启的速度比第一个快,hwnd中存放的数据变成了第二个窗口的句柄,这个时候第一个窗口缓过来了,它调用到的hwnd里已经不是自己的窗口句柄,而是第二个窗口的。所以,&当第一个窗口启动线程,调用&sub&打字()&子程序,在子程序的开头位置,第一个窗口的窗口句柄hwnd用新的变量存起来。&新的变量没有定义,默认是dim局部变量,局部变量是不能在线程间传递的,所以它只在当前线程有效,不影响其它线程。10“暂停”按钮点击事件步骤:1、当按钮的标题名称为“暂停”的时候:&&&&&暂停InputBox2文本框中数值对应的线程。并且将按钮的标题修改为&继续&。&2、当按钮的标题名称为“继续”的时候:&&&&&恢复InputBox2文本框中数值对应的线程。并且将按钮的标题修改为&暂停&。&11If&Form1.暂停.Caption&=&&暂停&&Then&&&&&&&&&&&暂停线程id&=&Plugin.File.readINI(&线程ID&,&&第&&&cint(Form1.InputBox2.Text)&&&&窗口&,&&C:\记录.ini&)&&&&&&&&&&&&&&&&PauseThread&暂停线程id&&&&&&&&Form1.暂停.Caption&=&&继续&&&&&else&&&&&&&&&&&&继续线程id&=&Plugin.File.readINI(&线程ID&,&&第&&&cint(Form1.InputBox2.Text)&&&&窗口&,&&C:\记录.ini&)&&&&&&&&&&&&&&&&ContinueThread&继续线程id&&&&&&&&Form1.暂停.Caption&=&&暂停&&&&&&&&&End&If&&12“关闭所有窗口”按钮点击事件步骤:1、&获取ini文件中记录的线程id,关闭所有线程。2、&获取ini文件中记录的窗口句柄,关闭所有记事本窗口。For&i&=&1&To&cint(Form1.InputBox1.Text)&&&&&&&&关闭线程id&=&Plugin.File.readINI(&线程ID&,&&第&&&&i&&&&窗口&,&&C:\记录.ini&)&&&&&&&&&&&&&&&&StopThread&关闭线程id&//关闭线程&&&&&&&&Call&Plugin.Window.Close(Plugin.File.readINI(&窗口句柄&,&&第&&&&i&&&&窗口&,&&C:\记录.ini&))&//关闭窗口&Next13整体代码:Dimenv&hwnd&&Event&Form1.一键启动.Click&&&&For&i&=&1&To&&Form1.InputBox1.Text&&&&&&&&&&&&&&&&&//打开记事本&&&&&&&&RunApp&&Notepad.exe&&&&&&&&&&&&&&&&&&&&&&&&&//判断记事本是否打开&&&&&&&&do&&&&&&&&&&&&&&&&&&&&&&&hwnd&=&Plugin.Window.Find(0,&&无标题&-&记事本&)//获取记事本句柄&&&&&&&&Loop&while&(Hwnd=0)&&&&&&&&&&&&Call&Plugin.Window.Move(hwnd,i*50+100,200)&&//设置记事本出现在屏幕上的位置,横坐标递增,然后窗口可以依次排列开,方便查看运行效果&&&&&&&&&&&&&&&&&&&&&//////////////修改窗口标题////////////////&&&&&&&&Do&&&&&&&&&&&&&If&stext&=&第&&i&&窗口&&Then&&&&&&&&&&&&&&&&&&Exit&Do&&&&&&&&&&&&End&If&&&&&&&&&&&&call&&Plugin.Window.SetText(hwnd,&第&&i&&窗口&)&&&&&&&&&&&&stext&=&Plugin.Window.GetText(hwnd)&&&&&&&&Loop&&&&&&&&&&////启动线程每使用BeginThread启动一次打字子程序,都是生成一条新的线程&&&&&&&&线程ID&=&BeginThread(打字)&&&&&&&&&&&&&&&&&&&&&&&&//将窗口句柄、线程id记录到ini文件中,便于之后调用&&&&&&&&Call&Plugin.File.WriteINI(&窗口句柄&,&&第&&i&&窗口&,hwnd,&&C:\记录.ini&)&&&&&&&&&Call&Plugin.File.WriteINI(&线程ID&,&&第&&i&&窗口&,线程ID,&&C:\记录.ini&)&&&&&Next&&&&&&&&&&&&Form1.一键启动.Enabled=FalseEnd&Event&14//////////////////关闭线程(StopThread)////////////////////////////Event&Form1.关闭所有窗口.Click&&&&&Form1.一键启动.Enabled&=&true&&&&&&&&For&i&=&1&To&cint(Form1.InputBox1.Text)&&&&&&&&&&&&关闭线程id&=&Plugin.File.readINI(&线程ID&,&&第&&&&i&&&&窗口&,&&C:\记录.ini&)&&&&&&&&&&&&&&&&StopThread&关闭线程id&//关闭线程&&&&&&&&Call&Plugin.Window.Close(Plugin.File.readINI(&窗口句柄&,&&第&&&&i&&&&窗口&,&&C:\记录.ini&))&//关闭窗口&&&&&&&&&&&&NextEnd&Event&&&////////////////线程暂停(PauseThread)、线程恢复(ContinueThread)///Event&Form1.暂停.Click&&&&&&If&Form1.暂停.Caption&=&&暂停&&Then&&&&&&&&&&&&&暂停线程id&=&Plugin.File.readINI(&线程ID&,&&第&&&cint(Form1.InputBox2.Text)&&&&窗口&,&&C:\记录.ini&)&&&&&&&&&&&&&&&&PauseThread&暂停线程id&&&&&&&&Form1.暂停.Caption&=&&继续&&&&&else&&&&&&&&&&&&继续线程id&=&Plugin.File.readINI(&线程ID&,&&第&&&cint(Form1.InputBox2.Text)&&&&窗口&,&&C:\记录.ini&)&&&&&&&&&&&&&&&&ContinueThread&继续线程id&&&&&&&&Form1.暂停.Caption&=&&暂停&&&&&&&&&&&&&End&IfEnd&Event15////////////////打字线程/////////////////////////Sub&打字()&&&&&窗口句柄&=&hwnd&&&&Do&&&&hwnds&=&Plugin.Window.FindEx(窗口句柄,&0,&&Edit&,&0)&&&&Loop&While(hwnds=0)&&&&For&i&=&1&To&200&&&&&&&&Call&Plugin.Bkgnd.SendString(hwnds,&i)&&&&&&&&Call&Plugin.Bkgnd.KeyPress(Hwnds,&13)&&&&&Next&&&&&&&&End&Sub&END经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。投票(4)已投票(4)有得(0)我有疑问(0)◆◆说说为什么给这篇经验投票吧!我为什么投票...你还可以输入500字◆◆只有签约作者及以上等级才可发有得&你还可以输入1000字◆◆如对这篇经验有疑问,可反馈给作者,经验作者会尽力为您解决!你还可以输入500字相关经验01012热门杂志第1期你不知道的iPad技巧3763次分享第1期win7电脑那些事6619次分享第2期新人玩转百度经验1398次分享第1期Win8.1实用小技巧2646次分享第1期小白装大神1910次分享◆请扫描分享到朋友圈你的位置:
自定义变量的值能不能用来调用子程序?
17:04:50 |
来源: 按键精灵资源站
本帖最后由 cacccb 于
17:05 编辑
[code]UserVar 选择副本=DropList{&试练山脚&:&试练山脚()&|&试练山腹&:&试练山腹()&|&皇家矿坑&:&皇家矿坑()&|&远古沉船&:&皇家矿坑()&}=0 &选择副本&
UserVar 选择难度=DropList{&简单&:&简单()&|&普通&:&普通()&|&困难&:&困难()&|&极难&:&极难()&|&噩梦&:&噩梦()&}=0 &选择难度&
UserVar 副本进行时间=300000 &副本进行时间&
Call Plugin.Msg.Tips(&选择副本&)
//选择副本
Call 选择副本
Rem 退出副本
Call Plugin.Msg.Tips(&退出副本&)
MoveTo 680, 360
LeftClick 1
Delay 10000
Sub 简单()
& & Rem 选择难度
& & Call Plugin.Msg.Tips(&选择简单&)
& & FindPic 650,350,700,450,&Attachment:\简单.bmp&,1,intX,intY
& & If intX & 0 And intY & 0 Then
& && &&&MoveTo 590, 358
& && &&&Delay 500
& && &&&LeftClick 1
& && &&&Delay 1000
& & End If
Sub 远古沉船()
& & IfColor 493, 342, &F6F6F6&, 0 Then
& && &&&MoveTo 493, 342
& && &&&Delay 500
& && &&&LeftClick 1
& && &&&Delay 1000
& & End If
& & Rem 选择难度
& & Call Plugin.Msg.Tips(&选择难度&)
& & Call 选择难度
& & Rem 进入副本
& & Call Plugin.Msg.Tips(&进入副本&)
& & Delay 5000
& & IfColor 820, 556, &8AF9A0&, 0 Then
& && &&&MoveTo 820, 556
& && &&&Delay 500
& && &&&LeftClick 1
& && &&&Call Plugin.Msg.Tips(&副本进行中...&)
& && &&&Delay 副本进行时间
& & End If
各位前辈请问一下,自定义变量的值只能是是数字或字母吗?用来调用子程序吗?如果可以的话,请帮我看看我上面这个脚本有什么不对?全部脚本比较大,所以我就只粘贴了2个子程序,其他基本也是差不多的
多谢各位大哥大姐了按键精灵当出现一张指定图片的时候怎么调用子程序没出现就不调用_百度知道
按键精灵当出现一张指定图片的时候怎么调用子程序没出现就不调用
您的回答被采纳后将获得:
系统奖励15(财富值+成长值)+难题奖励30(财富值+成长值)
我有更好的答案
找图.找到就调用啊
为您推荐:
其他类似问题
按键精灵的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。怎么跳出sub子程序?有人会吗?【按键精灵吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:402,733贴子:
怎么跳出sub子程序?有人会吗?收藏
比如:正常是这样,调用a()完成后会返回call,call
a() TracePrint &第二步,调用A完成我回来了!&Sub a()
TracePrint &第一步,我进入A了!&End Sub
TracePrint &第三步,继续往下跑!&请问能不能,进入a()运行完成后继续往下跑,不再跳回call?,也就是直接从子程序往下运行了!
乐清市领祥电子有限公司创建于2006年是一家有着专业开发和生产各种轻触开关等系列产品的厂家
没明白什么意思
可以试试加判断或者用go to
你去脚本设置那改成只运行一次,就绝不会再跳回来了
看看这调试运行流程!当 CALL 调用子程序,子程序运行完成后又返回CALL地方,现在就想用call调用子程序,子程序运行完成后继续往下运行,不再返回call,能不能实现?
这种本身逻辑有问题,加Q,改成多线程就好了
你这种逻辑其实用GOTO是最好的,子程序还是用多线程来暂停终止开始的好。
登录百度帐号按键精灵如何让一个程序循环多次调用子程序然后继续循环?_百度知道
按键精灵如何让一个程序循环多次调用子程序然后继续循环?
我有更好的答案
你描述的不是很清楚按我理解的意思给你个大概思路,你自己改下,要是不行就给我hi-----------//之前的代码你自己搞BT = Plugin.Sys.GetTime() //获得当前系统时间CT = Plugin.Sys.GetTime() //获得当前系统时间While CT - BT & 180000 //如果时间差小于3分钟就循环运行Call 子程序()//如果你的子程序很短下面再加一个“delay ”不然CPU运行会很高,延时多少你自己定CT = Plugin.Sys.GetTime() Wend//按键7用Endwhile//这儿就是超过三分钟后你要执行的代码了Sub 子程序()//别忘了子程序的内容放这儿End Sub------------------希望对你有帮助 Rem 开始Hwnd = Plugin.Window.Foreground()s = Window.GetClientRect(hwnd)MyArray = Split(s, &|&, -1, 1)sx = MyArray(0)sy = Myarray(1)FindColor 801+sx,232+sy,1006+sx,593+sy,&A5F7BD&,intX,intYIf intX & 0 And intY & 0 ThenMoveTo intX, intY
RightClick 1End IfBT = Plugin.Sys.GetTime()CT = Plugin.Sys.GetTime()While CT - BT & 180000Call aa()CT = Plugin.Sys.GetTime() Wendgoto 开始Sub aa()KeyDown 105,25MoveTo 220+sx,433+syLeftClick 1MoveTo 216+sx,389+syLeftClick 1End Sub //建议你在子程序里面多一些delay不然电脑很卡的~
采纳率:21%
rem Afor 10call 调用子程序nextgoto A
本回答被提问者采纳
为您推荐:
其他类似问题
按键精灵的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 按键精灵 跳出子程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信