欢迎来到天天文库
浏览记录
ID:16440497
大小:4.00 MB
页数:7页
时间:2018-08-09
《按键精灵开发教程:qui界面不卡死》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、按键精灵开发教程:QUI界面不卡死来源:按键学院【按键精灵】Qui界面加载之后卡死?点击控件之后卡死?为什么会出现这种情况?该如何解决?且听小编细细道来~原因QUI界面事件如果添加循环命令,或者延时命令。添加之后,我们再去点击QUI界面,就会出现卡死的现象。QUI界面事件:窗口事件以及控件事件统称为界面事件。界面事件?按键精灵是怎么知道我们点击了哪个控件,鼠标移动到了界面的哪里了呢?其实,我们看似平常的一个操作,例如:移动鼠标到窗口界面上点击输入框。这样的一个操作,其实是被分解成了几百条消息反馈给按键精灵软件,告诉它
2、鼠标现在在哪里,做了什么,点击了控件,然后控件要响应什么操作等等。而这些消息,按键精灵软件会逐条处理,处理完这一条才会继续处理下一条。所以,当它在处理循环事件会延时事件时,没有处理完之前都不处理其它信息。使用循环命令导致界面卡死的解决方法1、多线程界面上有两个控件,输入框1(InputBox1)和按钮1(Button1) 当按下按钮1(Button1)时, 启动线程,将延时命令和循环命令放在线程里执行。循环一百次给输入框赋值。代码:EventForm1.Button1.ClickBeginThread循环//启动
3、线程EndEventSub循环Fori=1To100Delay200Form1.InputBox1.Text=""&iNextEndSub1、定时器定时器的有效设置为否时间间隔设置为200毫秒(执行一次循环需要的时间)当按下按钮1(Button1)时,将定时器的有效设置为是(Form1.Timer1.Enabled=True)定时器每隔200毫秒会执行一次Timer事件我们在 Timer事件中,定义一个变量i,每执行一次Timer时间i的值叠加1,直到i的值等于我们设置循环次数,则将定时器的有效设置为否。代码:Eve
4、ntForm1.Button1.ClickForm1.Timer1.Enabled=TrueEndEventEventForm1.Timer1.Timeri=i+1Ifi=100thenForm1.Timer1.Enabled=FalseForm1.InputBox1.Text=""&iEndEvent1、API函数 我们已经知道了,界面卡住,是因为在处理循环命令时,产生了其它的消息导致的。那么我们可以这样做,当在执行循环命令时,界面上的其它所有消息都忽略掉,不反馈给按键精灵软件要用到四个Api函数:LocalAl
5、loc、PeekMessageA、TranslateMessage、DispatchMessageA、LocalFree代码:DeclareFunctionPeekMessageALib"user32.dll"Alias"PeekMessageA"(ByVal消息格式AsAny,ByVal窗口句柄AsLong,ByVal消息最小过滤值AsLong,ByVal消息最大过滤值AsLong,ByVal删除消息AsLong)AsLongDeclareFunctionLocalAllocLib"kernel32"Alias"L
6、ocalAlloc"(ByValwOemCharAsLong,ByValwOmCharAsLong)AsLongDeclareFunctionLocalFreeLib"kernel32"Alias"LocalAlloc"(ByValhMemAsLong)AsLongDeclareFunctionTranslateMessageLib"user32.dll"Alias"TranslateMessage"(ByVal消息结构AsAny)AsLongDeclareFunctionDispatchMessageALib"us
7、er32.dll"Alias"DispatchMessageA"(ByVal消息结构AsAny)AsLongEventForm1.Button1.ClickFori=1to100Form1.InputBox1.Text=""&icall处理事件NextEndEventSub处理事件()WM=LocalAlloc(0,28)//分配一块存储空间用于存放消息IfPeekMessageA(WM,0,0,0,1)<>0Then//获取当前程序的消息存放在"消息结构"里,然后将消息删除,忽略不处理TranslateMessag
8、eWM//将空消息转换成程序可识别格式(虚拟键消息转换为字符消息)DispatchMessageAWM//将转完格式的空消息反馈给程序EndIfLocalFreeWM//释放存储空间EndSub使用延时命令导致界面卡死的解决方法API函数当我们的延时命令不是放在多线程里,也不是靠定时器来处理,一定要放在QUI事件中时,该怎么办呢?我们用上面说到
此文档下载收益归作者所有