UWSC PROを購入し、のRecIEで簡単な操作を記録して実行すると、

関数:BUSYWAITがありません
●行目:BUSYWAIT(IE)

というエラーが出てスクリプトを実行できないのですが、
検索してもこのようなエラーについての解答が見つからなかったので
質問させて頂きました。

この関数はどこかに格納されていて、CALLで呼び出さないといけないのでしょうか?
それとも、この関数をどこかに作成しないといけないでしょうか?

よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

公式サンプルを見る限りでは、UWSCが内蔵している関数ではなくて、スクリプト内で定義している関数ですね。

サンプルに書かれているのと同じように修正しましょう。

その関数を使っている公式サンプル:
http://www.uwsc.info/sample.html#n34
    • good
    • 0
この回答へのお礼

解答ありがとうございました。

そういうことだったんですね、助かりました!

お礼日時:2011/04/12 20:03

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q(UWSC) 「#32770」の意味わかりますか?

(UWSC)で、他人が作ったプログラムを見ています。

その中で、
GETID("タイトルの名前","#32770")
となっている箇所があります。
この"#32770"の意味がわかる方いらっしゃいますか?

教えてください。

Aベストアンサー

> この"#32770"の意味

ダイアログのクラス名

QUWSCのIE操作でプルダウンを選択する方法

UWSCのIE操作でプルダウンを選択する方法がわからなく、
記録機能を使い試してみたのですがうまくいきませんでした。

どなたか教えていただけないでしょうか。
よろしくお願いします。


IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.visible = true

IE.navigate("http://sportsnavi.yahoo.co.jp/")
waiting(IE)

IELINK(IE,"Jリーグ")
waiting(IE)

IELINK(IE,"日程&結果",2)
waiting(IE)


//ここがうまく行かないところです。記録で出てきたものをそのまま使用
CLKITEM(IE, "第22節", CLK_ACC)


//読み込み待ち
Procedure waiting(IE)
while IE.busy or IE.readyState<>4
Sleep(0.5)
wend
Fend

Aベストアンサー

 CLKITEM(IE, "第22節", CLK_ACC)

 IE.document.getElementsByName("select").item[2].value="index_2nd.html#j22"
 IE.document.getElementsByName("select").item[2].fireEvent("OnChange")
に変更すればいけると思います。

しかし、そもそも
 IE.navigate("http://sportsnavi.yahoo.co.jp/")

 IE.navigate("http://sportsnavi.yahoo.co.jp/soccer/jleague/2012/data/result/index_2nd.html#j22")
に変更すれば目的は達成されるような気がするのですが……
(来年度はたぶん2012が2013になるだけです。)

あと、IEの操作を記録したいのであれば、Pro版を購入してRecIEを使用したほうがいいと思います。

Quwsc webページ内のテキストボックス

みなさんこんばんわ。

uwscを使ってwebページ内の検索などのテキストボックスにカーソルを置きたいのです。
KBDで文字を打ち込めるようにテキストボックスを編集状態にするにはどうすれば教えてください。

具体的には、
私の会社の日報システム(html)で日報を入れる日付テキストボックスがあるのですが、日付のテキストボックスだけvalueで値を入力しても元に戻ってしまうのです。html解析スクリプトで調べると、outerhtmlと書いてあり、何か動的に書き変わるしかけがあるようなのですがよくわかりません。しかたがないのでKBDで日付を入力しています。domというのでしょうか、ie.doc.elements(i).value="yyyy/mm/dd"のようにテキストボックスを指定して直接値を入力できればベストなのですが…

よろしくお願いします。

Aベストアンサー

たびたび大変失礼をしました。
エレメント名を調査する方法が間違いでした。
前に紹介したスクリプトはオブジェクトへのアクセス方法でした。

以下の方法が原始的ですが、フォーム内のエレメント名を調べる方法を推奨します。

そもそも、テキストボックスはフォームの中に存在する訳なので、フォームを指定してあげて、その中のテキストボックスを全て表示すれば良い。

IEのウインドウ内のフォーム総数はIE.document.forms.lengthで求められます。

フォームの中のエレメント総数はIE.document.forms[番号].elements.lengthで求められます。

