• 締切済み

UWSCのプログラミングついて教えてください。

UWSCについてです。 私は、UWSCをまだ1週間ほどしか触っていない超初心者です。 下記のようなプログラミングを組みたいと思っているので、プログラミング初挑戦なので右も左も良く分かっていません。 UWSCのプログラミングに詳しい方助けてください。 私の組みたいプログラミングは ("A.BMP",0)を無制限ループしつつ、("B.BMP",0)は2時間おきにループしつつ、("C.BMP",0)を30分間に30回実行する 場合のプログラミングです。【3つ同時進行です。】 宜しくお願いします。 while True ifb CHKIMG("A.BMP",0) x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入 BTN(LEFT, CLICK, x, y, 80) endif ifb CHKIMG("B.BMP",0) x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入 BTN(LEFT, CLICK, x, y, 80) endif ifb CHKIMG("C.BMP",0) x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入 BTN(LEFT, CLICK, x, y, 80) endif wend

みんなの回答

  • mindatg
  • ベストアンサー率48% (110/227)
回答No.3

Aの処理回数が非常に多く、取りこぼしを防ぐ(BやCを処理中にAを見逃すようなケース) タイマーやらを使うのも別にいいんですが、ループ中に無駄にIf文を通過します。 無駄に通過する=重い で余計に判定や処理しそこなう可能性が高いです。 なのでthreadを使う。 Aのチェックが0.1秒毎でもこれならそんな重くは無いです。 さらに  「CHKIMGで画面全体から画像を探す」という状態を  「指定した範囲内で画像を探す」ように変更すればもっと軽くなります。 また、下記サンプルではBTN関数でCLICKからDOWN、UPに変更しています。 おそらくブラウザゲーのマクロなんでしょう、Clickだとミスする確率が非常に高いです Thread スレッド用処理("A.BMP",5) Thread スレッド用処理("B.BMP",7200) Thread スレッド用処理("C.BMP",1800) WHILE 1  SLEEP (1) WEND // 引数:画像ファイル,処理タイミング(秒) procedure スレッド用処理(画像,rest)  // 無限ループ  while 1   ifb CHKIMG(画像,0) then    //x=G_IMG_X // 画像の座標をxへ代入    //y=G_IMG_Y // 画像の座標をyへ代入    //BTN(LEFT, CLICK, x, y, 80)    // スマートにしておく    BTN(LEFT, DOWN, G_IMG_X, G_IMG_Y, 10)    BTN(LEFT, UP, G_IMG_X, G_IMG_Y, 10)    // 動作確認    print 画像+"が見つかりました"   endif   // 次のインターバルまで放置   Sleep(rest)  wend fend

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

> ("A.BMP",0)を無制限ループしつつ、 無制限として、どれくらいの間隔ででしょう? 1分に1回程度でよいのか?1秒間に100回も1000回も処理する必要があるのか? > 【3つ同時進行です。】 UWSCを実行開始した際に、ABCの処理を行なうのか?BやCは処理開始から30分後、2時間後とかでよいのか? -- 現在時刻を取得するGetTime()関数使ってタイマー作るのが良いと思います。 上の条件で、Aは10秒おき、BCはすぐに実行しないって事なら、 // 実行予定時刻 timerA = GetTime() // 今でしょ! timerB = GetTime() + 30*60 // 今から30分後 timerC = GetTime() + 2*60*60 // 今から2時間後 While True // 無限ループ  if timerA <= GetTime() then // タイマーAの時刻になってる?   // Aの処理   ifb CHKIMG("A.BMP",0)    x=G_IMG_X // 画像の座標をxへ代入    y=G_IMG_Y // 画像の座標をyへ代入    BTN(LEFT, CLICK, x, y, 80)   endif   timerA = GetTime() + 10 // 次回実行は10秒後  endif  if timerB <= GetTime() then // タイマーBの時刻になってる?   // Bの処理   ~   timerB = GetTime() + 30*60 // 次回実行は30分後  endif  if timerC <= GetTime() then // タイマーCの時刻になってる?   // Cの処理   ~   timerC = GetTime() + 2*60*60 // 次回実行は2時間後  endif  Sleep(1) // 1秒休憩 Wend とか。

  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.1

私もそれほど詳しくはありませんが GETTIME()関数で時間判定できるのでそれを使って実装可能です 雑に書けば I = GETTIME() WHILE TRUE   A.BMP処理   IF (((GETTIME()ーI) MOD (2×60×60))= 0)     B.BMP処理   ENDIF   IF (((GETTIME()ーI) MOD 60)= 0)     C.BMP処理   ENDIF WEND みたいな感じ

