自動化ツールUWSC使いよ集まれ12at SOFTWARE
自動化ツールUWSC使いよ集まれ12 - 暇つぶし2ch50:名無しさん@お腹いっぱい。
14/07/24 21:05:59.87 BsSHpTFO0
>>49
一度に複数を指定することはできなかったのですね
どうも有難う御座いました

51:名無しさん@お腹いっぱい。
14/07/30 17:44:11.53 Ljr+G5rq0
クリップボードにある文字以外のデータをそのまま変数に入れるにはどうすればいいでしょうか。
a = getstr(0)とすると文字として変換してしまうからか上手くいきません

52:名無しさん@お腹いっぱい。
14/07/30 19:19:15.15 VJ8GbVJK0
1.一旦文字として受け取っておいてから、
2.必要に応じ文字列加工で邪魔な文字を除去するか、または数値変換対象から除外
3.文字を数字に変換する関数で数値変換

53:名無しさん@お腹いっぱい。
14/07/31 01:17:16.38 yjpxLrhn0
IEの制御について質問です。
「OK」と「キャンセル」が表示されるタイプのダイアログについて、表示されている文章(「よろしいですか?」のような文章)を取得するにはどうしたら良いのでしょうか。

ある申し込み処理を自動化しようとしているのですが、異なるメッセージのダイアログが連続で出てくる形で処理が進むため、どのダイアログが表示されているのかを識別したいのです。

文章を取得する以外でも、良い方法があればご教授ください。

なお、ダイアログのタイトルは全て同じなため、識別には使用できませんし、IE.document.titleでは取得もできませんでした。

無知な質問で申し訳ありませんが、晩御飯を食べてからずっとネットをさまよっていて途方に暮れています。
どなたか助けていただけないでしょうか。

54:名無しさん@お腹いっぱい。
14/07/31 08:19:02.76 fvrkKN/40
文章量はあるのにわかりやすくてまとまった質問だ

ちなみに自分は回答を持ち合わせていない

55:名無しさん@お腹いっぱい。
14/07/31 09:38:51.36 7gh5fHYh0
ダイアログの種類にもよるけれど
GETITEMでメッセージを取得できるかもしれないし
それが無理ならPOSAACでメッセージを取得できるかもしれない
頑張れ

56:名無しさん@お腹いっぱい。
14/07/31 10:34:52.63 2xGppryt0
>>53
そのダイアログに対して「fcuc.uws」を使ってみる

57:53
14/07/31 23:58:40.69 yjpxLrhn0
レスありがとうございました。
無事にメッセージが取得でき、条件分岐させることができました!

教えていただいたfcuc.uwsを使ってみたところ、getstr(id,0,STR_ACC_STATIC) でメッセージ取得できることがわかりました。
他にもfcuc.uwsはいろいろと使いでがありそうですね。

実は早速次なる壁にぶつかっていますが、いろいろと試行錯誤して頑張っていきます。
皆さん、本当にありがとうございました。

58:名無しさん@お腹いっぱい。
14/08/01 02:35:45.63 4dogJ4Kh0
ゲーム用にスクリプト組んでるんだけど
音量で判定って出来る?
でかい音が鳴った時に動作させたいんだけど、そういう事が可能かどうかヘルプ見てもわからなかったもんで

59:名無しさん@お腹いっぱい。
14/08/01 03:57:03.49 4CXJMfLa0
まぁ良い悪いは置いといて、音量ミキサーでも監視すれば良いんじゃないの?がんばって。

60:名無しさん@お腹いっぱい。
14/08/01 10:22:28.02 gLNQAj820
音量ミキサーが上下する訳じゃないだろ・・・

61:名無しさん@お腹いっぱい。
14/08/01 10:26:34.60 4CXJMfLa0
音量ミキサーが何を見てるかわかるんじゃない?

