Post by AnkuLua on Nov 10, 2016 23:54:55 GMT 9
全部ではないけど、AnkuLuaは一部分の Sikuli オブジェクトと函数を使っています。
この一部分の函数の使い方は Sikuli と同じです。
この文章はこれらの函数を紹介します。
Slkuli のホームページにこれより多い内容があります。
オブジェクト
図案ファイル文字列(String): 図案ファイル文字列は捜し用の図案のファイルネームです。
位置(Location):
位置は画面にの座標
AnkuLuaの支持する位置函数は getX, getY, grow と offset です。
パターン(Pattern):
図案捜すとタップするために、パターンが図案に他の特徴を付けてある。
AnkuLuaの支持するパターン函数はsimilar, targetOffset と getTargetOffset です。
區域(Region):
区域は画面にある四角形の範囲です。区域は左上角の座標(x, y)と幅、高さの画素数(w, h)で表す。
支持する函数は getCenter, getTarget, getLastMatch, click, find, exists, wait, findAll, waitVanish, dragDrop, type です。
函数 click, find, exists, wait, findAll, waitVanish, dragDrop, type と save は後で詳しく紹介します。
マッチ(Match):
成功に照合したら、得るオブジェクトはMatchです。このオブジェクトには図案の幅と高さ、そして一番相似してる結果の左上角座標があります。
MatchはRegionの拡張(extension)だから、Matchは全部Regionの函数を支持します。
Matchは次の函数も支持します。
setTargetOffset(Location)
setTargetOffset(int x, int y)
getCenter() 中央のLocationを戻します。
getTarget() 目標のLocationを戻します。
Matchには、もう一つRegionにないパラメータがある。相似度(similar)です。相似度は0~1の数字で、照合した図案はどれぐらい相似することを表します。
getScore()函数は相似度を取得します。
Region函数 (Sikulixと一致)
捜しとタップ函数は、いずれも複数のオブジェクトをパラメータにすることができる。次は全部の使えるオブジェクト、前綴のアルファベットは略語です。
P: Pattern(パラメータ)
S: String(文字列)
M: Match(マッチ)
R: Region(区域)
L: Location(位置)
click(PSMRL):
パラメータはP或いはSの場合: 成功に図案を発見したら、その対応の位置をタップします。
MRL: 対応の位置をタップします。
find(PS):
図案を捜して、成功に発見したら一番相似してるオブジェクト(match)を戻します。
findAll(PS):
画面に全部相似してる図案を捜して、全ての照合した結果を戻します(match)。
ご注意: findAll(PS)の戻り値はmatchのテーブルを含むけど(table with matches)、region:findAll(PS)の戻り値はJava Listオブジェクトです。.
だから、region:findAll(PS)でmatchの含むテーブルを取得したい場合は、次のプログラムを使ってください。
wait([PS][, seconds]):
設定した時間(seconds)まで、図案の現れを待つ。見つかったら、一番相似してるオブジェクトを戻します。
図案が見つからなかったら、例外(exception)が出ます。
exists(PS[, seconds]):
設定した時間(seconds)まで、図案の現れを待つ。見つかったら、一番相似してるオブジェクトを戻します。
図案が見つからなかったら、nilを戻します。
waitVanish(PS[, seconds]):
設定した時間まで、オブジェクトの消失を待つ。
消失したら、trueを戻す。さもないとfalseを戻す。
dragDrop(PSMRL, PSMRL):
二つの図案を探して、全部が見つかったら、一つ目のオブジェクトを二つ目のオブジェクトの位置にドラッグ&ドロップします。
図案が見つからなかったら、例外(exception)が出る。
dragDropの動作についてのパラメータは次の函数で設定できる。
setDragDropTiming(downMs, upMs)
downMs: 押すから移動するまでの待ち時間(mS)
upMs: 離れるまでの押し続ける時間(mS)
setDragDropStepCount(stepCount)
stepCount: 全部の移動は何回を分けます?
setDragDropStepInterval(intervalMs)
intervalMs: 毎回の移動の間隔時間(mS)
だから、dragDropの動作は
type([PSMRL, ]text):
PSMALパラメータが付いていなければ、直接文字(text)を出します。
PSMALパラメータが付いていたら、必要な探しをして(PS)、指定した位置をタップして、文字を出します。
見つからなかったら、例外(exception)が出ます。
getLastMatch():
最後できたメッチ(match)を戻します。
例外(exception)を出す函数にとって、例外が発生したら、デバッグに役に立つimageファイルは /sdcard/AnkuLua/captured_images に保存します。
findException.png: CompareDimensionに従ってサイズが調節した画面です。
regionException.png: 区域函数が使ったら、サイズの調節した画面の区域も保存します。
上の函数は全てRegionオブジェクトを通じて呼ばれる。
Regionを通じないで、直接にこれらの函数を呼んだら、探す範囲は画面の全部です。
Region或いはMatchを通じて呼んだら、探す範囲は指定した区域だけです。
highlight([text][,seconds]): 指定した区域を設定した時間に強調します。
文字パラメータがなければ、枠しか表示しないです。
強調する形式はsetHighlightStyle (color, fill)で設定します。ここの color はARGB形式の整数。 fill はこの区域を全部埋めるがどうかを指定します。
文字パラメータがあれば、枠の中に表示します。
文字の強調する形式はsetHighlightTextStyle (bgColor, textColor, textSize)で設定します。
bgColor(デフォルト0xf8666666)は背景の色。textColorは文字の色(デフォルト0xf8ffffff)。textSizeは文字のサイズ(デフォルト16)。
時間パラメータがなければ、スイッチのようになります。
1回目函数を呼んだら、枠を表示します。2回目呼んだら、枠を消します。
highlightOff(): 区域強調をオフにします
今指定した区域の強調状況が分からなかったら、この函数で直接に指定した区域の強調をオフにします。
上のスクリプトの実行した結果は
他の函数(Sikuliにない)
AnkuLuaは次の函数も提供します。
waitClick(PSMRL [, seconds]):
waitClick 次のコードを実行します。
existsClick(PSMRL [, seconds]):
existsClick 次のコードを実行します。
findAllNoFindException(PS)
はfindAllと同じ,ただし例外(Exception)を出さないです。
regionFindAllNoFindException(region, PS)
はregionFindAllと同じ、ただし例外を出さないです。
doubleClick(PSMRL)
目標を二回タップします。この函数は直接に呼び出して、或いはRegionオブジェクトで呼び出します。
keyevent(keycode)
特別のキーを出す。
Androidのボタン表を参考してください
swipe(PSMRL, PSMRL)
二つの図案を探して、全部が見つかったら、一つ目のオブジェクトを二つ目のオブジェクトの位置にドラッグ&ドロップします。
図案が見つからなかったら、例外(exception)が出ます。
swipe の動作はdragDrop と似ってるけど、ただし細かく時間のコントロールができないです。
一部分の装置にdrapDropは正確に動けない恐れがあるが、画面を巻くだけしたければ、swipeを使うといいです。
touchDown(PSMRL [,seconds]), touchMove(PSMRL [,seconds]), touchUp(PSMRL [,seconds])
この3つの函数は最も基礎の3つの功能をします
一般の函数 (探し、タップと無関係)
save(fileName)
save() 函数はRegion或いはMatchオブジェクトしか呼び出せないです。
save() 戻り値なし
この函数は区域中の図案をfileNameの名前で imagePath に保存します。
例えば calculator plus
scriptPath()
scriptPath() 函数がスクリプトのpathを戻します。
dofile 或いは require でこのpathを使えます。
getLanguage()
Androidの言語設定を取得します。
複数の言語が支持できます。
getVersion()
AnkuLuaバージョンの文字列が戻ります。
getDeviceID(), getIMEI(), getSIMSerial(), getIMSI(), getWiFiMAC(), getMacAddr()
これらの函数は対応のID文字列を戻す。売れるスクリプトの作ることに役に立ちます。
ご注意: WiFiMACはAndroid 6.0以降いつも02:00:00:00:00:00を戻すので、その代わりにgetMacAddr()を使ってください。でも、6.0前、この2つ函数の戻り値が違います。
typeOf()
Luaのもともと変数形式を判断する函数のtype()はSikuliが画面に文字を入力するために使われてしまうので、
変数形式を判断したければ、typeOf()を代わって使ってください。
或いは、次の方法でtype()をもともとの使い道に戻します
[下一頁]: ユーザーインターフェイス函数
[上一頁]: スクリプト開発入門
[首頁]: AnkuLua紹介
この一部分の函数の使い方は Sikuli と同じです。
この文章はこれらの函数を紹介します。
Slkuli のホームページにこれより多い内容があります。
オブジェクト
図案ファイル文字列(String): 図案ファイル文字列は捜し用の図案のファイルネームです。
位置(Location):
位置は画面にの座標
AnkuLuaの支持する位置函数は getX, getY, grow と offset です。
--sample code
loc = Location(100,200)
print(loc:getX()) -- 100
print(loc:getY()) -- 200
loc2 = loc:offset(11, 22)
print(loc2) -- L(111, 222)
パターン(Pattern):
図案捜すとタップするために、パターンが図案に他の特徴を付けてある。
AnkuLuaの支持するパターン函数はsimilar, targetOffset と getTargetOffset です。
-- modified from example1.lua of calculator plus
-- ========== Settings ================
Settings:setCompareDimension(true, 960)
Settings:setScriptDimension(true, 960)
-- ========== main program ===========
click(Pattern("6.png"))
plus = Pattern("+.png"):similar(0.8) -- set the similarity on "+.png"
click(plus)
nine = Pattern("6.png"):targetOffset(0, -67) -- 9 is above 6 and the distance is 67 pixels in 960x540 screen
click(nine)
print(nine:getTargetOffset()) -- L(0, -67)
click("-.png")
click("7.png")
click("=.png")
區域(Region):
区域は画面にある四角形の範囲です。区域は左上角の座標(x, y)と幅、高さの画素数(w, h)で表す。
支持する函数は getCenter, getTarget, getLastMatch, click, find, exists, wait, findAll, waitVanish, dragDrop, type です。
函数 click, find, exists, wait, findAll, waitVanish, dragDrop, type と save は後で詳しく紹介します。
マッチ(Match):
成功に照合したら、得るオブジェクトはMatchです。このオブジェクトには図案の幅と高さ、そして一番相似してる結果の左上角座標があります。
MatchはRegionの拡張(extension)だから、Matchは全部Regionの函数を支持します。
Matchは次の函数も支持します。
setTargetOffset(Location)
setTargetOffset(int x, int y)
getCenter() 中央のLocationを戻します。
getTarget() 目標のLocationを戻します。
Matchには、もう一つRegionにないパラメータがある。相似度(similar)です。相似度は0~1の数字で、照合した図案はどれぐらい相似することを表します。
getScore()函数は相似度を取得します。
Region函数 (Sikulixと一致)
捜しとタップ函数は、いずれも複数のオブジェクトをパラメータにすることができる。次は全部の使えるオブジェクト、前綴のアルファベットは略語です。
P: Pattern(パラメータ)
S: String(文字列)
M: Match(マッチ)
R: Region(区域)
L: Location(位置)
click(PSMRL):
パラメータはP或いはSの場合: 成功に図案を発見したら、その対応の位置をタップします。
MRL: 対応の位置をタップします。
-- modified from example1.lua of calculator plus
-- ========== Settings ================
Settings:setCompareDimension(true, 960)
Settings:setScriptDimension(true, 960)
-- ========== main program ===========
click(Pattern("6.png"))
plus = Pattern("+.png"):similar(0.8) -- set the similarity on "+.png"
click(plus)
nine = Pattern("6.png"):targetOffset(0, -67) -- 9 is above 6 and the distance is 67 pixels in 960x540 screen
match = find(nine)
click(match)
print(match:getScore()) -- the similarity value of "6.png"
print(match:getTarget()) -- the coordinates of "9.png"
print(match:getCenter()) -- the center of "6.png"
print("match upper left coordinate = (" .. match:getX() .. "," .. match:getY() .. ")")
-- upperleft corner coordinate
click("-.png")
click("7.png")
click(Location(885, 515)) -- "="
find(PS):
図案を捜して、成功に発見したら一番相似してるオブジェクト(match)を戻します。
findAll(PS):
画面に全部相似してる図案を捜して、全ての照合した結果を戻します(match)。
ご注意: findAll(PS)の戻り値はmatchのテーブルを含むけど(table with matches)、region:findAll(PS)の戻り値はJava Listオブジェクトです。.
だから、region:findAll(PS)でmatchの含むテーブルを取得したい場合は、次のプログラムを使ってください。
test1 = findAll("target.png"))
for i, m in ipairs(test1) do
click(m)
end
print (table.getn(test1)) -- print the number of matches
-- 方法一
reg = Region(10, 10, 300, 500)
test2 = listToTable(reg:findAll("target.png"))
for i, m in ipairs(test2) do
click(m)
end
-- 方法二
test3 = regionFindAll(reg, "target.png")
for i, m in ipairs(test3) do
click(m)
end
wait([PS][, seconds]):
設定した時間(seconds)まで、図案の現れを待つ。見つかったら、一番相似してるオブジェクトを戻します。
図案が見つからなかったら、例外(exception)が出ます。
exists(PS[, seconds]):
設定した時間(seconds)まで、図案の現れを待つ。見つかったら、一番相似してるオブジェクトを戻します。
図案が見つからなかったら、nilを戻します。
waitVanish(PS[, seconds]):
設定した時間まで、オブジェクトの消失を待つ。
消失したら、trueを戻す。さもないとfalseを戻す。
dragDrop(PSMRL, PSMRL):
二つの図案を探して、全部が見つかったら、一つ目のオブジェクトを二つ目のオブジェクトの位置にドラッグ&ドロップします。
図案が見つからなかったら、例外(exception)が出る。
dragDropの動作についてのパラメータは次の函数で設定できる。
setDragDropTiming(downMs, upMs)
downMs: 押すから移動するまでの待ち時間(mS)
upMs: 離れるまでの押し続ける時間(mS)
setDragDropStepCount(stepCount)
stepCount: 全部の移動は何回を分けます?
setDragDropStepInterval(intervalMs)
intervalMs: 毎回の移動の間隔時間(mS)
だから、dragDropの動作は
まず、目標をdownMs時間で押して、
stepCount回数を分けて、目的に移動する。毎回の移動の間隔時間はintervalMsです。
目的に到着したら、upMs時間で押し続けた後、離れます。
type([PSMRL, ]text):
PSMALパラメータが付いていなければ、直接文字(text)を出します。
PSMALパラメータが付いていたら、必要な探しをして(PS)、指定した位置をタップして、文字を出します。
見つからなかったら、例外(exception)が出ます。
getLastMatch():
最後できたメッチ(match)を戻します。
例外(exception)を出す函数にとって、例外が発生したら、デバッグに役に立つimageファイルは /sdcard/AnkuLua/captured_images に保存します。
findException.png: CompareDimensionに従ってサイズが調節した画面です。
regionException.png: 区域函数が使ったら、サイズの調節した画面の区域も保存します。
上の函数は全てRegionオブジェクトを通じて呼ばれる。
Regionを通じないで、直接にこれらの函数を呼んだら、探す範囲は画面の全部です。
Region或いはMatchを通じて呼んだら、探す範囲は指定した区域だけです。
highlight([text][,seconds]): 指定した区域を設定した時間に強調します。
文字パラメータがなければ、枠しか表示しないです。
強調する形式はsetHighlightStyle (color, fill)で設定します。ここの color はARGB形式の整数。 fill はこの区域を全部埋めるがどうかを指定します。
文字パラメータがあれば、枠の中に表示します。
文字の強調する形式はsetHighlightTextStyle (bgColor, textColor, textSize)で設定します。
bgColor(デフォルト0xf8666666)は背景の色。textColorは文字の色(デフォルト0xf8ffffff)。textSizeは文字のサイズ(デフォルト16)。
時間パラメータがなければ、スイッチのようになります。
1回目函数を呼んだら、枠を表示します。2回目呼んだら、枠を消します。
highlightOff(): 区域強調をオフにします
今指定した区域の強調状況が分からなかったら、この函数で直接に指定した区域の強調をオフにします。
Settings:setScriptDimension(true, 960)
right = Region(400, 0, 560, 640)
left = Region(0,0, 400, 640)
-- ========== main program ===========
left:highlight("Hello!")
-- 左に灰色に白いHello!を表示します
right:highlight() -- 赤い枠を表示します
click("6.png")
click("+.png")
click("9.png")
setHighlightStyle(0x8fffff00, true)
getLastMatch():highlight(3)
right:highlight() -- 赤い枠を消す
left:highlightOff()
上のスクリプトの実行した結果は
他の函数(Sikuliにない)
AnkuLuaは次の函数も提供します。
waitClick(PSMRL [, seconds]):
waitClick 次のコードを実行します。
wait(PSMRL [,seconds])
click(getLastMatch())
existsClick(PSMRL [, seconds]):
existsClick 次のコードを実行します。
if exists(PSMRL [,seconds]) then click(getLastMatch()) end
findAllNoFindException(PS)
はfindAllと同じ,ただし例外(Exception)を出さないです。
regionFindAllNoFindException(region, PS)
はregionFindAllと同じ、ただし例外を出さないです。
doubleClick(PSMRL)
目標を二回タップします。この函数は直接に呼び出して、或いはRegionオブジェクトで呼び出します。
keyevent(keycode)
特別のキーを出す。
Androidのボタン表を参考してください
keyevent(4) -- back
keyevent(3) -- home
wait(2)
keyevent(187) -- app_switch
swipe(PSMRL, PSMRL)
二つの図案を探して、全部が見つかったら、一つ目のオブジェクトを二つ目のオブジェクトの位置にドラッグ&ドロップします。
図案が見つからなかったら、例外(exception)が出ます。
swipe の動作はdragDrop と似ってるけど、ただし細かく時間のコントロールができないです。
一部分の装置にdrapDropは正確に動けない恐れがあるが、画面を巻くだけしたければ、swipeを使うといいです。
touchDown(PSMRL [,seconds]), touchMove(PSMRL [,seconds]), touchUp(PSMRL [,seconds])
この3つの函数は最も基礎の3つの功能をします
一般の函数 (探し、タップと無関係)
save(fileName)
save() 函数はRegion或いはMatchオブジェクトしか呼び出せないです。
save() 戻り値なし
この函数は区域中の図案をfileNameの名前で imagePath に保存します。
例えば calculator plus
match = waitClick("6.png",2)
match:save("save6.png") -- save the region to save6.png
print(getLastMatch())
click("+.png")
click("9.png")
click("-.png")
click("7.png")
click("save6.png") -- We can now click the saved image
click("=.png")
scriptPath()
scriptPath() 函数がスクリプトのpathを戻します。
dofile 或いは require でこのpathを使えます。
local dir = scriptPath()
print (dir)
package.path = package.path .. ";" .. dir .. '?.lua'
print(package.path)
require(somelib)
dofile(dir .. "script.lua")
getLanguage()
Androidの言語設定を取得します。
複数の言語が支持できます。
function fileExists(name)
local f=io.open(name,"r")
if f~=nil then io.close(f) return true else return false end
end
function loadStrings(path)
local language = getLanguage()
local file = path.."strings."..getLanguage()..".lua";
if (fileExists(file)) then
dofile(file)
else
if (fileExists(path.."strings.lua")) then
dofile(path.."strings.lua")
end
end
end
getVersion()
AnkuLuaバージョンの文字列が戻ります。
getDeviceID(), getIMEI(), getSIMSerial(), getIMSI(), getWiFiMAC(), getMacAddr()
これらの函数は対応のID文字列を戻す。売れるスクリプトの作ることに役に立ちます。
ご注意: WiFiMACはAndroid 6.0以降いつも02:00:00:00:00:00を戻すので、その代わりにgetMacAddr()を使ってください。でも、6.0前、この2つ函数の戻り値が違います。
typeOf()
Luaのもともと変数形式を判断する函数のtype()はSikuliが画面に文字を入力するために使われてしまうので、
変数形式を判断したければ、typeOf()を代わって使ってください。
或いは、次の方法でtype()をもともとの使い道に戻します
inputText = type
type = typeOf
[下一頁]: ユーザーインターフェイス函数
[上一頁]: スクリプト開発入門
[首頁]: AnkuLua紹介