锚点-目标控件


一、使用目标控件自动发送文本

使用“锚点->目标窗体->目标控件”自动发送文本很方便,很多经典的群发程序都是使用这个功能.
使用目标控件一定要注意正确的录制方法,否则你会发现不能输入文本,或者这里的文本输到那里乱了.

正确的方法:先点选你要输入的目标控件(例如一个文本框),然后按录制热键,再点一下目标控件就可以了
这个过程,简称为“点录点”(点击、录制、再点击)缺一不可。

错误的方法先按录制热键,然后再点目标控件(例如一个文本框)
模拟精灵会查找第一次点击以前的焦点控件作为“目标控件”,而不是以点击以后的焦点控件作为目标控件。

例如向记事本输入文本(其他地方输入文本方法一样)。

1、点一下记事本的输入窗口
2、按录制热键、再点一下记事本的输入窗口
3、按停止热键,OK了

那么如何设置输入的文本呢?在目标控件中输入你要自动发送的内容(当然也可以设置变量或从文本文件读入) ,
很简单,每排一个,模拟精灵将在循环过程中每次提取一行并发送到目标程序中。
如下图:

在输入的内容中,用\c表示自动编辑,用\n表示换行。
如果您希望一次性发送全部的文本,点击“分行发送”并选择“否”即可(这样就不需要用\n表示换行了)。

分行发送,指的是每次发送一行.
第一次循环发送第一行,第二次循环发送第二行.第三次循环发送第三行......如此周而复始.
如果您读取ApeML源代码,会看到分行发送实际上指每行在“锚点->目标窗体->目标控件”下面生成一个“循环输入”节点

<目标控件 激活控件="false" 类名="Edit" ID="15" 清空="false" 全选="false" 全选键="false" 光标="2" 分行发送="true" 发送模式="0" 坐标="左 = 83,上 = 160" 标题包含="" 失败="_CMD_NEXT">
     <循环输入 文本="第一次发送的文本" />
     <循环输入 文本="第二次发送的文本" />

</目标控件>

如果您在记事本里发送换行符,有可能会看到每行中间多了一个空行,

这是因为记事本编辑内容为纯文本格式,仅识别换行符(“\n”)而不识别“目标控件”发送的回车换行(“\r\n”)
这时候,您可以添加回车事件来代替自动换行. 点击模拟区块中的一个事件,“复制”并编辑为按下弹起回车键。


 

二、设置目标控件

1、自动移动光标位置

您可以设置每次发送前是否自动移动光标到指定的位置。
HOME表示移动到文本开始,END表示移动到文本结束。AUTO表示不移动光标。

注意:如果您设定了自动移动光标,建议将“当前模拟区块-->模块事件”中的鼠标事件删除。

2、覆盖、清空

如果希望每次发送的文本覆盖原来的文本,可以将“全选”设定为“是”并“更新”。
如果“全选”不起作用,可以将“全选键”设定为“是”并更新,在发送前自动模拟Ctrl + A全选键。

如果您希望在发送文本以前自动清除文本框中的文本, 可以点击“清空”并选择“是”。

3、设置标题

如果目标控件中的文本是会动态改变的(例如您使用“目标控件”自动发送文本),
为了避免“目标控件”在“自动定位过程中”找不到指定的文本导致回放失败。
您需要清空“目标控件-->标题包含”。

4、可选五种不同的发送模式


如果发送文本出现其他问题,可以如下切换一下发送模式

附注:如果发送后的文本了现乱码,也可以通过更改回放模式解决。

建议打开“控制面板-->区域和语言选择-->语言-->详细信息(文字服务和输入语言)”
将预设输入语言更改为“中文(中国)简体中文-美式键盘”

三、目标控件也可以用LAScript脚本控制并自动发送变量

下面是一些例子:


1、自动输入不同数字的号
首先在自动输的模拟区块前添加一个脚本区块,并添加以下脚本。

local m = ape:getModule("输入五位数模块")
n = m:getCode() --读取自动编号
str = string.format("%05d",n) --格式化为至少5位的字符串
str =string.sub(str,1,5); --取前5位数字
 
m:setStringList( { "我输一个五位数:"..str } );


2、改变自动编号的当前值

local m = ape:getModule("输入五位数模块")
m:setCode(1234);
--改变自动编号当前值

3、可以在模拟区块前面添加脚本区块,并用以下脚本修改目标控件的文本

m = ape:getModule("区块名字");
m:setStringList({str,str2,str3})

--m:setStringList 的参数是一个table变量,可以包含多个字符串

4、 本随机从数组中取一个字符串,然后发送到目标控件

tab = {"字符串一","字符串二","字符串三","字符串四","字符串五","字符串六","字符串七","字符串八","字符串九","字符串十"}
 
if( ape:runCount() == 1) then
math.randomseed(os.time()) --初始化随机数种子
end;
 
index = math.random( 1,10 ) --得到一个1到10之间的随机数字
str = tab[index] --在列表中随机取一个字符串
str = str.."\n"; --有号个换行
 
local m = ape:getModule("Module2") --读取模拟区块对象
m:setStringList( { str } );
--这里把字符串送到目标控件,你送一个也可以,两个也可以,但是必须是一个数组,
-- { }的作用就是生成一个数组(在模拟精灵中叫table--列表)