按键精灵多线程问题

按键精灵多线程问题,第1张

所谓多线程,事实和单线程一个样子,CPU并不可能做到真正的“同时”,本质上,每个核一个时钟所做的事情就是那么多,不管上面程序怎么写,计算机都是按时序执行的(这些牵涉到微机原理以及单片机的东西,要懂底层才能明白,如果纯做应用层,不需要明白,不过,不管怎样写代码,CPU是不可能做到绝对“同时”的,明白这点就行了),想执行时间快,就必须先把数据调入内存,在内存里面完成,结束后才释放内存,这种方法是最快的,但是这样做非常耗内存(具体怎么做按键精灵是无法 *** 作的,这个也不是应用层要做的事情,所以你知道就好,不用理会这个问题)
回到你的问题,为了加快你找色速度,首先尽量缩小你找色的范围,之后,把相似度尽量提高,相似度是1时候最快,但是很容易影响找色结果,这个你自己看着办,建议用大漠插件,大漠插件里面有一个找多色指令,这个指令几毫秒可以完成找多色,比你自己用按键自带插件,写一个函数的方法快多了,本人认为大漠插件能解决你的问题。

请暂时插入一列辅助列,比如B列,然后对应A1数据的话输入

=VALUE(TEXT(A1,"####-##-##"))-1

然后下拉,将结果的单元格格式设置为日期就可以得到日期格式的结果了,然后将结果复制为“数值”去掉公式就可以了。
如果还是要保留原来的数据格式,输入:

=YEAR(VALUE(TEXT(A1,"####-##-##"))-1)&MONTH(VALUE(TEXT(A1,"####-##-##"))-1)&DAY(VALUE(TEXT(A1,"####-##-##"))-1)
评论|0
2012-11-26 17:38greensky_34|四级
你说的”头一天“是指的”前一天“吗,如果是的话,你可以这样做:
1)用公式分别提取年月日,如在B1中写入=left(A1,4)可以提取年,在C1中写入=right(left(A1,6),2)提取月,在D1中写入=right(A1,2)提取日。
2)组合成日期形式可以在E1中输入:=DATE(year,month, day),也就是=DATE(B1,C1,D1)
3)计算”前一天“,在F1中输入=E1-1。日期可做数学运算。
可以看到,这里的思路是:把文本转换成日期形式,然后对日期做数学运算。
有了这个思路,其实可以写成一个长长的公式:=DATE(left(A1,4),right(left(A1,6),2),right(A1,2))-1
注意:日期的格式一定要相同,年4位,月2位,日2位。如果不是这样的格式就麻烦很多了。不过或许也有办法,也是按以上的思路进行。

IDA=BeginThread(A) //这样调用错了,应该改为IDA=BeginThread(A())
If Edown = -1 Then
BeginThread //这里没有目标进程,语法有错。
Call 子程序A() //不知道你为什么加“子程序”,你下面并没有定义,应该是Call A()
DimEnv IDA,IDB,IDC //所定义的环境变量虽然没语法错误,不过下面代码没有用到,不定义也一样

