VB编写的按键精灵

我现在把按键精灵这个程序完成了,但整个程序还是有一点问题,就是循环执行的时候,大家都知道按键精灵本身就是代替人工完成重复的一些操作。问题就出在循环里面,我把命令放在一个数... 我现在把按键精灵这个程序完成了,但整个程序还是有一点问题,就是循环执行的时候,大家都知道按键精灵本身就是代替人工完成重复的一些操作。

问题就出在循环里面,我把命令放在一个数组里面,然后不断用TIMER控件去执行它,但是如果它不循环一次,它就不会理会我中断的命令,大家看看我的临时代码:
DoEvents
If Switch = False Then Exit Sub
Dim p As Byte, Text As String
p = Val(SendMessage(Text2.hWnd, EM_GETLINECOUNT, 0&, 0&))
For i = 1 To p
Sleep 1000
DoEvents
TB1_GetLine Text2.hWnd, i - 1, Text ’这里是读出脚本内容
PublicRun Text ‘这一行是执行脚本里面的命令
If Switch = False Then Exit Sub
DoEvents
Next
If Check1.Value = 0 Then Timer1.Interval = 0
DoEvents
大家看到了,我不停地释放控制,就是想在不循环一次的时候可以随时中断程序,但可以说是没有一点作用。

我参考了一下别人的程序,基本上没有用到DoEvents这个命令,但居然可以随时中断,不知道用的什么方案(因作者写代码的习惯实在是不敢恭维,所以看不太懂)

求解决方案。解决了另附加高分!
展开
 我来答
KL1112
2009-12-29 · TA获得超过532个赞
知道小有建树答主
回答量:454
采纳率:0%
帮助的人:628万
展开全部
DoEvents这个命令,用起来不是很好...

你可以增加一个Boolean型的变量B(你已经用到了Switch,那你就把我下面的代码中的B改为Switch吧),在TIMER控件循环执行时每次都去判断变量B是否为True,如果是就运行,否则跳出循环或者其他,添加一个控件(或者代码)添加代码B= Not B,用于中断/继续TIMER控件循环执行...

如果要达到继续TIMER控件循环执行,这个有点难,有两种解决方法:
1.
For i = 1 To p
Do Until B
DoEvents
Loop
...
这个方法,在Do循环时,CPU使用比较高,而且有不太顺的感觉...

2.
使用静态变量i
Private Sub Timer1_Timer()

Static i As Integer
If Not B then
Timer1.InterVal=500 '用于快速判断是否可以继续执行
Exit Sub
Else
Timer1.Interval= '设置回原值
End If

Dim p As Byte, Text As String
p = Val(SendMessage(Text2.hWnd, EM_GETLINECOUNT, 0&, 0&))

Do Until i>=p
i=i+1
TB1_GetLine Text2.hWnd, i - 1, Text
PublicRun Text
If Not B then
Timer1.InterVal=500 '用于快速判断是否可以继续执行
Exit Sub
End If
Loop

If Check1.Value = 0 Then Timer1.Interval = 0

End Sub

大概思路就是这样,你试试...

如果能实现,还请你跟大家分享下...O(∩_∩)O~...
无语翘楚
高粉答主

2015-11-09 · 繁杂信息太多,你要学会辨别
知道大有可为答主
回答量:2.5万
采纳率:88%
帮助的人:2587万
展开全部
1 VB里引用 那个QMDispatch.dll
2 在系统中用regsvr32命令注册 DLL
注.QMDispatch.dll是按键精灵中 带的.
用regsvr32命令注册他的时候注意
1 路径中不能有中文名字(按键精灵默认的安装路径目录名是中文的)
2 单独把QMDispatch.dll这个文件复制到其他目录 注册也不起作用.
解决方法是把按键精灵 目录中的几个DLL文件一起复制到一个 目录中.然后执行 regsvr32 注册QMDispatch.dll 成功
3程序里加入 Private Declare Function FindPic Lib "QMDispatch" () As Long
4

dim pos as long

Set QMDispatchObj = CreateObject("QMDispatch.QMFunction")
参数 左, 上, 右, 下,寻找图片的路径,相似度
pos=QMDispatchObj.FindPic(0, 0, 1280, 1024, "E:\项目\梦幻西游外挂\进入游戏.bmp", 0.9)
msgbox int(pos/8192)'X左边
msgbox pos MOD 8192 'Y左边

VB6SP6 XPSP2 下运行成功,之前把相似度设成 0.9找不到.后来改成了0.5 可以找到,但相对速度降低了一些.
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一点都不过瘾
2015-10-27 · TA获得超过420个赞
知道小有建树答主
回答量:267
采纳率:0%
帮助的人:70.2万
展开全部
DoEvents这个命令,用起来不是很好... 你可以增加一个Boolean型的变量B(你已经用到了Switch,那你就把我下面的代码中的B改为Switch吧),在TIMER控件循环...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式