以下のスクリプトならIEで[番号]に指定されたフォーム番号のエレメント名が全て表示されます。
故に、フォーム番号を0から片っ端から入力して調査すれば、下のスクリプトでいずれ貴殿の探しているテキストボックスのエレメント名が解る筈です。
エラーで止まっても、UWSCに付属している小さなウインドウでエレメント名が出てくるので、これを使えばokです。
先ほど、佐川急便のフォームで試しました。エラーで止まりましたが、ウインドウのなかにエレメント名がばっちり残ってました。
但し、システム上でUWSCのアクセスを弾くなど、エレメント名を隠す加工がなされていれば、無理なのでごめんなさい。
ウインドウ名の入力は、前の答えのウインドウ名を調査するアプリを使って下さい。

//フォーム番号を0~いっぱい順序で入れて数回に分けて片っ端から調査して下さい。
UL1 = input("開いているウィンド名を入力")

IE = GETACTIVEOLEOBJ("InternetExplorer.Application",UL1)//指定したウィンド名のIEを制御
IE.visible=TRUE

REPEAT
SLEEP(0.1)
UNTIL !IE.BUSY AND IE.READYSTATE = 4

FBANGOU = input("要素数を調査したいフォーム番号を入力")

番号 = VAL(FBANGOU)
KOSUU = IE.document.forms[番号].elements.length
MSGBOX(KOSUU)

FOR x = 1 to VAL(KOSUU)
Ifb x > VAL(KOSUU) then
MSGBOX("終了")

EXITEXIT
endif

NAIYOU = IE.document.forms[番号].elements[x].name

print NAIYOU

next



追記:フォーム総数は、以下で求められます。
UL1 = input("開いているウィンド名を入力")
IE = GETACTIVEOLEOBJ("InternetExplorer.Application",UL1)
IE.visible=TRUE
REPEAT
SLEEP(0.1)
UNTIL !IE.BUSY AND IE.READYSTATE = 4
KOSUU = IE.document.forms.length
MSGBOX(KOSUU)


総括:わかりにくかったと思うので、私が実際に行った方法を最後に記します。
(1)調査したいIEのwebアプリの画面を開く。
(2)開いたIEのwebアプリの画面のフォーム総数をスクリプトを使って調べる。
(3)開いたIEのwebアプリの画面内に存在するフォームの数だけ、エレメント名の調査を行う。(例:フォーム数5と出たら5回。念のために0を含めた0から5を入力)
(4)エラーで出ても、めげずにprint関数を使ったUWSCのウインドウでエレメント名を拾う。
(5)エレメント名から法則性を推測する。
(6)法則性を理解したら、ID番号+エレメント名など入力するデータをエクセルで作成する。
(7)IESETDATA関数を使って、直接入力する。
終了です。

たびたび大変失礼をしました。
エレメント名を調査する方法が間違いでした。
前に紹介したスクリプトはオブジェクトへのアクセス方法でした。

以下の方法が原始的ですが、フォーム内のエレメント名を調べる方法を推奨します。

そもそも、テキストボックスはフォームの中に存在する訳なので、フォームを指定してあげて、その中のテキストボックスを全て表示すれば良い。

IEのウインドウ内のフォーム総数はIE.document.forms.lengthで求められます。

フォームの中のエレメント総数はIE.document.forms[番号].ele...続きを読む

QUWSCでテキストファイルを開いて表示したい

UWSCでテキストファイルやExcelファイルを開きたいのですが、
FOPEN関数を使っても、たとえばテキストファイルを開こうと思っても開けません。

これはなぜでしょうか?
すべてのパソコンでダメでした。
OSはXPSP3、7SP1、です。
UWSCのバージョンは最新のバージョン(4.8e1)です。

UWSC.EXEのあるフォルダに、「test01.txt」を作成し、
fid=FOPEN("test01.txt",F_READ or F_WRITE)

と書いても、絶対パスで、

fid=FOPEN("C:\Users\user01\Desktop\uwsc\test01.txt",F_READ or F_WRITE)

と書いても、ダメでした。

その一行しか書いてないのがダメな原因なのでしょうか?

「C:\Users\user01\Desktop\uwsc\test01.txt」は
コマンドプロンプトやファイルを指定して実行、からは開けます。

アンチウィルスソフトは一時的にOFFにしてもだめでした。