命令名称
BeginThread 同时运行过程
命令功能
新开一个线程运行当前脚本,从指定的过程开始运行
命令参数
字符串型,过程名
(注意:过程不能带参数,如:
Sub 过程(参数1)
End Sub
使用时会造成未知问题。)
返 回 值
整数型,线程ID [注:按键精灵820版新增返回值参数]
脚本例子
按键精灵8及以上语法
复制代码
//注:按键精灵820版“BeginThread”新增 返回值参数
MessageBox "多线程命令属于高级命令功能,不推荐新手使用。"
//所谓多线程并不是同时做一件相同的事情,而是不分前后顺序执行脚本。
Dimenv Hwnd1 //定义环境变量(多线程需要)
RunApp "notepadexe" //启动3个记事本测试用
RunApp "notepadexe"
RunApp "notepadexe"
Delay 2000 //等待3个记事本工具打开
Hwnd = PluginWindowSearch("无标题 - 记事本") //搜索所有记事本窗口句柄
MyArray = Split(Hwnd, "|") //分解句柄
If UBound(MyArray) >= 0 Then //判断是否搜到句柄?
For i = 0 To UBound(MyArray) - 1
hwndEx = Clng(MyArray(i)) //类型转换
Call PluginWindowMove(hwndEx, i 200 + 100, i 200 + 100) //调整窗口位置
Call PluginWindowActive(hwndEx) //激活前面
Hwnd1 = PluginWindowFindEx(hwndEx, 0, "Edit", 0) //获取可打字的窗口句柄
BeginThread 打字 //启动线程
Delay 100 //启动线程需要点时间
Next
End If
//以下是无限循环防止全部脚本停止。
Do
Delay 1000
Loop
//以下是测试用子程序例子
Sub 打字()
//首先获取环境变量句柄
Hwnd2 = Hwnd1
//然后开始循环或者无限循环需要执行的脚本内容
For i=0 to 20
Call PluginBkgndSendString(Hwnd2, i)
Delay 100
Call PluginBkgndKeyPress(Hwnd2, 13)
Delay 200
Next
End Sub
//注:按键精灵820版“BeginThread”新增 返回值参数
MessageBox "多线程命令属于高级命令功能,不推荐新手使用。"
//所谓多线程并不是同时做一件相同的事情,而是不分前后顺序执行脚本。
Dimenv Hwnd1 //定义环境变量(多线程需要)
RunApp "notepadexe" //启动3个记事本测试用
RunApp "notepadexe"
RunApp "notepadexe"
Delay 2000 //等待3个记事本工具打开
Hwnd = PluginWindowSearch("无标题 - 记事本") //搜索所有记事本窗口句柄
MyArray = Split(Hwnd, "|") //分解句柄
If UBound(MyArray) >= 0 Then //判断是否搜到句柄?
For i = 0 To UBound(MyArray) - 1
hwndEx = Clng(MyArray(i)) //类型转换
Call PluginWindowMove(hwndEx, i 200 + 100, i 200 + 100) //调整窗口位置
Call PluginWindowActive(hwndEx) //激活前面
Hwnd1 = PluginWindowFindEx(hwndEx, 0, "Edit", 0) //获取可打字的窗口句柄
BeginThread 打字 //启动线程
Delay 100 //启动线程需要点时间
Next
End If
//以下是无限循环防止全部脚本停止。
Do
Delay 1000
Loop
//以下是测试用子程序例子
Sub 打字()
//首先获取环境变量句柄
Hwnd2 = Hwnd1
//然后开始循环或者无限循环需要执行的脚本内容
For i=0 to 20
Call PluginBkgndSendString(Hwnd2, i)
Delay 100
Call PluginBkgndKeyPress(Hwnd2, 13)
Delay 200
Next
End Sub
脚本例子
按键精灵7及以下语法
复制代码
MessageBox "多线程命令属于高级命令功能,不推荐新手使用。"
//下面这个例子会打开一个记事本,用2个线程向其中模拟按键
VBSCall RunApp("notepad")
Delay 1000
SetEnv "Key","65"
BeginThread "Thread1"
While 1
Gosub PressKey
key=key+1
If key>90
key=65
EndIf
SetEnv "Key",CStr(key)
EndWhile
EndScript
Sub Thread1
For 10
Gosub PressKey
EndFor
KeyPress 13,1
SayString "线程1已经结束"
KeyPress 13,1
Return
Sub PressKey
key=GetEnv("Key")
KeyPress key,1
Delay 200
Return

多线程 命令很纠结 !!
下面是我的多线程 源码给你参考
DimEnv QA
Call 大漠注册()
Do While 7 = 7
KEYP = GetLastKey()
If keyP = 118 Then

QA = dmGetMousePointWindow()
Call PluginMsgTips(QA)
启动线程 = BeginThread(开始工作)
End If
loop
Sub 开始工作
hwnd = QA
Call PluginRegDllReg("\plugin\大漠梦想\dmdll")//创建大漠对象
set dm = createobject("dmdmsoft")//指定全局路径。
Delay 200
Call 绑定
Delay 10
Do
key = GetLastKey()
Call PluginMsgTips(key)
Delay 500
Call PluginMsgTips("")
If key <> 118 AND KEY <> 123 Then
dmKeyPress key
End If
Loop
End Sub
Sub 绑定
dm_ret = dmBindWindow(hwnd,"normal","normal","dx",0)
Delay 200
If dm_ret=0 Then
MessageBox "绑定失败"
ExitScript
End If
End Sub
Sub 大漠注册()
PutAttachment "\plugin","dll"
PutAttachment "\plugin\大漠梦想","bmp"
PutAttachment "\plugin\大漠梦想","txt"
PutAttachment "\plugin\大漠梦想","dmdll"
//↑PutAttachment释放附件
//95D4CA3B477FC3F5140B48B5D4D3170B 大客服注册码
//A79D9F5DFFD168854EA7BE3F2EA35E1A 大兵的注册码
Call PluginRegDllReg("\plugin\大漠梦想\dmdll")//创建大漠对象
set dm = createobject("dmdmsoft")//指定全局路径。
//↑大漠·注册
Delay 40
End Sub
//释放 绑定窗口
Sub OnScriptExit()
dm_ret = dmUnBindWindow()
End Sub

//下面2行是启动线程的,按需求放在需要的位置
ID1 = BeginThread(线程1)
ID2 = BeginThread(线程2)
//下面两段放哪都可以
Sub 线程1
StopThread ID2
MsgBox “我是线程1,我刚才把线程2停掉了!”
End Sub
Sub 线程2
StopThread ID1
MsgBox “我是线程2,我刚才把线程1停掉了!”
End Sub

BeginThread a //开启线程调用a
BeginThread b //开启线程调用b
Sub a
//子程序a
End Sub
Sub b
//子程序a
End Sub
ab就同时运行了,明白。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10343701.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-07
下一篇 2023-05-07

发表评论

登录后才能评论

评论列表(0条)

保存