この記事について
| 環境 | Windows、UWSC、IE |
|---|---|
| 目的 | 「名前を付けて保存」ダイアログが2つ出ている状態で目的の方の「はい」を押す |
| 結果 | GETALLWINで全ウインドウを回し、GETITEMで取得したテキストに目的の文言があるかで区別した |
つまずきポイント要約
- タイトルとクラス名が同じだとGETIDだけでは区別できない
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