OS(XPSP3)を再インストールして、ネットにつながず、
セキュリティソフトなしでやってみてもダメでした。

多分、自分が何か勘違いをしているのだと思いますが、
FOPEN関数は、ファイルを開いて表示するものだと思っていましたが
違うのでしょうか?

Webで検索すると、他のみなさんは開いているようなのですが・・・

ファイルのIDを取得するだけではだめで、ほかの記述も必要ということなのでしょうか?

ゆくゆくはExcelのファイルを普通に開きたいのです。
COMで開くような事例もあったので、それは試してみましたが、
Office2003のセキュリティの「中」設定が無視されて
開いてしまい、Auto_Openマクロも無視されたりで、
使いたくありません。
「中」設定のまま、「マクロを実行させるダイアログ」を
表示してExcelファイルを開きたいのです。

でもその前にということで、テキストファイルを試しにと思ったのですが
テキストファイルすら開けません。


何度かWeb検索しても一向に手がかりがつかめません。

大変すみませんが、どなたがご存知の方がいらっしゃったら、
よろしくご指導くださいませ。

UWSCでテキストファイルやExcelファイルを開きたいのですが、
FOPEN関数を使っても、たとえばテキストファイルを開こうと思っても開けません。

これはなぜでしょうか?
すべてのパソコンでダメでした。
OSはXPSP3、7SP1、です。
UWSCのバージョンは最新のバージョン(4.8e1)です。

UWSC.EXEのあるフォルダに、「test01.txt」を作成し、
fid=FOPEN("test01.txt",F_READ or F_WRITE)

と書いても、絶対パスで、

fid=FOPEN("C:\Users\user01\Desktop\uwsc\test01.txt",F_READ or F_WRITE)

と書いても、ダメでし...続きを読む

Aベストアンサー

fopenはuwscでファイルを開くための命令です。

> fid=FOPEN("test01.txt",F_READ or F_WRITE)

エラー値が返ってないのなら、

fline=FGET(fid, 1)

とかでflineに1行目が取得できるので、

print fline

なんかで表示できるはず。

--
> UWSCでテキストファイルやExcelファイルを開きたいのですが、

メモ帳(notepad.exe)やExcelでファイルを開くためには、例えば、

exec("C:\Windows\notepad.exe test01.txt")

などとして、メモ帳をアプリとして起動し、同時に引数を指定します。

QUWSCでIEが開いているか判定する方法

UWSCでIEを操作しています。

しかし、IEは相手側のネットの環境によって動きが左右される場合があり
時々、IEが閉じてしまいます。

そこで、IEが閉じてしまったらUWSCのプログラムをストップするような処理を作りたいのですが、
そのような命令は存在するのでしょうか?

例えば、 IEが起動していればTRUE、起動していなければFALSEを返すような処理があれば良いのですが、もし知っている方がいましたらアドバイスを頂けるとうれしいです。

よろしくお願いします。

Aベストアンサー

こんにちわ

For i = 0 To GetAllWin() - 1
Ifb Status(ALL_WIN_ID[i], ST_CLASS) = "IEFrame" then
  msgbox("BBBBBBBB") // IEが有るときの処理
  exitexit
endif
Next
msgbox("AAAAAAAA") // IEが無いときの処理
exitexit


WIN XP, IE6での処理なので、動くかどうか試してください。

QUWSCの待機コマンドについて

現在UWSCでソフトのインストール作業を自動化する必要があります。

問題になっているのが、インストールが終了するまで待機する、というコマンドがあるのかないのかが分かりません。

何秒間待機というのは分かるのですが、例えば画面が完全に開くまで待機、とかインストールが完了した時に作業を続行する、などのコマンドが必要です。

どなたかお力をお貸し下さい。ある作業が終了するまで待機するというコマンドです。以上、よろしくお願いいたします。

Aベストアンサー

そういったコマンドは無いです。

が、キチンとウィンドウを識別させていけば同様の処理は可能です。

例1.インストール完了時のウィンドウを取得する
GETID()の第3引数に-1を指定すると、指定したタイトルのウィンドウが見つかるまで待ち状態になります。

// インストールが完了するまで待つ
hogeID = GETID("インストールを完了しました。",,-1)

