UWSCからfirefoxやchromeを操作するための準備をしています。今回は、URLを開いた後のブラウザが読み込み完了かどうかを調べる関数を作りました。
○firefoxやchromeを制御する関数群(準備四)
読込完了を制限時間付きで待つ関数
ポク太郎です。
UWSCでfirefoxやchromeの操作をしようとしています。今回、URLを開いた後のブラウザが読み込み完了かどうかを調べる関数関数を作りました。
誤解を招いてはいけないので、こちら↓。
UWSCから操作しやすいのはIEやSleipnirですが、そんなの使いたくありません。UWSCでわざわざfirefoxやchromeを操作するのはよい選択肢とは思えませんが、敢えてイバラの道を進んでみます…。
【ご注意】今後、うまく行かず粉砕されるかもしれません。参考程度にどうぞ。
※1 以前からの記事の自作関数等が前提になっておりますので、意味不明な関数が出てきたらこちらを参照して下さい。
ほぼ粉砕されました
何度も書いているとおり、UWSCで作成するプログラムは非同期の部分が主です。“PCが指定の動作を完了した”←このタイミングを必ず掴まないといけないのですが、上述のように読み込み完了タイミングが掴めません。
そこで苦肉の策。画像検索です。
![]() | ![]() 切り出した画像 |
![]() | ![]() 切り出した画像 |
ブラウザ上部の「X」となっている中止ボタンの画像(赤矢印)を取得します。読み込み中でないとリロードボタン(まるまった矢印)に替わってしまいますので、素早く採取します。必要部分を切り出し、UWSCのソースファイルのある場所に「bmp」というフォルダを作って入れます。
この方法となった瞬間、
○各PC個別に検索用画像データを採取しなければいけない。
(各PC個別のグラフィックカードが好き勝手にγカーブをかけて表示しているので大抵は別画像と判定されてしまう。)
が確定してしまいます。また、ブラウザのバージョンアップにより中止ボタン画像が変更される可能性も大です。あーあ。
この部分だけ誰か親切な人が教えてくれることに期待して、すぐに入れ替えられるよう関数として作成しておきます。
(追記)こちらで若干改良しております。
読込完了したかどうかを判定する関数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | FUNCTION b_rcomp() bprep() SELECT brwz CASE “firefox“ p_stop=“bmp/stop_firefox.bmp“ CASE “chrome“ p_stop=“bmp/stop_chrome.bmp“ DEFAULT // とりあえず何もしない SELEND IF CHKIMG(p_stop,,SX1,SY1,SX2,SY2,,IMG_MSK_BGR4) r=0 ELSE r=1 ENDIF RESULT=r FEND |
1,17 行目 | 1 17 | FUNCTION b_rcomp() FEND |
b_rcomp()関数宣言:ブラウザが読み込み中かどうかを判定する関数 読み込み中の場合は0を返し、読み込み完了していたら1を返す。 | ||
2 行目 | 2 | bprep() |
bprep()はこちらの記事([UWSC]firefoxやchromeを操作できるか試してみる関数)で作成した、ブラウザに準備をさせる関数。 | ||
3~10 行目 | 3 4 5 6 7 8 9 10 | SELECT brwz CASE “firefox“ p_stop=“bmp/stop_firefox.bmp“ CASE “chrome“ p_stop=“bmp/stop_chrome.bmp“ DEFAULT // とりあえず何もしない SELEND |
条件分岐:ブラウザ種類によって読み込む画像ファイルを変更します。 このコードはソースファイルと同じ位置にある「bmp」フォルダ中に画像を入れた場合のものです。 | ||
11~16 行目 | 11 12 13 14 15 16 | IF CHKIMG(p_stop,,SX1,SY1,SX2,SY2,,IMG_MSK_BGR4) r=0 ELSE r=1 ENDIF RESULT=r |
条件分岐:画像が見つかったかどうかを判定。 ○⇒:変数rを0とし、関数の戻り値として返す ×⇒:変数rを1とし、関数の戻り値として返す ※画像の検索範囲にSX1、SY1、SX2、SY2とあるのは、こちら([UWSC]よく使う記号をグローバル宣言) で作成した自作関数からのもの。検索範囲が画面全体でよければ、「SX1、SY1、SX2、SY2」→「0、0、G_SCREEN_W、G_SCREEN_H」に変更してください。 |
読込完了を制限時間付きで待つ関数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | FUNCTION wait_ready(sec) st=GETTIME() mt=0 IF b_rcomp()=1 SLEEP(0.3) ENDIF WHILE (b_rcomp()=0 and mt<sec) mt=GETTIME()–st disp(“読込待ち(“+mt+“秒)“,“blue“) SLEEP(0.2) WEND disp(““,“blue“) RESULT=1 FEND |
1,14 行目 | 1 14 | FUNCTION wait_ready(sec) FEND |
wait_ready(sec)関数宣言:ブラウザの読み込み完了を待つ関数。(制限時間付き) 引数sec:秒数を指定し、最大sec秒待つ仕様とする。 | ||
2,3 行目 | 2 3 | st=GETTIME() mt=0 |
変数の初期化。 変数st:開始した時刻を記憶 変数mt:経過時間記憶に使用 | ||
4~6 行目 | 4 5 6 | IF b_rcomp()=1 SLEEP(0.3) ENDIF |
この関数が呼ばれた瞬間に、上の関数b_rcomp()=1(←0ではなく1。間違えてました。2017年7月18日修正)の場合、0.3秒の休止期間を入れる(ブラウザの中止ボタンが、読み込み開始の瞬間から若干遅れて表示されるため)。無駄な時間ですが仕方なし。この待ち時間の後、7行目から判定を行います。 | ||
7~12 行目 | 7 8 9 10 11 12 | WHILE (b_rcomp()=0 and mt<sec) mt=GETTIME()–st disp(“読込待ち(“+mt+“秒)“,“blue“) SLEEP(0.2) WEND disp(““,“blue“) |
ループ文:ループする条件は「上の関数b_rcomp()=0、かつ、指定された秒数が経過していない」 条件が満たされる間、「読込待ち(何秒)」と吹き出しに表示されていきます。 ループを抜けたら、吹き出しを消します。 ※ | ||
13 行目 | 13 | RESULT=1 |
関数の戻り値として1を返します。 |
○firefoxやchromeを制御する関数群(準備四)
読込完了を制限時間付きで待つ関数
コメント