プロが教えるわが家の防犯対策術!

私が書いたスクリプトを実行して、「○行目にIFENDがない」みたいなことをuwscに何回か言われまして治していくと「SyntaxError 15行目:RETURN」が出てきました。調べてみると文の書き方に問題があるみたいなんですが、なにが問題なんかわかりません。よかったら修正していただけないでしょうか?
現在のスクリプトはこれです。

ACW(GETID("Genymotion for personal use - Google Nexus 7 - 4.3 (800x1280, 213dpi) - 192.168.56.101","QWidget"),522,121,438,676,0)
IFB CHKIMG("A.bmp") // 認識させたい画像ファイルを指定する
ENDIF
Function CheckColorScope(PosX, PosY, Element, BaseValue, Scope)
// 指定された色要素の値を取得
Select Element
Case "R"
ElementValue = PeekColor(PosX, PosY) And $FF;
Case "G"
ElementValue = (PeekColor(PosX, PosY) And $FF00) / $100;
Case "B"
ElementValue = (PeekColor(PosX, PosY) And $FF0000) / $10000;
Default
Result = False; Return ;
SelEnd
FEND
// 色要素の値が、指定範囲内であれば True を返す
Ifb (ElementValue >= BaseValue - Scope) And (ElementValue <= BaseValue + Scope) Then
Result = True;
Else
Result = False;
// 画像認識に成功した場合の処理をここに書く
MMV(G_IMG_X, G_IMG_Y)
BTN(LEFT,CLICK)
ELSE
// 画像認識に失敗した場合の処理をここに書く
MSGBOX("画像認識に失敗しました。")
ENDIF

「uwscでスクリプトを修正していただけな」の質問画像

A 回答 (12件中11~12件)

>SAVEIMGの座標変えて検出をためしてみたら「True」がでてきました。


このとき保存された(使用した)画像は あなたが希望した
メールアイコン?のイメージになっているということでいいですか? ーーーー 条件1

>ですが、一番最初の質問でした、~~~~ 画像認識に失敗しました。とでてきます。
このとき使った画像も条件1で作成した保存画像をそのまま使ったということでいいですか? --- 条件2

上記の条件1・2が両方 YES という事なのであれば
何かの条件(例えば一定時間毎とかgenymotion起動毎とかウインドウの切り替え毎とか)で
画面上の アイコンの画像が変化しているということになります
  このことは一番最初の質問でNo2の回答に(未検出になる2つの可能性の一つとして)すでに書かれていることです

  条件1の段階でFALSEにならないのはSAVEIMG後 時間を置かずにCHKIMGを行っているため
  その間での変化がないというだけでしょう
  試しに その間に SLEEPで適当に時間を入れると結果が FALSEに変化するようになるはずです
  (この変化は人間が画面見てるだけではっきりと識別できるほどの違いがないと思われます)

そしてそれがどのように変化しているのかをきちんと調べなければ
検出画像の色幅を持たせれば検出できるという話なのか
部分的に変化するため色幅持たせても検出できないのか  の正確な判断はできません
   (基本的にはバイナリエディタ使って各画像を比較してどこが変わっているのかを確認する)
      細かく調べるためには BMPのファイル構造を理解してる必要がありますが
      単純に比較するだけなら誰でも可能

自分で調べられないのであれば SAVEIMAGをSLEEPを数回繰り返して保存したファイルを
すべてZIPなどにまとめてどこかWEB上に保存して
そのURLをここに記載してもらえれば此方でその画像をダウンロードして確認して調べることも可能ですし
私もVirtulaBoxなどの仮想環境自体は使っているので最悪同様の環境を構築して此方で単独で試すことも可能です
(genymotion入手でユーザ登録必須なようなので現状ではそこまでやろうとは思ってません)

条件1・2を確認していない上で  どうしてでしょうか?  と言ってるなら話が堂々巡りになります
(そのうち付き合いきれなくなるのが目に見えます)
※  進展が見える質問の繰り返しなら付き合えますが堂々巡りには付き合えないってだけの話です
   ただし都度別質問にされると見落としたりするのでそこで対応が終わる可能性はあります
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
適当な座標に書き換え、そこにメールアイコンが来るようにgenymotionを持ってきました。
それで、余分なところはペイントでトリミングしました。画像形式はBMPです。
なので条件1は満たしていることになります。
条件1でトリミングした画像を使っているので、条件2もクリアしています。

SLEEP (3) を入れて実行しても「True」とでてきます。なので画面は変化していないとおもいます。

新しいことが分かったので、また新たに質問さしていただきます。
もしよければ、また解凍していただけると嬉しいです。

お礼日時:2015/07/20 17:01

まずFunction(関数) を メインプログラムの途中に書いちゃダメ


メインプログラム中から CheckColorScope をコール
メイン部分を全部書いた後に
Function や PROCEDURE 等の関数を書くのが基本

それを直したとしても CheckColorScope やってることや引数の関係がめちゃくちゃだから
一筋縄では動かないそしてそれを今のコードから第3者が想像して修正することは非常に困難

色幅持たせるのが目的だと思いますが大まかな色幅でいいのであれば
自分で関数作るより CHKIMGのパラメータで調整したほうが楽

それ以前に色幅持たせると解決する話なのか?  てのがいまだに疑問
(あなたがやろうとしてる内容で色幅設定が必要だとは思えませんがそこは順を追って確認しないとわからない)
    先の質問で回答したSAVEIMGの座標変えて検出は出来たのか
      ->  できたのであれば色幅持たせる必要なし  (比較もとで使っていた画像が悪かっただけ)
      ー>  できなかったのであれば画像がどこか変化している
              この場合どこがどう変化しているか調べないと
              色幅持たせればすむ話なのか
              それでは済まない話なのかの判断もできません

まずは簡単な最初のコードを動かすように(動きを確認)するのが先では?
このままやると都度質問連発することになりますよ
    • good
    • 0
この回答へのお礼

なんども回答ありがとうございます。本当に助かってます。
SAVEIMGの座標変えて検出をためしてみたら「True」がでてきました。
ということは、画像が悪かっただけということになりました。
ですが、一番最初の質問でした、
ACW(GETID("Genymotion for personal use - Google Nexus 7 - 4.3 (800x1280, 213dpi) - 192.168.56.101","QWidget"),522,121,438,676,0)
IFB CHKIMG("A.bmp") // 認識させたい画像ファイルを指定する
// 画像認識に成功した場合の処理をここに書く
MMV(G_IMG_X, G_IMG_Y)
BTN(LEFT,CLICK)
ELSE
// 画像認識に失敗した場合の処理をここに書く
MSGBOX("画像認識に失敗しました。")
ENDIF
これを実行すると 画像認識に失敗しました。とでてきます。
どうしてでしょうか?genymotionというwindowには認識できてないのでしょうか?
ほんとに質問ばかりですみません。

お礼日時:2015/07/19 23:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!