// 完了のウィンドウで終了のボタンを押す
CLKITEM(hogeID,"終了",CLK_BTN)
以下略


例2.ウインドウのタイトルに変化が無いので、ボタンの文字列から完了を察知し動作させる
事前にウィンドウIDを取得しておくこと。
CLKITEMは処理できなかった場合(下記ケースではボタンが押せなかったり見つからなかった場合)戻り値にFALSE
が返ってきます。

bFlg = 0
// bFlgが1になるまでループ
WHILE bFlg = 1
bFlg = CLKITEM(hogeID,"終了",CLK_BTN)
WEND



簡単な例を2つほど挙げて見ましたが、おそらくこれで解決できるでしょう。

そういったコマンドは無いです。

が、キチンとウィンドウを識別させていけば同様の処理は可能です。

例1.インストール完了時のウィンドウを取得する
GETID()の第3引数に-1を指定すると、指定したタイトルのウィンドウが見つかるまで待ち状態になります。

// インストールが完了するまで待つ
hogeID = GETID("インストールを完了しました。",,-1)

// 完了のウィンドウで終了のボタンを押す
CLKITEM(hogeID,"終了",CLK_BTN)
以下略


例2.ウインドウのタイトルに変化が無いので、ボタンの文字列から完了を察...続きを読む

QUWSC 画像判定と条件分岐について

UWSC 画像判定と条件分岐について質問です

1.画像Aがあるか判定する
2.画像Aがあれば、画像B又は画像Cをクリックする
3.画像Aなければ、sleepで少し秒数を開けてから1からやり直す
以降繰り返し

というプログラムを書きたいのですが、画面上の画像を判定して画像AがあるときだけB,Cをクリック
させる方法がよくわかりません。
加えてBを判定してクリック、Cを判定してクリックというのは
ifb部分を二つ使い別々に扱えば書けるのですが、 elseなど用いて一ブロックのifb-endifでの
表し方もよくわからないので合わせてそちらも教えていただきたいです

御回答よろしくお願いします

Aベストアンサー

> 加えてBを判定してクリック、Cを判定してクリックというのは

それは、画像BとCがどちらも存在するので両方ともクリックしておくと言うことか、それともBがなければCをクリックするのか、どっちでしょう?前者の場合はELSEは使わない(って言うか使えない)ので、IFを二つ並べるしか方法はないです。なぜなら、IFB~ELSE~ENDIFの形にすると、最初のIFBの条件を満たした場合はELSE以下は実行されず、ENDIFに抜けてしまいます。

と言うことを踏まえて書くと、次のような感じでしょうか。

While True
  Ifb ChkImg("画像A")
    Sleep(適当な待ち時間を入れる。待つ必要がなければこのSleep自体が不要)
    Ifb ChkImg("画像B")
      //画像Bをクリック。ただし見つけた座標より若干内側にしないと空振りの
      //危険があるので、+2している。この値は適当に調整のこと
      Btn(Left,Click,G_IMG_X+2,G_IMG_Y+2,20)
      //この後続けて画像Cもチェックしたい場合は、次のContinueを消す
      Continue
    EndIf
    If ChkImg("画像C") Then Btn(Left,Click,G_IMG_X+2,G_IMG_Y+2,20)
  EndIf
  Sleep(適当な待ち時間を入れる。)
Wend

ちなみにIFB~ELSE~ENDIFの書き方は、特に悩むことはなくて…

Ifb 条件
  条件成立時の処理
Else
  条件不成立時の処理
EndIf

の形になります。Elseの後でさらに条件判定をしたければ、ElseIfとするか、あるいはElseの下にさらにIfあるいはIfbを書きます。次のような感じで。

Ifb 条件A
  条件A成立時の処理
Else
  Ifb 条件A不成立時のさらなる条件B
    条件B成立時の処理
  EndIf
EndIf

> 加えてBを判定してクリック、Cを判定してクリックというのは

それは、画像BとCがどちらも存在するので両方ともクリックしておくと言うことか、それともBがなければCをクリックするのか、どっちでしょう?前者の場合はELSEは使わない(って言うか使えない)ので、IFを二つ並べるしか方法はないです。なぜなら、IFB~ELSE~ENDIFの形にすると、最初のIFBの条件を満たした場合はELSE以下は実行されず、ENDIFに抜けてしまいます。