関連するQ&A

  • UWSCの画像認識について

    質問させていただきます ifb CHKIMG("画像.bmp",) BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) endif これを複数の画像でやりたいときは ifb CHKIMG("画像.bmp",) BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) endif ifb CHKIMG("画像.bmp",) BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) endif のようにしないとだめなのでしょうか? それとも ifb CHKIMG("画像.bmp",) CHKIMG("画像.bmp",) CHKIMG("画像.bmp",) CHKIMG("画像.bmp",) BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y) endif こんな感じにまとめる事はできるのでしょうか? 例として教えてもらえると助かります。 よろしくお願いします

  • uwscについて

    画像認識で質問があります。 画像Aがあった場合画像Aをクリックするのは出来るのですが 画像Aがあった場合画像Bをクリックする場合どのようにすればいいのでしょうか? IFB (CHKIMG("A.bmp")=TRUE) THEN SLEEP(0.3) //B、C出現までの間を調整 IFB (CHKIMG("B.bmp")=TRUE) THEN BTN(LEFT, CLICK, G_IMG_X, G_IMG_y) ELSEIF (CHKIMG("C.bmp")=TRUE) THEN BTN(LEFT, CLICK, G_IMG_X, G_IMG_y) ENDIF しらべてこのとおりやってみたら 最初のIFBに対してENDIFがないと言われてうまくいきません ちょっと調べたのですが分からなかったので助けてください

  • UWSCについて

    画像がAになったらその画像をクリックしてBに変わったらまたクリックするというのを作りたいのですがどうにもA画像の時にクリックが連打になってしまします どこが悪いのでしょうか? While True Ifb ChkImg("A.bmp",0) BTN(LEFT,CLICK,G_IMG_X+5,G_IMG_Y+5,80) ChkImg("B.bmp",0) BTN(LEFT,CLICK,G_IMG_X+5,G_IMG_Y+5,80) ENDIF WEND

  • UWSCのスクリプトについて

    画像Dを認識したら画面上に画像Bがあっても 処理Bを実行しない為にはどうしたら良いでしょうか。 -------- while True BTN(LEFT,click,150,10,110)   //処理A Sleep(2) ifb CHKIMG("A.bmp")    x=G_IMG_X            y=G_IMG_Y BTN(left,click,x,y,110) Sleep(1.5) endif Ifb ChkImg("B.bmp")       //処理B BTN(LEFT,click,1120,90,110) Sleep(1) KBD(VK_return,DOWN,30) endif ifb CHKIMG("C.bmp")      //処理C x=G_IMG_X            y=G_IMG_Y BTN(left,click,x,y,110) Sleep(1.5) wend --------

  • UWSCの画像認識について

    プログラム初心者ですがUWSCでプログラムを作っています 画像認識において認識するべき画像が複数種類あるときのパターンができなくて困っています ifb CHKIMG("青空") x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入 BTN(LEFT,CLICK,x,y,100) SLEEP(0.5) else Endif のように、単独の画像を認識し、その画像をクリックさせることはできるのですが 「青空」もしくは「夕空」もしくは「夜空」が出た時にその画像をクリックする のような命令をかくことができません ifb CHKIMG("青空" or "夕空" or"夜空") のような形でかければいいのですが、もちろんこれでは動きませんでした どうすればこれを実行できるようになるのか教えてくださいm(__)m

  • UWSCで指定箇所のみループ

    UWSCで指定した箇所へ戻ってループさせたいのですが、やり方がわかりません。 上手く説明ができないのですが… 例えば… while True Z地点 //Aの画像があればクリックしてX地点へ ifb CHKIMG("画像A") x=G_IMG_X y=G_IMG_Y BTN(LEFT, CLICK, x, y, 300) endif X地点 //Bの画像があればクリック、無ければZ地点へ戻る ifb CHKIMG("画像B") x=G_IMG_X y=G_IMG_Y BTN(LEFT, CLICK, x, y, 300) endif wend という感じで…、状況によってプログラムの指定した行へ移動させたいのですが どうすれば良いのでしょうか? 上手く説明できなくてすみませんが、教えてください。 よろしくお願いします。

  • UWSCを使って画像リンクをクリックするとき???

    UWSCを使って画像リンクをクリックするとき??? 先日UWSCをダウンロードし、画像リンクを自動でクリックするスクリプトを作りました。 インターネット上で、商品を選んで「予約購入する」という画像リンクをクリックしたいのですが Ifb CHKIMG("予約購入する.bmp") = TRUE THEN   BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y) Endif のように作っても全く動きません。 UWSC40ファイルの中に予約購入する.bmpを保存してます。 うーん一体どうして?昨日から調べているけど全くわかりません。 回答よろしくお願い致します。

  • UWSCのスクリプトについて

    日々のルーチンワークで退屈な作業をPC様にやっていただこうとUWSCの学習をしています。 以前は記録して使用したのですが不定期にマウス座標が変わるようになったため.UWSを書いてみてます。ど素人ですがやっと画像をファイルに格納して作業ができるまでになりました。 使用環境はwin7です。 質問内容ですが手間が多いのと説明がへたなのでプログラムより質問内容が理解できないほうが心配です。出来るだけ分っていただけるように頑張りますのでご教授お願いします。 画像A 画像B 画像C 以上がWEBブラウザ上に表示されたときに以下の作業をします。 オーダーフォームの利用規約同意[ボタン]、確認画像[ボタン]、購入画像[ボタン]を押下する。 どれが表示されてもオーダーフォームの作業が発生します。 ほかの質問で以下のような回答があったので参考にしたのですが繰り返し探してはくれるのですが オーダーフォームの作業を書くことができません。。 ≪転記≫ WHILE (TRUE) //WENDまで無限ループ IFB (CHKIMG("A.bmp")=TRUE) THEN CHKIMG("1.bmp") //「1」画像の座標を調べる BTN(LEFT, G_IMG_X, G_IMG_Y) ELSE IFB (CHKIMG("B.bmp")=TRUE) THEN CHKIMG("2.bmp") //「2」画像の座標を調べる BTN(LEFT, G_IMG_X, G_IMG_Y) ELSE ・・・以下略・・・ ENDIF WEND 自分でも頑張ってみますがご教授頂けると幸いです。 よろしくおねがいいたします。

  • UWSCでPEEKCOLORを使い指定ウィンドウ内に、指定したカラーコ

    UWSCでPEEKCOLORを使い指定ウィンドウ内に、指定したカラーコードがあるかを判別して そこをクリックさせたいのですが、画像認識の場合 ACW(GETID("xxxxx"),880,0,800,600,0) CHKIMG("xxxx.bmp",0) x=G_IMG_X // 画像の座標をxへ代入 y=G_IMG_Y // 画像の座標をyへ代入 BTN(LEFT, CLICK, x+30, y-30, 60) x=G_IMG_X という命令で指定ウィンドウ内の画像を(x,y)座標に自動で代入してもらえるのですが、PEEKCOLORの場合はどういった書き方をすればいいのでしょうか?? 上手く言いたいことが伝わっているか不安ですが、理解できる方宜しくお願いします。

  • UWSCの指定画像チェック

    UWSCを利用して、画面内に指定画像があるか無いかチェックし、あればクリックしたりするスクリプト文を作成したいのですが・・・、うまくいきません; 詳しい方、どうか回答お願いしますm(_ _)m 自分の作ったスクリプト文は下記のとおりです。 ""のところの「A」はフォルダ名で、「neko.bmp」が画像ファイル名です。   IFB CHKIMG(".\A\neko.bmp")     MMV(G_IMG_X,G_IMG_Y)     KBD(VK_CTRL,DOWN)     BTN(LEFT,DOWN,G_IMG_X,G_IMG_Y)     KBD(VK_CTRL,UP)     BTN(LEFT,UP,G_IMG_X,G_IMG_Y)   ENDIF 上記のスクリプト文でUWSCを実行させると、なぜか「エラー NOT Found".\A\neko.bmp"」と出てき、実行してくれません。 画像の問題ではあると思うのですが、ちゃんとuws形式で保存されてますし、画像の方もbmp形式になってるので・・・どこか悪いのかと、思い当たるふしがありません。 悪いところや指摘がございましたらどうか教えてくださいm(_ _)m また、スクリプト文を作れる方がいましたら作成を頼めませんでしょうか。。。 私の希望する、UWSCの実行は下記のとおりです。また、"neko"は画像ファイル名のことです。 "neko"が画面内にあるか無いかチェックし、もしあれば、Ctrlキーを押したまま、"neko"が見つかった座標に左クリック。 この繰り返し。