GETFORMDATA
戻値 = GETFORMDATA( Name, [Value])
selectタグにて表示文字ではなく Value値を取得したい場合には FOM_GETVALUE を指定する
取得の値
(押されたSubmit属性のボタンが指定された場合は一度だけ TRUE(1)を返す)
フォームを使って入力支援をする
sample11のようなWEBフォーム画面へ、
UWSCのフォーム画面(図1)を利用して入力していくスクリプトを作成します。

考え方は、
↓
UWSCフォーム画面から値を取得
↓
ページ指定して、その値を入力する
となります。
スクリプト
// OKBtn ボタンが押されたら各入力値を取得する ifb CREATEFORM("GETFORMDATA_SCRIPT.html", "GETFORMDATA_SCRIPT", False,, 300, 300, 600, 400) = "OKBtn" FRUITS = GETFORMDATA("Text1") ANIMAL = GETFORMDATA("Radio1") SPORTS = GETFORMDATA("Radio2") AGE = GETFORMDATA("Select1") else print "キャンセル" endif IE = CreateOLEObj("InternetExplorer.Application") IE.Visible = True IE.Navigate("http://canal22.org/sample11/") BusyWait(IE) IESetData(IE,FRUITS,"fruits") IESetData(IE,ANIMAL,"animal") IESetData(IE,SPORTS,"sports") IESetData(IE,AGE,"age") print "入力が完了しました" //------ Procedure BusyWait(ie) repeat Sleep(0.2) until (! ie.busy) and (ie.readyState=4) Fend
解説
実際に動かした結果は、
下のように(図2)値が入力されるかと思います。

入力支援に特化するなら、
テキスト入力欄は不要ですが、サンプルになると思い使用しました。
このように入力する項目が限定されている場合などは、
非常に重宝するかと思います。
また、今回は取得データを変数へ格納して、
入力データとして利用しましたが、
取得データをテキストに残すこともスクリプト次第で可能なので、
色々試すとUWSCで出来ることが増えるかと思います。
タグ
2012年8月25日 | コメントは受け付けていません。 |
カテゴリー:関数一覧
組込み定数
組み込み定数
宣言は不要
FALSE・・・False、0も同義
NULL・・・ヌルポインタ
EMPTY・・・値の無い状態を示す
NOTHING・・・オブジェクトの無い状態を示す
定数のため変更はできず、かつ宣言済
上記の定数は
既に宣言されているため、再宣言や変更はできません。
スクリプトを書く際にも、上記の定数は表記するだけで、
決まった値を取得できます。
PRINT TRUE //True、1も同義 PRINT FALSE //False、0も同義 PRINT NULL //ヌルポインタ PRINT EMPTY //値の無い状態を示す PRINT NOTHING //オブジェクトの無い状態を示す
NULL、EMPTY、NOTHINGの違いは?
TRUE/FALSEは出力される値が違うので
一目瞭然ですが、それ以外のNULL、EMPTY、NOTHINGは
パッと見、違いが良く分かりません。
一行で説明すると・・・
・NULL・・・ヌルポインタ
・EMPTY・・・値が無い状態
・NOTHING・・・オブジェクトが無い状態
となります。
それでは、次の質問に正確に回答できるでしょうか。
もし出来たらかなりUWSCに精通していることになります。
・NULL、EMPTY、NOTHINGは”"や0と等価でしょうか( = で比較するとTrueになるか)
・NULLとEMPTYとNOTHINGはそれぞれ等価でしょうか( = で比較するとTrueになるか)
・NULLとEMPTYとNOTHINGをそれぞれ単体で出力するとどのようになるでしょうか
・NULLとEMPTYとNOTHINGを加算に使うとどうなるでしょうか
・NULLとEMPTYとNOTHINGの文字列の長さ(LENGTH関数の返り値)はいくつでしょうか
以下のスクリプトで検証してみましょう。
タグ
2012年8月24日 | コメントは受け付けていません。 |
カテゴリー:構文・制御文
行結合
行結合
基本は1処理1行だけど・・・
UWSCは基本1処理1行です。
例えばA = 1 + 1を表現する際に
A
=
1
+
1
と書いてもエラーになります。
表現したい場合は_(アンダーバー)で、行結合をします。
A _ = _ 1 _ + _ 1 PRINT A
行結合の用途は?
例えばIFの条件式が長くなり、見た目がよくないと感じたとします。
そういう場合はただ改行しても、思うように動作しないので
行結合を試みます。
下記のようになります。
タグ
2012年8月21日 | コメントは受け付けていません。 |
カテゴリー:構文・制御文
コメント
コメント
// コメント
コメント以降は処理されなくなります
スクリプトにメモを残したい、処理はしたくないけど、
記述は消したくない。
そういう箇所はコメントとしましょう
//コメントなので実行されない PRINT "Hello" //PRINT "コメントなので実行されない" A = 14 // + 20 としてもコメント以降は実行されない PRINT A
スクリプトをメンテナンスするには必須
簡易なスクリプトならコメントは不要かもしれませんが、
複数の人間でメンテナンスする場合は、
スクリプトにコメントを付記したほうがよいでしょう。
また、コメントの書き方もある程度は統一するのがベターです。
変数にはその説明、処理にはその概要、ヘッダには製作者やバージョン、
スクリプトの概要や日付などを入れると、
それらしくなりますね。下記のようになります。
タグ
2012年8月19日 | コメントは受け付けていません。 |
カテゴリー:構文・制御文
CREATEFORM
戻値 = CREATEFORM( HTMLファイル, タイトル, [平行処理フラグ, オプション指定, 幅, 高さ, X, Y] )
HTMLファイル: フォームとして表示するHTMLファイルパス
タイトル: 表示するタイトル
平行処理フラグ:
- FALSE
- Submit属性のボタンが押されるまで処理を返さない (デフォルト)
- TRUE
- 待たない
オプション指定: (複数指定可)
- FOM_NOICON
- クローズボタンを出さない
- FOM_MINIMIZE
- 最小化ボタンを表示する
- FOM_MAXIMIZE
- 最大化ボタンを表示する
- FOM_NOHIDE
- Submit属性のボタンが押されても画面を消さない
- FOM_NOSUBMIT
- Submit属性のボタンが押されても Submitに割り当てられた処理をしない
- FOM_NORESIZE
- ウィンドウのサイズ変更不可
- FOM_NOLUNA
- 表示をルナ(XP)風にはしない
- FOM_BROWSER
- ターゲット名解決のため、コントロールを最上位レベルのブラウザとする
- FOM_NOFLOATEXCEPT
- 浮動小数点例外を無効にする
平行処理フラグ=FALSE: 押されたボタンの Name
平行処理フラグ=TRUE: フォームの COMオブジェクト
オプションやサイズ、位置を試してみる
HELPにある
CREATEFORM(“TEST.html”, “タイトル”, False, 0, 500, 320)
のサイズ・位置の関係がイマイチ分からないので、
色々なパターンを試して、結果を見せたいと思います。
// OKBtn ボタンが押されたら各入力値を表示する PATH = "C:\TESTHTML.html" TITLE = "タイトル" KB = "構文:" MSGBOX("フォームのOKボタンを押して進んでください")
//①HELPにあるもののPATHとタイトルを変数化 obj = CREATEFORM(PATH,TITLE,FALSE,0, 500, 320)
//②オプションを指定して、幅、高さ、X、Yを指定 obj = CREATEFORM(PATH,TITLE,FALSE,FOM_MAXIMIZE,0,0, 500, 320)
//③二番目の幅を600に obj = CREATEFORM(PATH,TITLE,FALSE,FOM_MAXIMIZE,600,0, 500, 320)
//④二番目の高さを600に obj = CREATEFORM(PATH,TITLE,FALSE,FOM_MAXIMIZE,0,600, 500, 320)
//⑤二番目の幅200、高さ600 obj = CREATEFORM(PATH,TITLE,FALSE,FOM_MAXIMIZE,200,600, 500, 320)
//⑥五番目のXを0、Yを0 obj = CREATEFORM(PATH,TITLE,FALSE,FOM_MAXIMIZE,200,600, 0, 0)
//⑦五番目のXを600、Yを600 obj = CREATEFORM(PATH,TITLE,FALSE,FOM_MAXIMIZE,200,600, 600, 600)
//⑧三番目のオプションを複数指定(最大化ボタンと最小化ボタン) obj = CREATEFORM(PATH,TITLE,FALSE,FOM_MAXIMIZE OR FOM_MINIMIZE,600,0, 500, 320)
また、これらの結果からサイズに関しては、0の場合デフォルト値が適用されるようです。
タグ
2012年8月17日 | コメントは受け付けていません。 |
カテゴリー:関数一覧
演算子の優先順位
演算子の優先順位
優先順位高優先順位低( ) ! *、 /、 MOD +、 - >、 < 、 =、 >=、 < =、 <> AND OR、 XOR
優先順位が高いほうが先に計算される
上の並びを参照すると、
+よりも*のほうが優先度が高く設定されています。
つまり、1 + 10 * 5とあった場合は、
答えは1 + 10 = 11、 11 × 5 =55とはならずに、
10 × 5 = 50、50 + 1 = 51となります。
各説明と共にサンプルを見てみましょう
//ORはどちらかがTRUEならばTRUEを返す、ANDは両方TRUEならばTRUEを返す //ANDが先に計算されるのでFALSE(=0)が返る PRINT FALSE AND TRUE OR FALSE //XORは片方がTRUE、片方がFALSEの時にTRUEを返す、両方TRUEや両方FALSEはFALSEを返す //ANDが先に計算されるのでTRUE(=1)が返る PRINT FALSE XOR TRUE AND TRUE //>、<は大なり小なり、=は等価、>=、<=は以上、以下、<>は不等価 //>が最初に計算されるのでFALSEが返る PRINT 0.1 > 1 = TRUE //+は加算、-は減算、*は乗算、/は割り算、MODは剰余算 //*が+や-より優先されるため答えは51 PRINT 1 + 10 * 5 //!は否定、TRUEはFALSEに、FALSEはTRUEになる //()は最優先 //よって下記はFalseとなる PRINT !(4 MOD 3 = 1)
分かりにくくなるので()を使用しよう
プログラミングを書いているときに上記の優先順位を気にするよりは
()を使用して、明示的に優先度を表現するほうが推奨されます。
優先順位は誰もが暗記しているわけではないですし、括弧がないと
どこから計算されるかパッと見、分からず、
混乱してしまいます。
PRINT 10 MOD 2 * 3 + 90 / 3 > 89 < = 9 > 6
上記のようにあると、一瞬たじろいでしまいます。
バグがあっても何がどうなればよいのか、
確かめようもありません。
キチンと括弧を付けることで少なくともどういう順番で
計算されるのか想定可能ですし、
設計書があればその仕様通り動作するかも
検証できます。
括弧を付けたスクリプトを見てみましょう。
タグ
2012年8月17日 | コメントは受け付けていません。 |
カテゴリー:構文・制御文
COMオブジェクト操作関連
COMオブジェクト操作関連関数
COMについては上級者編で解説されております。
関数を使用した具体的なCOMオブジェクトの活用例は上級者編をご参照下さい。
CREATEOLEOBJ
戻値 = CREATEOLEOBJ( COMオブジェクト名 )
COMオブジェクトを指定
COMオブジェクト
なお、COMからメソッド使用時に引数に値取得がある場合
引数の変数の前にVarを付記
GETACTIVEOLEOBJ
戻値 = GETACTIVEOLEOBJ(COMオブジェクト名,[タイトル, 順番])
COMオブジェクトを指定
タイトル: 複数時にタイトルで区別(部分一致可)
なお、Excel、Access、Wordの場合はファイル名を指定
IE、Office以外では無効
順番: IEのみ有効、タイトルが同じ時に区別
COMオブジェクト
GETOLEITEM
戻値 = GETOLEITEM( コレクションプロパティ名)
コレクションプロパティ名:COMオブジェクトのコレクション取得プロパティ名を指定
取得したコレクションの数
取得したコレクションは配列変数の
ALL_OLE_ITEM[ ]に配列ゼロから格納
OLEEVENT
OLEEVENT( COMオブジェクト, インタフェース名, イベント名, Procedure名)
COMオブジェクトを指定
インタフェース名: ディスパッチインタフェース名
イベント名
Procedure名:UWSC側Procedure
Procedure内にてイベントの引数は配列変数EVENT_PRM[ ]に配列ゼロから格納
COM_ERR_IGN-COM_ERR_RET
・・・COM処理・・・
COM_ERR_RET
COM処理中のエラーはCOM_ERR_FLG にTRUEが設定
SAFEARRAY
戻値 = SAFEARRAY( [下限, 上限])
下限: 配列の下限を設定
上限: 配列の上限を設定
作成されたSAFEARRAY型を返す
タグ
2012年8月16日 | コメントは受け付けていません。 |
カテゴリー:関数一覧
文字列
文字列
“文字列”
文字列の結合は+で行います
改めて文字列の紹介をすると、
まずはダブルクォテーション(“)で括りましょうという事が第一です。
次に、OPTION指定で変更しない限り
比較する場合は、大文字小文字の区別はしません。(ABC=abc)
文字列をつなげる場合は+を使います。
まとめて以下のスクリプトで確かめてみましょう。
//文字列の結合 MOJ1 = "ぐろーばるわーるど" MOJ2 = " is a word very difficult." PRINT MOJ1 + MOJ2 //文字列の比較(OPTION指定無し) MOJ3 = "THIS IS MY CUP" MOJ4 = "this is my cup" IFB MOJ3 = MOJ4 PRINT "↓↓同じ文字です↓↓" PRINT MOJ3 + ":" + MOJ4 ENDIF
結合の際は順番を考えよう
例えば下記のようなスクリプトはどういう結果になるでしょうか?
PRINT “14 + 6 = ” + 14 + 6
14 + 6 = 20とはならずに
14 + 6 = 146となってしまいます。
計算の優先順位に差が無い場合
コンピューターは左から計算をします。
なのでまず”14 + 6 = “という文字列に14という文字列が結合され、
続いて”14 + 6 = 14″という文字列に6が結合されてしまうのです。
詳細は演算式の優先順位でご確認できますが、
解決策としては以下のように、明示的に”(“と”)”で計算の優先度を上げることになります。
タグ
2012年8月15日 | コメントは受け付けていません。 |
カテゴリー:構文・制御文
アカウントを自動生成する
アフィリエイトを行おうとするとき、
複数のアカウントを作成しないといけない場合が多々あります。
そんな時、自動でアカウントが作成できたら楽だなぁ~
なんて思うことありませんか?
ということで、自動でアカウントを作成できるスクリプトを解説します。
※もちろん、相手が望んでいないのに、同一サイトでスパム的にアカウントを作成するといった利用は行わないでください。
どんなスクリプトにする?
今回は、
ランダムな8ケタの英数字を1行2つ設定で、
指定回数分ログ表示用ウィンドウに書き出すスクリプトにしましょう。
必要なモノ
この辺を組合わせて作成します。
スクリプト
NUM = INPUT("何個作成しますか?") FOR A = 1 TO NUM ID = "" PW = "" //文字数は8文字 FOR B = 1 TO 8 ID = ID + RETURNCHAR() PW = PW + RETURNCHAR() NEXT IDPW = ID + "<#TAB>" + PW PRINT IDPW NEXT FUNCTION RETURNCHAR() LETTER = CHR(97 + RANDOM(26)) //アルファベットの小文字、数字を出す SELECT RANDOM(2) CASE 0 //アルファベットはそのまま RESULT = LETTER CASE 1 //数字の場合は0~9をランダムに出す RESULT = RANDOM(10) DEFAULT RESULT = LETTER SELEND FEND
実行すると、ランダムな8ケタの英数字が一瞬で作成できます。
※EXCELにペタっと貼り付けられるように、
IDとPWの間はTABで区切ってます。
タグ
2012年8月14日 | コメントは受け付けていません。 |
カテゴリー:アフィリエイター
PUBLIC
PUBLIC
PUBLIC 変数 = 値
どこからでも呼び出せるグローバル変数
例えばFUNCTIONやPROCEDUREなどの自作関数の中にある変数は、
自作関数の中で範囲が閉じられています。
同じ変数名を自作関数の外と、自作関数の中で使っても、
両者は互いに影響を及ぼしません。
しかし、グローバル変数にすると、お互い同じ変数を参照することになり
値が変化します。
具体例として以下のスクリプトを見てみましょう。
//グローバル変数 PUBLIC YGLB ="YES" //ただの変数 DIM NGLB = "NO" PRINT "関数実行前:" + YGLB + ":" + NGLB PRINT "(↑宣言時の値)" DO() PRINT "関数実行後:" + YGLB + ":" + NGLB PRINT "(↑変化が影響しているのはPUBLIC宣言の変数)" //自作関数 PROCEDURE DO() YGLB = "はい" NGLB = "いいえ" PRINT "自作関数の中:" + YGLB + ":" + NGLB PRINT "(↑関数内の値)" FEND
DIMのような多次元配列も使えるか
結論から言うと、使えます。
スクリプトは以下のようになります。
タグ
2012年8月13日 | コメントは受け付けていません。 |
カテゴリー:構文・制御文