と言うことを踏まえて書くと、次のような感じでしょうか。

While True
  Ifb Ch...続きを読む

QUWSCを使用して、ドロップダウンリストを操作

お世話になります。

UWSCにてマクロを作成していますが、ドロップダウンリストを選択して操作する事ができずに、
止まってしまっています。

現在は、画像認識で選択し、マクロ上のKBの操作で選択する形を取ってますが、毎回マウスポインターが移動してしまい、マクロを動かしていると他の事ができません。

UWSCのマクロで、指定したリスト上の値を選択する事可能でしょうか

例)マクロ上で自動でリストから「いいい」を選択して、決定ボタン押下するなど。

===
対象ページの記述は下記の様な形です
2つリストがあり、それぞれに決定ボタンがあります。

<td class="b2"align="center">

<select name=mode>
<option value="aaa">あああ
<option value="bbb">いいい
<option value="ccc">ううう
<option value="ddd">えええ
<option value="eee">おおお
</select>
</td>
<td class="b2"align="center"><input type="submit"style="background-color:#9370DB;color:#FFFFFF;border:2 solid BFEFFF" value="決定"></td>

<select name=mode>
<option value="aaa">かかか
<option value="bbb">ききき
<option value="ccc">くく
<option value="ddd">けけ
<option value="eee">こここ
</select>
</td>
<td class="b2"align="center"><input type="submit"style="background-color:#9370DB;color:#FFFFFF;border:2 solid BFEFFF" value="決定"></td>

お世話になります。

UWSCにてマクロを作成していますが、ドロップダウンリストを選択して操作する事ができずに、
止まってしまっています。

現在は、画像認識で選択し、マクロ上のKBの操作で選択する形を取ってますが、毎回マウスポインターが移動してしまい、マクロを動かしていると他の事ができません。

UWSCのマクロで、指定したリスト上の値を選択する事可能でしょうか

例)マクロ上で自動でリストから「いいい」を選択して、決定ボタン押下するなど。

===
対象ページの記述は下記の様な形です
2つリス...続きを読む

Aベストアンサー

IESetDataを使うと良いかもしれません。

IESetData(IE,"bbb","mode")
IESETDATA(IE, True, "決定")

とかすれば、いけるかも。

http://e-dcz.com/~uwsc/iesetdata.htm
http://www.uwsc.info/sample.html#n33

有料版使えばIE用記録ツールがあるので便利。
http://www.uwsc.info/download.html

QUWSCの基本的な文字列操作

該当命令が、見つからず困っております。
9桁の文字列を先頭から、3桁ずつに分割したいのですが
お解かりになる方教えていただけませんでしょうか?

例、
DATA="123456789"
処理後
A="123"
b="456"
c="789"

Aベストアンサー

ヘルプより引用

----------
// 文字列コピー
戻値 = COPY( 文字列, 開始位置, コピー文字数 )
引数
  文字列: コピー元の文字列
  開始位置: コピーすべき文字列の開始位置 (1から)
  コピー文字数: コピーすべき文字数
戻値
  結果の文字列
----------

Q(UWSC)エクセルのセルの値を読み込むには?

UWSCで、エクセルのセルの値を読みこむ方法について
悩んでおります。

Excel = GETACTIVEOLEOBJ("Excel.Application");
val1 = Excel.ActiveSheet.range("A1").value;
を使えば、開いているエクセルのA1セルにある値を
「val1」に読み込むことができました。

今、A1~A100にある100個のリストを順々に読み込むことを
考えています。おそらくfor文を使って、以下のようにするのかな?
と思っております。
for i=1 to 100
val=○○
next
A1~A100の値を順々に読み込むにはどのようにすればいいのでしょうか?

Aベストアンサー

Pro版だったらループなんてしなくても、XLGETDATA関数を使えば一発で配列変数に取り込めます。(UWSCのヘルプにサンプルコードがあります)

Pro版ではない通常UWSCだと、以下の処理で一個ずつ値を引っ張ってくるしかないでしょう。

1)F2キーを押す
2)Shift+Homeを押す
3)Ctrl+Cを押す
4)クリップボードから値を変数に読み込む(GETSTR関数を使用)
5)Enterを押す

という一連の処理を100回繰り返すわけです。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング