过程处理中怎么稳定暂停?-----------------------近期结完别的贴后再加分!

zhilongquan 2009-04-14 09:56:17
程序运行过程中需要模拟 复制 粘贴 回车 复制 粘贴 一系列快捷键,当然是按顺序的,但发现如果直接按顺序写代码,很容易丢失。所以想每完成一个 复制 粘贴 回车的过程后稍微停顿一下好让后面的操作不发生数据串门!

用 sleep(1000)发现非常不好用,

比如 这样的例子。
单击事件后

sleep(1000)
label1.caption=“1”
sleep(1000)
label1.caption=“2”
sleep(1000)
label1.caption=“3”
sleep(1000)
label1.caption=“4”

并不会出现 1 2 3 4按顺序变换而是 四秒后直接变成 4.

用 timer 又感觉太麻烦,

我程序中的代码是这样子的。


Private Sub tsxbh2_Timer()

tsxbh2.Enabled = False
'------------------------------
Call keybd_event(VK_MENU, 0, 0, 0)
DoEvents
Call keybd_event(vbKeyZ, 0, 0, 0)
DoEvents
Call keybd_event(vbKeyZ, 0, KEYEVENTF_KEYUP, 0)
DoEvents
Call keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0)
DoEvents

'===================================

Call keybd_event(vbKeyRight, 0, 0, 0)
DoEvents
Call keybd_event(vbKeyRight, 0, KEYEVENTF_KEYUP, 0)
DoEvents
'----------------------------------

Call keybd_event(vbKeyY, 0, 0, 0)
DoEvents
Call keybd_event(vbKeyY, 0, KEYEVENTF_KEYUP, 0)
DoEvents
'---------------------
Sleep (100)
Call keybd_event(vbKeyTab, 0, 0, 0)
DoEvents
Call keybd_event(vbKeyTab, 0, KEYEVENTF_KEYUP, 0)
DoEvents
'---------------------

Call keybd_event(vbKeyTab, 0, 0, 0)
DoEvents
Call keybd_event(vbKeyTab, 0, KEYEVENTF_KEYUP, 0)
DoEvents

'→→→→→→→→→→→→→→→→→→→→→→复制一
Clipboard.Clear
Clipboard.SetText Tzj.Text
'→→→→→→→→→→→→→→→→→→→→→→粘贴一

Call keybd_event(VK_CONTROL, 0, 0, 0)
DoEvents

Call keybd_event(vbKeyV, 0, 0, 0)
DoEvents
Call keybd_event(vbKeyV, 0, KEYEVENTF_KEYUP, 0)
DoEvents
Call keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0)
DoEvents

'←←←←←←←←←←←←←←←←←←←←←←回车一

Call keybd_event(13, 0, 0, 0)
DoEvents
Call keybd_event(13, 0, KEYEVENTF_KEYUP, 0)
DoEvents

Sleep (100) '---------------------在这里想稍微停顿一下,


'→→→→→→→→→→→→→→→→→→→→→→复制2
Clipboard.Clear
Clipboard.SetText T01.Text

'→→→→→→→→→→→→→→→→→→→→→→粘贴2

Call keybd_event(VK_CONTROL, 0, 0, 0)
DoEvents

Call keybd_event(vbKeyV, 0, 0, 0)
DoEvents
Call keybd_event(vbKeyV, 0, KEYEVENTF_KEYUP, 0)
DoEvents
Call keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0)
DoEvents

'←←←←←←←←←←←←←←←←←←←←←←回车2

Call keybd_event(13, 0, 0, 0)
DoEvents
Call keybd_event(13, 0, KEYEVENTF_KEYUP, 0)
DoEvents

Sleep (100) '---------------------在这里想稍微停顿一下,


'→→→→→→→→→→→→→→→→→→→→→→复制3
Clipboard.Clear
Clipboard.SetText T02.Text
'→→→→→→→→→→→→→→→→→→→→→→粘贴3

Call keybd_event(VK_CONTROL, 0, 0, 0)
DoEvents

Call keybd_event(vbKeyV, 0, 0, 0)
DoEvents
Call keybd_event(vbKeyV, 0, KEYEVENTF_KEYUP, 0)
DoEvents
Call keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0)
DoEvents

'←←←←←←←←←←←←←←←←←←←←←←回车3

Call keybd_event(13, 0, 0, 0)
DoEvents
Call keybd_event(13, 0, KEYEVENTF_KEYUP, 0)
DoEvents
'←←←←←←←←←←←←←←←←←←←←←← 切换
Call keybd_event(vbKeyTab, 0, 0, 0)
DoEvents
Call keybd_event(vbKeyTab, 0, KEYEVENTF_KEYUP, 0)
DoEvents


'←←←←←←←←←←←←←←←←←←←←←←回车4

Call keybd_event(13, 0, 0, 0)
DoEvents
Call keybd_event(13, 0, KEYEVENTF_KEYUP, 0)
DoEvents

Sleep (100) '---------------------在这里想稍微停顿一下,

'→→→→→→→→→→→→→→→→→→→→→→ALT +f4
Call keybd_event(VK_MENU, 0, 0, 0)
DoEvents
Call keybd_event(vbKeyF4, 0, 0, 0)
DoEvents
Call keybd_event(vbKeyF4, 0, KEYEVENTF_KEYUP, 0)
DoEvents
Call keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0)
DoEvents
kzt.Caption = "空闲中"

End Sub



发现sleep() 控制很不稳定,大家有什么好的方法?

这几天分用完了,等结完别的贴了一定追加分给大家!
...全文
113 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
贝隆 2009-06-06
  • 打赏
  • 举报
回复
刚刚试了:用Label1.Refresh可以实现刷新
贝隆 2009-06-06
  • 打赏
  • 举报
回复
根据你的例子,我做了修改,代码如下,能实现1、2、3、4显示
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Command1_Click()
Dim intP As Integer
Dim lngP As Long
For intP = 1 To 4
Label1.Caption = CStr(intP)
lngP = GetTickCount
Do
DoEvents
Loop Until GetTickCount - lngP >= 1000
Next intP
End Sub

这个DoEvents是关键,必须得
如果是用Sleep + DoEvents 我试验了,不能显示3 ,我也不知为什么
boywang 2009-06-05
  • 打赏
  • 举报
回复
试试doevent或者form.refresh一下
penguinhzf 2009-04-14
  • 打赏
  • 举报
回复
按照你的意思,用SLEEP没意义,假设有一些电脑运行速度比较慢的话,你该怎么设置时间间隔呢?

我建议你用判断,判断上一步完成后再进行下一步操作,这样就能万无一失了.

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