62:名無しさん@お腹いっぱい。
14/08/01 10:57:03.64 pbjcPu7a0
まぁ、瞬間値しかわからないから音量判定はオススメ出来ない
他のトリガーを探したほうがいいよ

63:名無しさん@お腹いっぱい。
14/08/01 15:06:17.13 sgRmVnbD0
いや、音量ミキサーの上下を画像判定すればいけるっしょ

64:名無しさん@お腹いっぱい。
14/08/01 19:34:49.87 cw9PH6wx0
>>63
音量の値を返す関数かなんかあんのかなって調べてたんだが
音量ミキサー自体を画像判定か・・・試してみるかな
その発想が出てくるところがすごい

65:名無しさん@お腹いっぱい。
14/08/01 20:10:36.66 sgRmVnbD0
>>64
どうしても要素掴めない時の最終手段がCHKIMGなのは前から定番
極論だがCHKIMGアリなら人間がやる動作は全て自動化可能

人間としての考えが必要な動作、例えばパズルゲームとか画像認証とかもな。
(別途、複雑なアルゴリズム組み込む必要があるがあくまで極論の話)

ていうか大体はAPIか別のツールをUWSCで動かせば楽なケース多いぞ
俺はAPIは知らんが、vector辺りで音楽ソフト漁れば
音量でかければ何かしらサイン出せるようなソフトあるんじゃね?
それをUWSCで判定するのが安定するかと思う

66:名無しさん@お腹いっぱい。
14/08/02 02:15:39.68 J+3s+h/50
IE.Navigate で COM ERROR: Exception occurred が出る原因と対処法、アドバイス貰えないでしょうか?

下記のコードで、3つ目の IE.Navigate で毎回エラーが出てしまいます。

IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
IE.Navigate("URLリンク(shizu.0000.jp)) //1
Sleep(2)
IE.Navigate("URLリンク(shizu.0000.jp)) //2
Sleep(2)
IE.Navigate("URLリンク(shizu.0000.jp)) //3
Sleep(2)
IE.Navigate("URLリンク(shizu.0000.jp)) //4
Sleep(2)
IE.Navigate("URLリンク(shizu.0000.jp)) //5
Sleep(2)

表示するURLの順序を変えても、やはり3番目でエラーになります。
UWSC掲示板では情報が得られませんでした。

Win7 Home
IE11
UWSC 4.8c

67:名無しさん@お腹いっぱい。
14/08/02 02:29:42.47 KglVg/uo0
うちではエラーは出ないなぁ
uwscを最新版にしたらどう?
COMエラーを無視して実行しても問題なさそうだからエラーは無視するとか

68:名無しさん@お腹いっぱい。
14/08/02 08:02:51.18 buVZD99L0
>>64 本気か
レベルメーターなら分かるんだが・・・まあいっか

69:名無しさん@お腹いっぱい。
14/08/02 08:21:08.45 EMpklq/n0
>>65
現実的には、画像をOCRに通して文字列判定させたくても、都合のいいOCRが安価に入手できない。
また縮小拡大されたり3Dなどで類似画像判定させようとすると、OpenCV+一般言語のほうがいいということになる。
もしUWSCから極めて容易に、
プロセスメモリからユニコード文字列抜き出したり、パケットからスニッフできたりするライブラリがあれば、
人間以上のことが出来ちゃうんだけどなぁ

70:名無しさん@お腹いっぱい。
14/08/02 13:35:13.96 HI77Qwqc0
// できた!こんなところでOK?

while 1
 if peekcolor(レベルメーターででかい時のx,レベルメーターででかい時のy)=レベルメーターの色 then msgbox("でかい音")
 sleep(0.1)
wend

71:名無しさん@お腹いっぱい。
14/08/02 18:40:27.92 l/ljZJuP0
>>67
最新版5.0.2.0にしてみたけど、結果は同じでした。

エラーを無視を試してみます。ありがとうございました。

COM_ERR_IGN
  // 何等かのCOM処理
COM_ERR_RET

72:名無しさん@お腹いっぱい。
14/08/02 18:51:25.93 5O9VcL/w0
>>71
なんでsleep使ってるのか知らないけど
sleep30くらいにしてもおきるの?

73:名無しさん@お腹いっぱい。
14/08/02 20:44:45.62 WM1a4UDh0
>>72
別のスクリプトで IE.Navigate のエラーが発生したので、
これはあくまで原因を探るためのテストコードなのです。

Sleepはたとえば120秒にしてもダメでした。

あとエラー無視(COM_ERR_IGN と COM_ERR_RET)を使ってみましたが、 IE.Navigate が機能しないことには変わりないのでNGでした。

仕方ないので
IE.Navigate を実行する部分ごとに別のスクリプトにして、タスクスケジューラでuwscを順次起動することにしました。
(uwscのスケジュール機能も動作がおかしいので)

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

74:名無しさん@お腹いっぱい。
14/08/03 00:16:57.12 Kb0PwfYK0
これが.NETの総合開発環境なら普通にエラーコード確認できるだろうしデバッグも様々なアプローチが出来るのにねー(棒)

75:名無しさん@お腹いっぱい。
14/08/03 00:29:25.17 df3QRqvg0
busywait入れてみたらどう?

76:名無しさん@お腹いっぱい。
14/08/03 01:39:01.99 BlUvp7BS0
IE11が原因だな
10以下なら動きそう

77:名無しさん@お腹いっぱい。
14/08/03 02:21:05.46 JxcSZXyH0
IE11でもエラーは起きない
本人以外で再現できる人いるの?

78:名無しさん@お腹いっぱい。
14/08/03 07:59:52.72 GZ+WuIZ70
エラーは起きないけれどWin7 IE11で3以後は表示されない
IEの外部操作は.NETでしかやったこと無いけれど同じような経験あるよ
その時はデバッグの結果

1回目は初期化されたIEだから問題ない
2回目は変数IEが表示中のIEなのでナビゲート後のページが表示される
但し内部的にはナビゲートすると変数IEと表示中のIEは同じオブジェクトじゃなくなるので
3回目以後は表示されない

って解釈してナビゲート後のIEを SHDocVw.ShellWindows から探す関数を作って対応した

79:名無しさん@お腹いっぱい。
14/08/03 08:11:42.83 GZ+WuIZ70
自分のケースの場合は
自動表示したページから次のURLを取得して順次ナビする必要があったけど

>>66の様なケースの場合は
固定URLの巡回なら毎回IEをCreateOLEObjして対応してもいい気がする

80:名無しさん@お腹いっぱい。
14/08/03 08:46:05.25 BlUvp7BS0
>>79
なるほどなぁ
それなら毎回GetActiveOleObjするのでもいいのかな
表示中のページも利用できそうだけど

81:名無しさん@お腹いっぱい。
14/08/03 17:53:01.87 ygrmWk1e0
下記のコードでポップアップのOKが押せない原因を調べているのですが、どうしても分かりません。

IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = True
IE.Navigate("URLリンク(ctu.fletsnet.com))
BusyWait(ie)
IESetData(IE, True, "btnLogin", "ログイン")
BusyWait(ie)
IESetData(IE, True, "CONNECT_OFF_CLICKRUN_C1025", "切断")
BusyWait(ie)
IESetData(IE, True, "CONNECT_OFF_CLICKRUN_C1025", "接続", 1)
BusyWait(ie)
IELink(IE,"ログアウト")

ID = getid("Message from webpage","#32770",-1)
ClkItem(ID,"OK") // ←ポップアップのOKが押せない!

BusyWait(ie)
IE.Quit
ExitExit

ポップアップを手動で開いてから、下記コードだけを動かす時は正しくクリック出来ます。
ID = getid("Message from webpage","#32770",-1)
ClkItem(ID,"OK")

どうして連続処理の中では動作しないのでしょうか?

82:名無しさん@お腹いっぱい。
14/08/03 18:09:32.78 df3QRqvg0
ポップアップが出る前にID取得してんじゃねーの

83:名無しさん@お腹いっぱい。
14/08/03 19:02:52.87 mE9cDTXm0
管理者権限のUWSCスクリプトで起動したソフトがすべて管理者権限で起動されてしまうのは防げないものでしょうか?

84:名無しさん@お腹いっぱい。
14/08/03 19:03:26.55 f5gfXNnl0
自動操作では操作の成否を戻り値で受け取って一定回数再トライするのは定石よ

85:名無しさん@お腹いっぱい。
14/08/03 19:05:07.65 vQ3Noa3Z0
>>82 >>84
出来ました! ありがとうございます!!

thread CtuPopUpClick()
IELink(IE,"ログアウト")

////////////
Procedure CtuPopUpClick()
ID = getid("Message from webpage","#32770",-1)
ClkItem(ID,"OK")
Fend

86:名無しさん@お腹いっぱい。
14/08/03 22:17:27.04 f5gfXNnl0
>>85
邪魔なダイアログ消すだけならそれでOKなんだろうが

sleep(1)
flgOkWasClicked=false
for loop=1 to 10
  did=getid("Message from webpage","#32770",1)
  if did = -1 then continue
  flgOkWasClicked=clkitem(did, "OK")
  if !flgOkWasClicked then continue
next

ifb flgOkWasClicked then ...

ということを言いたかったんだね~
まぁ好きにやれや

87:名無しさん@お腹いっぱい。
14/08/04 06:29:48.83 +GhF8xfL0
>>86修正

sleep(1)
flgOkWasClicked=false
for loop=1 to 10
  did=getid("Message from webpage","#32770",1)
  if did = -1 then continue
  flgOkWasClicked=clkitem(did, "OK")
  if flgOkWasClicked then break
next

ifb flgOkWasClicked then ...

88:名無しさん@お腹いっぱい。
14/08/05 16:38:42.74 qR61SyTc0
ランチメニューのショートカットキーは無効化出来ないのでしょうか?

キー割り当てに「なし」という選択肢がありません。

UWSC.INI を書き換えてもダメです。
LunchMenuHotKey= を削除すると デフォルトの Ctrl-W になってしまうし、
LunchMenuHotKey=999 とか存在しないキー番号を書くと起動時にいちいちエラーが出るし。

使わない機能のためにショートカットを割り当てなきゃならないのがツライ。

89:名無しさん@お腹いっぱい。
14/08/05 16:48:10.96 qR61SyTc0
訂正: ショートカットキー → ホットキー

90:名無しさん@お腹いっぱい。
14/08/05 16:54:29.69 D5Dx1Flc0
デフォだとブラウザのタブとか閉じるコマンドなんだよねそれ、無効ないししょうがないから使わないコマンドに設定してるよ

91:名無しさん@お腹いっぱい。
14/08/05 17:02:03.38 M2OIrEtB0
残念ながら有りません
UWSC本体を常駐状態にせずにスクリプトを逐次起動すれば
ショートカットを気にする必要はなくなりますよ

92:名無しさん@お腹いっぱい。
14/08/05 18:04:36.53 0292bkw40
While true
MSGBOX("testtest")
IF CHKIMG("tes1.bmp",0,1,1,806,625) THEN
BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y)
sleep(3.0)
endif
IF CHKIMG("tes2.bmp",0,1,1,806,625) THEN
BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y)
sleep(3.0)
endif
IF CHKIMG("tes3.bmp",0,1,1,806,625) THEN
BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y)
sleep(3.0)
endif
IF CHKIMG("tes4.bmp",0,1,1,806,625) THEN
BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y)
sleep(3.0)
endif
IF CHKIMG("tes5.bmp",0,1,1,806,625) THEN
BTN(LEFT, CLICK, G_IMG_X, G_IMG_Y)
sleep(3.0)
endif
sleep(0.5)
Wend

5この画像クリックして戦闘ループさせるようにしたつもりなんだけど
画像が見つかんねー
ペイントで切り取って保存してキャンバスのサイズ1×1に張り付けて
この書き方がまずいの?ちゃんと画像の探索できてんのかわからん

93:名無しさん@お腹いっぱい。
14/08/05 18:43:48.97 6loQZGsf0
その程度自分でデバッグできないとか。

94:名無しさん@お腹いっぱい。
14/08/05 18:47:39.23 M2OIrEtB0
適当にレスするとCHKIMGで得られる座標は左上なので
当然クリックする座標も其処になる
其処がクリック可能じゃなければBTN関数は当然失敗する

それ以前に比較用の画像が駄目な可能性もある
個別に判断していけ

95:名無しさん@お腹いっぱい。
14/08/05 19:00:12.01 niZhumv+0
>>92
・MOUSEORGを使う
・CHKIMGが失敗した場合にSLEEP挟まずに次のCHKIMGが実行されており
 CPU時間を独占し対象の描画を妨害する可能性がある
・CHKIMGは可能な限り IMG_MSK_BGR4 で判定すべし
・明らかにマッチする画像がマッチしないなら、そのときの画像を保存し、
 比較元と比較先の画像を800%以上に拡大して肉眼比較すべし
・画像があればクリックしTRUE、無かったり座標異常等でクリックできなければFALSEを返す
 例えばCLKIMG関数のようなものを定義すれば、コード量は半分に減りテストもしやすいだろう

96:名無しさん@お腹いっぱい。
14/08/05 21:31:03.70 oWkOQAEl0
IE操作について質問です
CSSセレクタやXPathによるエレメント指定って
UWSC標準関数では実現できないと思うのですが
何かいい方法ありませんか?

97:名無しさん@お腹いっぱい。
14/08/05 22:12:08.03 0292bkw40
解決しました!
やっぱり画像が一致してなかったみたいです

>>93
sleep関数とmsgboxで一応デバッグしとる

98:名無しさん@お腹いっぱい。
14/08/06 12:29:26.17 OYZwCMgl0
CHKIMGを利用して指定画像があった場合、続いてその画像から右側の指定範囲をサーチさせるにはどうすればよいのでしょうか?
例を挙げると

画像A(画像左上角の座標がX=100、Y=100)があったら、次にそこから右の範囲(X1=110、Y1=100、X2=150、Y2=120)から指定画像を検索

要は画像Aの左上角座標からX1はX+10、Y1はY、X2はX+50、Y2はY+20の範囲を続いてサーチさせたいのです
こういったことが可能であればどのように書けば良いのでしょうか?
     

99:名無しさん@お腹いっぱい。
14/08/06 12:51:52.41 J8shURq/0
変数使えば良いんじゃね
X1 = G_IMG_X + 10
とかしても良いんだぜ

100:名無しさん@お腹いっぱい。
14/08/06 12:53:23.23 OYZwCMgl0
なるほど!ありがとうございます。

101:名無しさん@お腹いっぱい。
14/08/06 16:49:49.42 Kd4DWNAs0
PC用の無線リモコンにexe化したショートカット登録して押せるようにしたらすげー便利だった

1000円の品だったから4個しか設定出来ないがこれ捗りすぎてやばいw

102:名無しさん@お腹いっぱい。
14/08/06 18:59:45.71 hsLYtabQ0
PCに触っている状態であればランチャー動かしたほうが早いし
欲しいけど便利な用途が思いつかん

103:名無しさん@お腹いっぱい。
14/08/06 19:15:26.39 J8shURq/0
USBフットスイッチでもきっと便利に使えるだろうけれど
それはUSBフットスイッチの便利な使い方の一つでしかなくて
別にUWSCじゃなくてもいいし
EXE化しなくても引数付きでスクリプト起動してもいいよね
まぁ、嬉しい気持ちは伝わってくるよ
よかったな

104:名無しさん@お腹いっぱい。
14/08/06 19:39:18.22 Kd4DWNAs0
もともとfoobarに使えるリモコンって買ったんだけどuwscに利用したら思わず便利だったんで書いちゃったわ、確かに無理してそれ目当てに買う必要はないな

105:名無しさん@お腹いっぱい。
14/08/06 23:55:48.76 h3IAvmk30
IEで、あるページを表示させて、そこに入力フォームや登録ボタンがあるかどうかを判定するにはどうしたら良いでしょうか?

mailフォームと登録ボタンがあれば入力して押す。
IESetData(IE, "テストデータ", "mail")
IESetData(IE, True, "", "登録する")

なければ別の処理、という形にしたいのです。

ググってみたけど、どういうメソッド(?)をどう組み合わせればよいか分かりません。
教えてもらえると助かります。

106:名無しさん@お腹いっぱい。
14/08/07 00:14:05.20 6xUT57kM0
POS関数

107:名無しさん@お腹いっぱい。
14/08/07 00:23:53.64 Ft6QcBe/0
IESetDataの戻り値はなんのためにあると思っているんだ?

108:名無しさん@お腹いっぱい。
14/08/07 00:34:06.84 xY78+5+d0
複数のUWSファイルを各ループ終了後に順番に開くようにしたいのですがわかりません。
現在はmain.uwsに、

while true

call A.uws
call B.uws
call C.uws

wend

と記述しており、A~C全て画像認証で特定の画像が現れたらクリックをしてループを抜けるというものです。
Aが画像認証成功したらBへ、Bが画像認証成功したらCへ、Cが画像認証成功したらAへと行きたいのですが上手く行きません。
上記の記述だと、Aをクリアした後にBに行き、応答なしになります。

109:名無しさん@お腹いっぱい。
14/08/07 02:03:52.04 fKkKz5EB0
公式サイトの掲示板で質問すれば作者が回答してくれるのに、
何でこんな便所の落書きみたいな場所で質問するの?

110:名無しさん@お腹いっぱい。
14/08/07 02:33:23.60 xY78+5+d0
書き込んだ時503で見れなかったんだ・・・
公式掲示板で聞いてみる

111:名無しさん@お腹いっぱい。
14/08/07 02:54:02.97 S3EPzyir0
callなんてやめて関数で1ファイルにしちゃえよ

112:名無しさん@お腹いっぱい。
14/08/07 06:10:19.12 E6P035jA0
[MAIN.uws]

CALL SUB1.uws
CALL SUB2.uws

while true
  A()
  if !B() then exit
  if !C() then exit
wend

--
[SUB1.uws]

procedure A()
  …
fend

function B()
  …
  result=true
fend

--
[SUB2.uws]

procedure C()
  …
  result=true
fend

113:名無しさん@お腹いっぱい。
14/08/07 09:04:03.29 kQCQRYI80
IF CHKIMG("AA.bmp") or CHKIMG("BB.bmp") or CHKIMG("CC.bmp")
 BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y)
 その他処理
endif

いくつかの画像を検索して同じ処理をしたいんですけど、
上記のように書くと、AA.bmpを見つけても、CC.bmp検索までしてるようで、
AA.bmpのG_IMG_XとG_IMG_Yの値を保持してくれないみたいで上手くいきません。
IF文を分ける以外のテクニックがありましたら教えてください。

114:名無しさん@お腹いっぱい。
14/08/07 09:56:39.26 S3EPzyir0
>>113
先頭に OPTION SHORTCIRCUIT

115:名無しさん@お腹いっぱい。
14/08/07 10:55:59.57 xY78+5+d0
>>108です
調べたところ、Bの画像認証が上手く行ってなかっただけでした。
お騒がせしました。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch