uwsc


【UWSC】同じタイトルで同じクラス名のウインドウを区別する

UWSCでIEを自動操作していたら下記のような場面に遭遇。

名前を付けて保存ダイアログ

手前の「名前を付けて保存」ダイアログの「はい」を押したい。

これまでなら、

CLKITEM(GETID("名前を付けて保存","#32770"),"はい", CLK_LEFTCLK)

などと記述すればよかったのだが今回はうまくいかない。
理由は「名前を付けて保存」というタイトルで2つのダイアログが出ているため。

そこで区別するコードを作った。

//サンプルコード
/////////////////////////////////////////////////////////////

// 全てのウインドウIDをゲット(ALL_WIN_ID[]変数に入る)
for i = 0 to GETALLWIN()-1

//「名前を付けて保存」のダイアログであるなら、
ifb (STATUS(ALL_WIN_ID[i], ST_CLASS) = "#32770") AND (STATUS(ALL_WIN_ID[i], ST_title) = "名前を付けて保存")

//ウインドウ内のテキストを取得。取得ができたらなら、
ifb 0 < GETITEM(ALL_WIN_ID[i],ITM_ACCTXT)

//取得したテキストに「上書きしますか」の文言があるか。あればクリック。GETITEMで取得した情報は配列変数 ALL_ITEM_LIST[] に格納される。
/////////////
ifb 0 < POS("上書きしますか",ALL_ITEM_LIST[0]) //目当ての文字列はALL_ITEM_LIST[0]にある
CLKITEM(GETID("名前を付けて保存","#32770"),"はい", CLK_LEFTCLK)
endif
/////////////

endif

endif
next
/////////////////////////////////////////////////////////////

UWSCでダイアログのボタンを押す

スクリプトでIEを操作中、次のようなエラーダイアログが出た

error_dialog

「OK」ボタンを押すだけのサンプルコード

CLKITEM(GETID("Windows Internet Explorer","#32770"),"OK", CLK_ACC or CLK_MUSMOVE)

ちなみに、#32770はダイアログのクラス名

UWSCで配列を全て展開して出力する

DIM array[] = "すいか","いちご","れもん" //配列

//LENGTHで配列の数を確認し、その分だけ展開させる。
//要素数は「0」から始まるので、LENGTHの結果から-1する。
FOR i = 0 TO (LENGTH(array) - 1)
PRINT array[i]
NEXT

UWSCで改行コードをすべて削除や置換する方法

//改行を全て削除する
moji = REPLACE(moji, "<#CR>", "")

これで改行ができない場合は、CR(キャリッジリターン)とLF(ラインフィード)を指定して削除する。次のコードを追加。

moji = REPLACE(moji, chr(13), "" ) //CRを削除
moji = REPLACE(moji, chr(10), "" ) //LFを削除

【UWSC】エクセルのワークシートの追加と名前の変更

エクセルのワークシートの追加とワークシート名を変更する記述のメモ

-------------------------------------------------
//対象のエクセル
EXCEL = GetActiveOleObj("Excel.Application", "ファイル名.xls")

//ワークシートの追加
EXCEL.activeworkbook.worksheets.add()

//追加したワークシートの名前の変更。
Excel.ActiveSheet.name = ワークシート名

もしくは、

//(1)は左から一番目のワークシート。
EXCEL.activeworkbook.worksheets(1).name = ワークシート名

※既存のワークシート名を指定すると、重複させられないのでCOMエラーになる
-------------------------------------------------

【UWSC】正規表現、マッチしているかどうかテスト

UWSCで正規表現を使ったマッチしているかどうかのテスト

-------------------------------------------------
re=CreateOleObj("VBScript.RegExp")
re.pattern = ";$" //正規表現のパターン。行末に「;」があればマッチ。
re.Global = True //文字列全体を検索。trueでする(規定)、falseでしない(マッチする文字列が見つかったらそこで終了)。
re.IgnoreCase = True //大文字・小文字を区別。trueでしない(規定)、falseでする。

str = "aaaaa;" //対象の文字列

IFB True = re.Test(str) THEN
PRINT "マッチしている"
ELSE
PRINT "マッチしてない"
ENDIF
-------------------------------------------------

【UWSC】正規表現を使ってマッチした文字列を取り出す

正規表現を使ってマッチした文字列を取り出したい。

UWSCでの正規表現はVBScriptを用いる。

-------------------------------------------------------------
moji = "1234567891000520005" //対象となる文字列

re=CreateOleObj("VBScript.RegExp")
re.pattern = "1.*5" //正規表現パターン。1と5の間の文字を取り出す。
re.Global = True //文字列全体を検索。trueでする(規定)、falseでしない(マッチしたらそこで終了)。
re.IgnoreCase = True //大文字・小文字を区別。trueでしない(規定)、falseでする。
match = re.Execute(moji)

//マッチしたものをすべて出力
for i = 0 To match.Count-1
print match.Item(i).Value
next
-------------------------------------------------------------

出力結果:1234510005

uwscで正規表現を使う(文字列最後の「,」を削除する方法)

UWSCで正規表現を使うには、VBScriptを利用する必要がある。

aaa,bbb,ccc,ddd

↑文字列最後、dddの後ろの「,」だけを消したい場合の記述は次のとおり。

--------------------------------------------------------
moji = "aaa,bbb,ccc,ddd,"

re=CreateOleObj("VBScript.RegExp")
re.pattern = ",$" //パターン。$は行末の意味。文字列最後の「,」を指定している。
re.Global = True //文字列全体を検索。trueでする(規定)、falseでしない(マッチしたらそこで終了)。
re.IgnoreCase = True //大文字・小文字を区別。trueでしない(規定)、falseでする。
moji = re.Replace(moji,"") //指定の文字を空文字に置き換えて削除。

print moji
--------------------------------------------------------

出力結果:aaa,bbb,ccc,ddd

【UWSC】IEを自動で更新するスクリプト

UWSCを使って、IEを自動で更新させたいなら次のように記述すれば良い

IE = GETACTIVEOLEOBJ("InternetExplorer.Application","yahoo")
IE.Refresh //更新 F5を押したときと一緒

もしくは

IE.document.location.replace(IE.document.location.href)//今開いているページのURLに再アクセス

更新をするとページによっては

「情報を再び送信しますが更新してよろしいですか?」

的なダイアログが出るときがある。これは「F5 更新」の場合に出現する可能性が高いので、回避したいなら

IE.document.location.replace(IE.document.location.href)

こっちを試すと良い

[uwsc]一秒おきにクリックを繰り返す

While True
BTN(LEFT,CLICK)
Sleep(1) // 1秒の間を取る
Wend

ちなみに強制終了は ALT + F2

4 / 41234