前スレにunkarやlogsoku貼るとか馬鹿なの?
>>3 お前は何も分かって無いんだなw
沸点の低い無知は消えろw
おおざっぱな質問で申し訳ないのですが、 GoogleChromeウィンドウ内の、ある箇所ををクリックしようとした際に 左クリックが正しく押せていない状態が起こります。 (たまにではなく確実です) マウスポインタは目的の場所まで動いているのですが、 どうもクリックだけがしっかりとできていないみたいです。 手動でクリックを行うとしっかりとできます。 中身を見ても、命令自体も間違っていないし、 別の命令が邪魔しているとも考えられません。 例えばUWSCのクリックのみ無視する、 といったサイトや条件等はあるのでしょうか? 原因が分からないため質問させていただきました。 どなたかご存知でしたら教えて頂けないでしょうか。 よろしくお願いします。
・スクロール量や、ツールバーの有無によって結果が変わるか? ・クリックする直前にChromeがアクティブになっているか否かで変わるか? ・クリック対象が文字、コントロール(ボタン等)、画像、Flash等によって変わるか? を試してみれ。
>>7 おおざっぱな質問にはおおざっぱな回答しかできないが...
ウインドウが非アクティブとかサイト側のチート対策も考えられるけど
手動ではできるしポインタの移動はできてることから可能性は低い
だとすると押下時間の不足じゃないかな
while True ifb 画像認証A クリック else ifb 画像認証B クリック else ... endif endif endif sleep(1) wend みたいなのを作りました 画像認証A→B→Cの流れが3回繰り返された時のみ、別の命令を実行したい場合、どのようにすればいいのでしょうか 普段はA→E→B→Dみたいにバラバラに動いています ご指南どうかお願い致します
文字列に認証した画像を追加記録しながら 一致した場合は別処理とかかなー DIM 認証 = "" 認証 = 文字列追加(認証, "D", 9) 認証 = 文字列追加(認証, "A", 9) 認証 = 文字列追加(認証, "B", 9) 認証 = 文字列追加(認証, "C", 9) Print 認証 認証 = 文字列追加(認証, "A", 9) 認証 = 文字列追加(認証, "B", 9) 認証 = 文字列追加(認証, "C", 9) Print 認証 認証 = 文字列追加(認証, "A", 9) 認証 = 文字列追加(認証, "B", 9) Print 認証 認証 = 文字列追加(認証, "C", 9) Print 認証 Sleep(2) Function 文字列追加(文字列, 追加文字, 文字数制限) 戻り値候補 = 文字列 + 追加文字 If LENGTH(戻り値候補) > 文字数制限 Then 戻り値候補 = COPY(戻り値候補, 2) EndIf Result = 戻り値候補 FEnd
あ、追加文字が一文字に依存しちゃってるね まぁ、文字列に履歴を保存するイメージのサンプルなのでご愛嬌ということで
>>1-2 (・ω・`)乙 これは乙じゃなくてポニーテールなんだからね!
ようやくまともなテンプレが作られたかw
>>11 ありがとうございます
参考にさせてもらいます!
ある特定の文字列を探して、そこから特定の文字の先頭があるまでコピーしたいんですが、やり方が思いつきません。 例えば、 「13 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2012/10/23(火) 13:09:36.48 ID:RTgu/9T20」がスタートで 「14 名前:名無しさん@お腹いっぱい。」がエンド。 つまり13のコメントだけ取得したい場合はどんな方法がありますか?
16 :
名無しさん@お腹いっぱい。 :2012/10/23(火) 20:50:17.90 ID:gOb1znBP0
日本語がおかしかったですすいません。 1.クリップボードに 「あいうえお 12345 かきくけこ」 この文字列があります。 2.「お」の次の文字から「か」の前の文字までコピーしたい。 こういう時はどうすればいいんですか? 結果的に「12345」がコピーされていて欲しいんですが。
HELP読めば書いてある
18 :
名無しさん@お腹いっぱい。 :2012/10/23(火) 21:17:25.58 ID:gOb1znBP0
>>17 そこをどうか・・・
何卒お願いします神様
19 :
名無しさん@お腹いっぱい。 :2012/10/24(水) 20:26:12.15 ID:ImpnG5jm0
チェックボックスにチェックを付ける方法を教えて
20 :
名無しさん@お腹いっぱい。 :2012/10/24(水) 20:28:16.51 ID:6ga/GquW0
irfanviewで1A、1B、1Cという画像を繋げてパノラマ画像を作り「1」という名前に 以下、2A、2B、2Cを「2」に、という作業を100回繰り返す 下ので一応出来るんですが1回毎に「Error!Can't load "」というメッセージが出て 一々消しているので他の作業が出来ません エラーメッセージが出ないようにするにはどう書けばいいんでしょう? For i = 1 to 1//00 s_app = "C:\Program Files\IrfanView\i_view32.exe " //自環境のパス設定 s_file_1 = "C:\" + i +"A.gif" s_file_2 = "C:\" + i +"B.gif" s_file_3 = "C:\" + i +"C.gif" s_cmd = s_app +"/panorama=(2,"+ s_file_1 +","+ s_file_2 +","+ s_file_3 +",)/convert=C:\"+ i +".gif" exec(s_cmd) title=getid(get_active_win) sckey(title,vk_return) //←これで消してます Next
それはirfanview側の問題じゃないの
Windows8でuwscが動いてる人いる?
これのexeからソースを取り出す方法ってある?
24 :
名無しさん@お腹いっぱい。 :2012/10/25(木) 21:10:48.81 ID:YdixM4uR0
IEで二つの同じタイトルのブラウザを別々に1つずつのUWSCで作業自動化したいんだけど GetActiveOLEObj使うとどっちのUWSCも片方のブラウザしか認識しない 何か対策ありませんかね?
GetActiveOLEObjの引数を正しく設定する
Operaのアクションコマンドからuwscスクリプトへ引数がどうしても渡せません 今は仕方なくクリップボードを使っていますがどなたか引数がちゃんと使えている人いますか?
>>18 POS関数だけで出来る。
POSの所を読んでやり方の筋道が思い浮かばないなら向いてない。
>>20 irfanviewの問題だけどコマンドラインオプションに半角スペースが挟まってないせいかもねirfanviewの仕様次第だけども
>>16 moji="あいうえお<#CR>12345<#CR>かきくけこ"
print betweenstr(moji,"お<#CR>","<#CR>か")
見逃してたわ〜 何年も使ってるけど見逃してたわ〜 か〜っ
あるあるw
31 :
名無しさん@お腹いっぱい。 :2012/10/27(土) 00:04:44.74 ID:+t6NjlUk0
すいません。テキストで wから始まる8桁の数字を探したいんですが やり方がわかりません 教えてください
32 :
名無しさん@お腹いっぱい。 :2012/10/27(土) 01:21:41.49 ID:I32pGO/EP
正規表現を使う moji = "w12345678" //文字列例 regex = CREATEOLEOBJ("VBScript.RegExp") regex.Pattern = "\D" //正規表現のパターン regex.Global = True //マッチングする文字が見つかったらその時点で終了 regex.IgnoreCase = True //大文字小文字を区別しない ans = regex.Replace(moji, "") //上記のパターンに一致する文字を消す(""に変換) print ans //プリント表示
w[0-9]{8}にマッチ、かつ9文字、ではないかな。 別解として、ループ内でPOSで1文字づつ切り出してチェックかな。
w[0-9]{8}[^0-9] だろ
それだとw01234567aにマッチしてw01234567にマッチしない
36 :
名無しさん@お腹いっぱい。 :2012/10/27(土) 13:03:52.99 ID:+t6NjlUk0
>>32 wも表示したいんですがそれはできませんか
最後に ? が必要だったか
>>32 は正規表現を使えってアドバイスしただけで
パターンやらなにやら適当だぞ
UWSCスレであって正規表現を細かく教えてあげるスレじゃないしな
正規表現は奥が深すぎるので一文字づつ切り出してチェックする関数のほうがいいかもな
>>36 公式サイトのFAQにも載ってるけど
>>32 のように CREATEOLEOBJ("VBScript.RegExp")使えばUWSCでも正規表現使えるっていうサンプルだから少し変えないと駄目だよ
正規表現の解説サイトならたくさんあるから探してみたら?
http://www.mnet.ne.jp/~nakama/ 無理に使わなくてもPOSでwがある位置を調べてCOPYでその位置から8文字(w入れたら9文字?)を抜きだして数値ならみたいな処理でもいいと思うしやり方はいくらでもあると思う
42 :
名無しさん@お腹いっぱい。 :2012/10/27(土) 14:37:32.61 ID:xef2zPet0
おしえて、えろいひと テンキーの数字は、VK_NUMPADxですが、 NumLock オフ時のテンキーの↑↓←→(2468)って何でしょうか… カーソルキーの↑↓←→と挙動が違うソフトなもので…orz
>>42 記録モードで実際にキー押して調べるといいんじゃないかい?
>>42 仮想キーじゃなく実キーの場合はUWSCでは無理じゃ?
MSDNライブラリでDirectInputとか調べてみたら?
>42 UWSCが取り扱うのは「仮想キーコード」だけど、 そのアプリはもっと低レベルの「スキャンコード」検知してそうな悪寒。
>>32 >regex.Global = True //マッチングする文字が見つかったらその時点で終了
このコメント逆じゃね?
47 :
42 :2012/10/28(日) 13:29:16.74 ID:m0Snpspy0
>>43-45 えろい方々thx
やはり無理っぽいので別の方法を考えまつ
質問です。 STATUS関数で、対象のウィンドウが閉じた場合、IDが無効になるんですけども、 その状態だとSTATUS関数のところでUWSCが応答なしになってしまうんですね。 で、通常だとSTATUSチェック直前にGETIDするんでしょうけども、 ウィンドウのビジー終了待ちなんかでループで待ってると、 そのウィンドウが閉じられるだけじゃなく未知のタイトルに変わったり何なりする場合に、 どう対応するのがスマートかなと。 ↓の関数は、対象ウィンドウがST_BUSYではない、かつ想定の遷移先タイトルになるまで待つ というつもりの関数だったんですが、応答なしの原因になっていたことが判明し、 後付けでゴテゴテと色々盛ってる最中のものです。
FUNCTION waitWindowIsReady(lWID, lStrTitle, lStrClass="", lWaitLoopNum=60, lWaitUnitSeconds=1) RESULT = FALSE lFlgStatOk = FALSE IFB lWID = -1 THEN PRINT "waitWindowIsReady:lWID=-1 SLEEP(5); EXIT ENDIF lDefWID = lWID lDefStrTitle = status(lWID, ST_TITLE) FOR lI=0 TO lWaitLoopNum lWID = GETID(lDefStrTitle) IFB lWID = -1 THEN lWID = GETID(lStrTitle) IFB lWID = -1 THEN PRINT "waitWindowIsReady:lWID=-1(lI=" + lI + ") SLEEP(5); EXIT ENDIF ELSEIF !(lWID = lDefWID) THEN PRINT "waitWindowIsReady:lWID≠lDefWID(lI=" + lI + ") SLEEP(5); EXIT ENDIF lFlgStatOk = _ (status(lDefWID, ST_TITLE) = lStrTitle) AND _ (status(lDefWID, ST_BUSY) = False) IFB !(lStrClass="") THEN lFlgStatOk = lFlgStatOk AND (status(lDefWID, ST_CLASS) = lStrClass) ENDIF IF lFlgStatOk THEN BREAK SLEEP(lWaitUnitSeconds) NEXT RESULT = lFlgStatOk FEND
FUNCTION waitWindowIsReady(lWID, lStrTitle, lStrClass="", lWaitLoopNum=60, lWaitUnitSeconds=1) RESULT = FALSE lFlgStatOk = FALSE lHND = IDTOHND(lWID) FOR lI=0 TO lWaitLoopNum IF !isExistProcess(lHND) THEN EXIT lFlgStatOk = (status(lWID, ST_TITLE) = lStrTitle) AND !status(lWID, ST_BUSY) IF !(lStrClass = "") THEN lFlgStatOk = lFlgStatOk AND (status(lWID, ST_CLASS) = lStrClass) IF lFlgStatOk THEN BREAK SLEEP(lWaitUnitSeconds) NEXT RESULT = lFlgStatOk FEND FUNCTION isExistProcess(lHND) RESULT = !( HNDTOID(lHND) = -1 ) FEND すっきりw
51 :
名無しさん@お腹いっぱい。 :2012/10/29(月) 21:39:14.40 ID:n98F/FTUP
何がしたかったのかがわからないw IDの戻り値が-1(存在しない)時にスルーさせたかったの?
>>51 機能
・対象IDのウィンドウがREADY状態(BUSY状態ではなく、タイトルも指定のものになる)まで待つ。
・READYになって待機が終わったのか、タイムアウトで終わったのかが、戻り値で判る。
・待機はブラウザで特に必要。IEならOLEでチェックできるが、他のブラウザは出来ない。
問題
・待機中、READY判定する前にウィンドウが閉じてしまった場合、
STATUS関数の所でUWSCが無限に止まります。(タイムアウトしてくれない)
・そのためSTATUS関数の直前にIDの有効をチェックする必要があるが、
予期しないタイトルに変化する場合などGETIDで再取得できないケースあり。
解決
・プロセスID用の関数で解決できましたとさ。
firefoxで待機確認はできなかったっけ? 何個か前のスレであった気がするが
whileやrepeatとかを使った繰り返し処理を、 一定時間だけやって抜け出すスマートな方法って無いですか? SLEEPとカウンターを絡めたとしても、 中の処理の時間がまちまちだと、 ピッタリ10秒で終えるとか厳しいですよねぇ。 GETTIMEで実時間を測るしかないんでしょうか? SLCTBOXのタイムアウトみたいなのがあればいいんですが・・・
public flag = true thread 関数() sleep(10) flag = false procedure 関数() while flag wend fend こんな感じでどうかな
中の処理でっていうのはwhile文の中でさらに条件によってsleep何個も使うとかそういう事? 普通の処理ならforでもwhileでも使ってsleep(1)でカウント分だけ回せばそうそう時間がずれるほどの処理に時間かかることないと思うけど
スレッドわけてexitexitしちゃえば
失礼します RecIEで記録する時に IEのアドオンを設定した状態で起動できないでしょうか? WindowsXPs2 よろしくお願いします
>>55 ありがとうございます。勉強になります。
で、↓試してみたんですけど、
このままだと上のfukidasi(flag〜も表示されず、
5秒経っても10秒経っても全然抜け出せません。
whileの中の、SLEEP(0.01)を有効にすると
抜け出せるんですがmsgboxが機能せず、
SLEEP(0.001)を有効にすると、抜けだし&msgbox両方OK
と訳分からん状態です。なんでなんでしょうかね?
まぁ、動けばいいんですけど、なんか腑に落ちない感じがして・・・
public flag = true
thread 関数()
fukidasi(flag,100,0)
sleep(3)
flag = false
fukidasi(flag,100,0)
procedure 関数()
cnt=0
while flag
fukidasi(cnt)
cnt=cnt+1
// SLEEP(0.01)
// SLEEP(0.001)
wend
msgbox(cnt)
fend
60 :
名無しさん@お腹いっぱい。 :2012/10/30(火) 09:29:17.72 ID:6WPQrN5R0
CPUの負荷が高すぎて処理落ちしてるんじゃない? sleep(0)でも入れておくことで他のスレッドにタイムスライスの残り時間渡すとかumiumiさんも言ってたしウィンドウメッセージの処理が出来なくなってるんだと思うよ
正確には負荷とは違うか
>>54 > 中の処理の時間がマチマチ
その処理を中断してでもピッタリ終えようとすると色々問題では?
中断するまでもなくすぐ終わる処理なら誤差範囲に収まるのでは?
GETTIMEで実時間を判定する関数を使って一行で抜けるように書き、
それを中断可能箇所全てに挟み込むのが結局一番スマートに思えますが…
sleepが無いとダメなのはスレッドが処理を占有しすぎるためで msgboxが出ないのは 関数() でwhileを抜けてmsgboxに行くまでに スクリプト自体が終わってしまうからだろうね thread 関数() fukidasi(flag,100,0) sleep(3) flag = false fukidasi(flag,100,0) sleep(1) // ←追加
UWSC..exeの名前変えると起動しなくるんだが。 どうすれば変えても起動可能になる? このふざけた制限を消す方法教えてくれ
>>64 バイナリエディタで
55 57 53 43 → 適当な4文字
75 77 73 63 → 適当な4文字
こういう話じゃなかったらスマソ
>>64 目的によっては、作成済みのをexe化してそれを起動とか。
>>65 それだとタスクマネージャー上のプロセス名変わらないんだよ
タスクマネージャーの表示プロセスを変えたい
ぼったくりpro版買う以外の方法ねーのか
ゲームの不正監視のすり抜けが目的なの?
動かなくするほうが不正だろ 本来あるべき状態に戻すだけ
べき論きたー
>>69 お前に使われるために作られたツールじゃない。
お前の理想など知ったことではない、どうでも良い。
この制限の目的はネットゲームのBOT不正利用に
UWSCが悪用されることを防ぐことだと推測される。
目的が達成されているようで何よりです。
まぁ俺はMyBOTにも使ってるけどね
厳しくないゲームに対してだけど
俺以外でBOT利用できない奴がいるというのは喜ばしいw
72 :
36 :2012/10/30(火) 20:26:36.79 ID:HZbQmbU/0
moji = "w12345678" //文字列例 regex = CREATEOLEOBJ("VBScript.RegExp") regex.Pattern = "w[0-9]{8}" //正規表現のパターン regex.Global = True //マッチングする文字が見つかったらその時点で終了 regex.IgnoreCase = True //大文字小文字を区別しない ans = regex.Replace(moji, "") //上記のパターンに一致する文字を消す(""に変換) print ans //プリント表示 REplaceのせいで条件の文字が全て消えてしまいました。(当然ですが・・・) REplaceで条件の文字以外""に変換することって出来ますか?やりたいことはマッチした文字だけを抽出することです。
>>72 VBScript.RegExpの仕様を確認しましたか?
TRUE/FALSEを返すだけの役立たずじゃない気がするが俺は確認してない。
74 :
36 :2012/10/30(火) 20:58:25.80 ID:HZbQmbU/0
>>73 よくわかんないです。
moji = "w12345678" //文字列例
regex = CREATEOLEOBJ("VBScript.RegExp")
regex.Pattern = "w[0-9]{8}" //正規表現のパターン
regex.IgnoreCase = True //大文字小文字を区別しない
regex.Global = false //マッチングする文字が見つかったらその時点で終了
print regex //プリント表示
これだと数字は表示されるけど、"w"が表示されない
print "c" + regexだと何故かエラーになる・・・
よく確認したら数値の順番がバラバラです。。。 もうだめだ。。。
>>72 こんなのじゃ駄目なのか?
str = "ABCDEFw564986154GHIJK"
print wns(str)
FUNCTION wns(str)
dim i = 1
REPEAT
ws = POS("w",str,i)
if ws > 0
ws2 = COPY(str,ws+1,8)
ifb CHKNUM(ws2) = true
RESULT = "w"+ws2
EXIT
endif
endif
i=i+1
UNTIL ws = 0
RESULT = 0
fend
>>76 ありがとうございますプログラミングの神様!!
>>74 str = "ABCDEFw564986154GHIJK"
re=CreateOleObj("VBScript.RegExp")
re.pattern = "w\d{8}"
re.Global = True
re.IgnoreCase = True
match = re.Execute(str)
for i = 0 To match.Count-1
print match.Item(i).Value
next
>>74 本家のリファレンスを自力で何とか読解しようとしない時点で
プログラマとしての腕はそれ以上伸びませんので、
RegExpを使うのは諦めて上の方法でやるのが宜しいかと。
読めればですが。
CreateOleObjしたものの使い方は、UWSCのマニュアルじゃなくて 各COMコンポーネントごとのマニュアルを見ないといけない事に気付いてないんだろうね COMなんてプログラム言語が異なっていても使い方は同じなんだから "VBScript.RegExp"でググればサンプルはいくらでも見つかるのに
UWSCはAPIとかDLLとか外部の物を持ってきて使えるのが強みなんだけど初心者にはどれが外部の機能かわからないから難しい部分はあるが ただ正規表現とかはどの言語でも使い方はほぼ一緒なんだから適当に検索すれば見つかったはずだが
ちっせぇ事だけど、ID:6WPQrN5R0が具体例を一切挙げずに 上から目線なのがちょっと気になる俺w スクリプト適当に拾ってきて貼り付けるだけのミジンコじゃ無さそうなのは 文面からなんとなく分かるんだけどな
あ、すまんID:6IZ9AUUp0だた・・・
>>71 低脳乙
UWSCできるのはマクロ
BOTっていうのはパケ解析して動作せるのもので質が違うんだが
UWSCでBOTとか無知は死んでいいよ
85 :
54 :2012/10/30(火) 23:54:44.91 ID:7vDPQomb0
いろいろアドバイス有り難うございました。 精進します。
>84
6IZ9AUUp0を擁護するつもりも、貴方の揚げ足取るつもりも無いんだが、
>71のBOTは↓の3つ目の意味だと思う。 (勿論貴方の言うBOTも実在する)
ttp://ja.wikipedia.org/wiki/Bot まぁオンゲとかやらん人間だったら、知らなくても恥じる必要は無い。
むしろ>71みたいな事を嬉々として語っちゃう6IZ9AUUp0のが痛い。
ちなみにUWSCがリネーム制限してるのは、自身を呼び出す為であってBOT云々は関係無いと思われる。 そもそもexeの名前を変えても、他の情報(バージョン情報とか)でバレる。
他の情報はバイナリで書き換えて、あとファイル名だけだだから言ってんだろうが。 専スレのくせに使えねえんだなこの糞スレ 低レベルなところで聞いたのが間違いだったわ 相手してやるのも疲れたからじゃあなくず
貴方が逝くべき先はEmbarcadero(もしくはBorland)製品のバイナリの弄るようなネタを扱ってるスレだ。 あと確実に答えをくれそうな相手を見定める能力が無いのを、他人のせいにすうのはみっともない。
人に聞く態度を知らない無知で可哀そうな ID:dU/tE5XU0 (4回) ざまぁww
>>86 ネトゲのBOTはパケット解析して作られたものを指すもので、UWSCで出来るようなしょぼ動作は全てマクロなんだよ
まぁオンゲとかやらん人間だったら、知らなくても恥じる必要は無い
6IZ9AUUp0自演してんじゃねえよカス
最後の3行が無ければID:6IZ9AUUp0もここまで叩かれなかったろうにw
まさに薮蛇
6IZ9AUUp0に突っ込まれないようフォローしたつもりだったが、逆効果だったようだな。すんまそん。
BOTかマクロかなんてどうでもよくね? 名前も変えられない程度の奴が騒いでたそれだけのことだ
頭のハッキングツールが必要だったってオチ
>>96 6IZ9AUUp0自演しつこすぎ
お前、AIの意味分かってねーだろ
画像認識なんて状況判断できないしパケありきのもの
UWSCはただのマクロ
パケット判定できないから繰り返してるだけだろうが
ネトゲにおいては厳密に区別されてんだよ
素人自演野郎は引っ込んでろ
>>98 変えられない程度?
調子乗った口きくならやりかた書いてから言えや
出来もしねーくせに偉そうな態度取ってんじゃねえよ
俺はROのkoreいじって作ってたこともあるんでね
自演と低脳しかいねーのなマジで
やり方も書かずに、自演とか煽りとか使えなすぎ
黙って聞かれたこと答えてりゃいいのに、まあ出来る奴自体いないんだろうね
いや〜香ばしいなw しょせんネトゲ廃人はネトゲ廃人か…
>100 UWSC単品ではパケ判定はできなろうけど、パケ解析アプリ起動しといてそっち監視すればやれん事もない。
厳密な意味はともかくネットゲーマーの間で一般的には、 マクロ=マクロそのもの bot=自動戦闘してるプレーヤー って使われ方だけどね。
不正ツーラーの話なんざどうでもいいので巣に帰って好きなだけやれ
>>90-91 で名前変えてるじゃんw
煽って答えが出てくるのはチートスレとかvip
一般的なスレで他人を煽ってもメリットなんて一つもないのにw
UWSC実行中他のwindowがアクティブにならない方法ってないですか?メッセンジャーとか来ると困るんですが
107 :
名無しさん@お腹いっぱい。 :2012/11/01(木) 20:17:43.29 ID:GL3Sn6V7P
ACWかCTRLWINじゃ駄目なの?
別スレッドでアクティブウィンドウの変化を監視させるとか
メッセンジャーの方でアクティブにしないようにしろよ
もしあれなら直接送れば
アクティブウインドウのID取得→ハンドルに変換→DOSCMD("taskkill /f /im <#DBL>" + HND + "<#DBL>")
まちがえた /im じゃなくて /pid だな
ハンドルではなくプロセスIDにすべきでしょ
http://uproda.2ch-library.com/596094EN6/lib596094.bmp PW1
上記の様なマップの宝箱や階段をクリックするブラウザゲーをIEでやっています
MAP巡回をするプログラムは出来たのですが,宝箱の画像認証に課題があります
上記ゲームで宝箱の画像認証はできたのですが,画像にしてしている様に
・宝箱は光ったり暗くなったりして色が変わります
ですので認証する際の画像は
・宝箱の色の光った時と暗くなった時の色彩の変化の少ない所
・宝箱の色が一様な所
を認証できる範囲で一番大きな6×3位の画像
CHKIMG("A.BMP",0,60,160,729,480,-1,IMG_MSK_BGR5からIMG_MSK_BGR6)
で認証しています
しかしながら色の誤差を大きくしてしまっているため,他のMAPの別の所に反応してしまいます
そこで画像の
・宝箱の色彩の変化の大きい所
を選択して宝箱のみ認識する画像にしようとしましたが今度は画像認証を行ってくれませんでした
皆様にお聞きしたいことは
・この様な場合皆様は画像の認証をする際に気を付ける事はしていますか?
・また画像認識できないときの対処のためのプログラムの改善
・綺麗なプログラムについてもアドバイス頂けたら嬉しいです
ちなみにプログラムを下の様にMAPばかり認証してしまった場合に次の処理へ行く様には書き換えていますが進むのには時間がかかってしまってプログラムと共に画像認識を改善したいと考えています
WHILE TRUE
通った道の記録
if 箱が見つかった and boxcount<10
箱をクリック
boxcount++
elseif 階段が見つかった and kaidancount<10
kaidancount++
elseif 青い人の検索 and bluemancount<10
bluemancount++
else
道の検索とクリック
endif
WEND
プログラム詳細も載せておきます(PW1)
http://uproda.2ch-library.com/596096TxO/lib596096.uws
画面外にあるウィンドウに対して画像認識する方法はあるでしょうか 例としては1920,1080のモニタであるウィンドウを2000,1に移動 そのウィンドウに対して画像認識 mouseorg(GETID(GET_ACTIVE_WIN),2) ACW(GETID(GET_ACTIVE_WIN),2000,1) if chkimg("a.bmp",0,0,0,800,600)then fukidasi("成功",0,0)
透過色の設定を-1にして形のチェックじゃいけないの?
3Dポリゴンの色認識が反応しないんだけどなんで?
>>115 光るアニメーションのうちの任意の1枚で、他と混同がなく、
アニメーションの最も遅い瞬間で、
コントラストのなるべくはっきりしたユニークな一枚、
そのコントラストの部分が左上に来るように切り取った8x8ぐらいのを使う。
そいつをSLEEP(0.1)挟んで数回連続CHKIMGし一度でもヒットしたらループ打ち切り。
>>116 XPだとダメ。他のウィンドウの下もダメ。
一時的に画面内に持ってきて判定してすぐ元の位置に戻すとか、
GETITEMで取れるやつで何とかするとか
>>120 スペックかいてなかったです申し訳ない windows7pro64bitです
XPではだめということは7では方法があるんでしょうか
一時的に画面内・・・その発想はなかったです 画面内には開ききれない量のウィンドウを
同時処理したいので、できる限りこの方法以外があればいいのですが・・・
>>115 対象URLとか隠せよ十中八九規約違反だろw
これ運営が見て対策されたらスクリプト作り直しになるぞw
広めるんじゃない、おまえには後ろめたさが足りないw
・IFBがIFになってるぞ
・所々インデントがいい加減
・大文字か小文字か統一しろよ
・THENつけるかつけないかも統一しろよ
・演算子の前後の空白、代入時は詰めるとかのルールならFORのときも詰めたら
・関数名CLICKは俺ならclickForCheckAvoidanceにするな。
後々関数が増えてきた時に用途がブレないようにするため。
・今のうちに機能ブロックごとに別ファイルに分割したほうがいいかもね
>>121 XP以降は、実際に表示されない部分の画像はOSが描画処理しないことで
パフォーマンスを上げているしくみ
画像が存在しない
>>122 IFBはVer 4.7からIFでもIFBでもどちらでも使えるようになってるよ
>>115 進むのに時間がかかるの意味がちょっとわからないが短絡評価(複数条件がある場合初めの条件が一致したら後の条件は無視)ならできるよ
スクリプトの初めの方にでも option SHORTCIRCUIT を付け加えておく
ブラゲー面白そうだったらやってみようと思ったがハンゲかよw それはさて置き、CheckColorでRGB値サーチって手法もあるっちゃある 有効値を+-20とかにして「○○っぽい色」があれば周辺のXY座標を再サーチして 更に「○○っぽい色」があればクリックとか
UWSCって7の64bitだとまともに動かないのかよ、今知ったわ。 ペイントで赤色適当にぬって、$0000FF指定してカーソル移動させようとしたのに無反応とか 何だこの欠陥ソフト
>>127 欠陥ソフトなのでもう使うのは辞めてこのスレにも来ないでね。
このソフトのことはもう忘れてくれ。
分かったわ。ソフトが糞なら利用者も糞だな 7対応したら起こしてくれ
>>129 文句あるならお前がUWSCより優秀なソフトを自作して使えばいいだけ
キチガイ死ねカス
131 :
115-116 :2012/11/04(日) 18:22:16.63 ID:pAPM1NcD0
皆様ありがとうございます!
>>117 さん
透過色-1はわかるのですが、形のチェックについて以前ググったときは赤のドラえもんと青のドラえもんが同じ判定をされて、
輪郭とまわりの淵?がはっきりしていなければならないといった認識で,今回の宝箱の周囲の赤色は少し変わるので上手くいかない
のかなといった事を考えていました(私が間違った事を言ってる可能性あります)
詳細な使い方については調べきれずとりあえず使ってみて上手くいかなかったのでほったらかしにしている状況です・・
形のチェックと、透過色との組み合わせについて参考となりそうな検索手段を教えて頂けると幸いです・・・
>>119 さん
画像認識のノウハウとても参考になります^^
8*8のユニークな部分を左上に持ってくるとは最初の一点で違うと判断されたら次へ移るということで高速に判定できるのを
狙われているのでしょうか?
132 :
115-116 :2012/11/04(日) 18:31:59.22 ID:pAPM1NcD0
皆様ありがとうございます!
>>117 さん
透過色-1はわかるのですが、形のチェックについて以前ググったときは赤のドラえもんと青のドラえもんが同じ判定をされて、
輪郭とまわりの淵?がはっきりしていなければならないといった認識で,今回の宝箱の周囲の赤色は少し変わるので上手くいかない
のかなといった事を考えていました(私が間違った事を言ってる可能性あります)
詳細な使い方については調べきれずとりあえず使ってみて上手くいかなかったのでほったらかしにしている状況です・・
形のチェックと、透過色との組み合わせについて参考となりそうな検索手段を教えて頂けると幸いです・・・
>>119 さん
画像認識のノウハウとても参考になります^^
8*8のユニークな部分を左上に持ってくるとは最初の一点で違うと判断されたら次へ移るということで高速に判定できるのを
狙われているのでしょうか?
133 :
115-116 :2012/11/04(日) 18:56:55.13 ID:pAPM1NcD0
>>122 さん
プログラムあまり上手ではないので参考になります!
プログラム検索しているとみなさん見やすくてとても参考になる・・
>>124 さん
ありがとうございます!
そんなオプションがあったんですね
画像判定処理に時間がかかるわけではなく、アルゴリズムに問題があるという意味で遅い
のですが仮想化してて重い故今後役に立つ可能性大です!
ご意見から察するに分岐で複数の判定を要する際はは不要な判定も済ませて実行しているのですか
>>125 ,126さん
プログラム拝見させて頂き思い浮かびました
CHKIMGでは既存の画像を使い、誤認識を防ぐためにpeekcolorを使って周辺のユニークな色1点を検索する事で安定するのではないかと!
最初Peekcolor一点の検索だとMAPの色によっては沢山検索しないといけない気がしましたのでこの方法で試してみたいと思います
134 :
名無しさん@お腹いっぱい。 :2012/11/04(日) 23:58:49.47 ID:KbkfVQ2v0
2012/11/5 19:00 ↑ここの5の前に0を追加することってできますか?
はい
>>134 s1 = "2012/11/5 19:00"
tmp = s1
y = Token("/", tmp)
m = Token("/", tmp)
d = Token(" ", tmp)
t = tmp
if Length(m) < 2 then m = "0" + m
if Length(d) < 2 then d = "0" + d
s2 = y + "/" + m + "/" + d + " " + t
MsgBox(s2)
strTest = "2012/11/5 19:00"; strSep = "/ :"; DIM strDt[6] FOR lI=0 TO RESIZE(strDt) strDt[lI] = VAL(TOKEN(strSep, strTest)) IF strDt[lI] = ERR_VALUE THEN strDt[lI] = 0 NEXT PRINT strDt[0] + "/" + strDt[1] + "/" + strDt[2] + " " + strDt[3] + ":" + strDt[4] + ":" + strDt[5] PRINT getDateTimeStrByGettimeSeconds(transGettimeSeconds(strDt[0], strDt[1], strDt[2], strDt[3], strDt[4], strDt[5])) FUNCTION getDateTimeStrByGettimeSeconds(lGettimeSeconds) GETTIME(lGettimeSeconds/60/60/24, "2000/01/01 00:00:00") RESULT = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + " " + G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2 FEND FUNCTION transGettimeSeconds(lOffsetYears=2000, lOffsetMonths=1, lOffsetDays=1, lOffsetHours=0, lOffsetMinutes=0, lOffsetSeconds=0) RESULT = offsetGettimeSeconds(lOffsetYears-2000, lOffsetMonths-1, lOffsetDays-1, lOffsetHours, lOffsetMinutes, lOffsetSeconds) FEND FUNCTION offsetGettimeSeconds(lOffsetYears=0, lOffsetMonths=0, lOffsetDays=0, lOffsetHours=0, lOffsetMinutes=0, lOffsetSeconds=0) lStrYear = "" + (2000 + lOffsetYears + INT(lOffsetMonths/12)) lOffsetMonths = lOffsetMonths MOD 12 IFB lOffsetMonths < 0 THEN lStrYear = lStrYear - 1 lOffsetMonths = lOffsetMonths + 12 ENDIF lStrMonth = "" + (1 + lOffsetMonths) IF LENGTH(lStrMonth)<2 THEN lStrMonth = "0" + lStrMonth RESULT = _ GETTIME(0, lStrYear + "/01/01 00:00:00") + GETTIME(0, "2000/" + lStrMonth + "/01 00:00:00") + ((( (( (lOffsetDays * 24 + lOffsetHours) * 60 + lOffsetMinutes )) * 60 + lOffsetSeconds ))) FEND
s1 = "2012/11/5 19:00" t = s1 s2 = Token("/",t) + "/" + Copy(100+Val(Token("/",t)),2) + "/" + Copy(100+Val(Token(" ",t)),2) + " " + Copy(100+Val(Token(":",t)),2) + ":" + t MsgBox(s2)
S1 = "2012/11/"+"0"+"5 19:00" MSGBOX(s1)
i = "2012/11/05 19:00" msgbox(i)
msgbox("2012/11/05 19:00")
k1 = "2012/11/06" k2 = replace(trim(k1),trim(k1),"2"+"0"+1"+2"+/"+"/"+"1"+"1"+"/"+"0"+"5"+" "+"1"+"9"+":"+"0"+"0") if pos(trim(k2),"2012/11/05 19:00") > 0 then msgbox(trim(k2))
CHKIMGを使った際に返される座標値が-999999,-999999ってかえってくるのですが この原因が分かる方いませんか?
>>143 chkimg()の返値がFalseなんじゃないの?
>>143 ERR_VALUE = -999999
ERRなのですか・・・ プログラム中でその様な値となるので、画像の検索用のプログラムで複数回調べるときちんと値は入っていました ERR_VALUEとFALSEは一緒の事ですよね?
chkimg()の返値がFalse だから、座標に-99999が格納される仕様なんじゃないの?
>>146 検索用とやらで座標取得できてるなら本スクリプトに何か問題があるんでしょ
情報が少なすぎるし晒してみなよ
関数内でchkimgして呼び出し元でG_IMG_X/Y使おうとしてるとか
原始的だけど、カーソル移動やクリックの動作の直前に fukidasiやprintで座標出してみるといいかも。 どこで躓いてるかすぐわかる。
151 :
名無しさん@お腹いっぱい。 :2012/11/10(土) 13:38:19.95 ID:yR0gLTmO0
マウスのカーソル位置を監視し、タスクトレイのメーラーアイコンの見た目の変化を検出するとクリックしてメーラー画面を開くスクリプトを組んだのですが 思い通り動作しないです・・・・ おかしいところがないか見てください。初UWSCです。鶴亀というのはメーラーのソフト名です While True WHILE TRUE ifb GETID(GET_ACTIVE_WIN) = GETID("turukame.exe") then IFB CHKIMG("a/turukame") = G_MOUSE_X y1 = G_MOUSE_Y BTN(LEFT,CLICK) Open(FileName :="C:\turukame\turukame.exe") Endif Endif
どこから突っ込んでいいのかわからない・・・ とりあえずIFB ○○ = ○ = ○なんて判定の仕方はない IFB ○○ = ○ and ○○ = ○ なら使える 判定が鶴亀とかいうツールがアクティブの時のみだけどそれ以外の時に変化があるのでは? WHILE TRUEに対してのWENDがないけどスクリプトの一部?というか無限ループの中に無限ループ? BTN(LEFT,CLICK) ってどこクリックさせてるの? G_MOUSE_X y1 いきなり知らない変数出てきてるけどこれ何w Open(FileName :="C:\turukame\turukame.exe")ってすでにアクティブウィンドウの時の判定なんだから開いてるんじゃないの?
>>151 ・CHKIMGの戻り値は true または false なので、マウスカーソルの座標と比較しても無意味。
画像に一致した座標は G_IMG_X と G_IMG_Y に返る。比較するならこっちと。
・Openは標準関数にはないし、:=使ってるってことは、COMのメソッド呼び出しなんだろうけども
hoge.Open(FileName :="C:\turukame\turukame.exe") の様にCOMオブジェクト変数が必要
turukame.exeを実行したいだけならexec関数でいいのでは?
・タイトルに turukame.exe が含まれたウィンドウがアクティブになるのかが、そもそも怪しい。
常識的に考えて .exe まで入れるものかな?
ウインドウIDからEXEのフルパスを得て、turukame.exe なのかを判断すべきなんじゃ・・・
そもそもマウスカーソルの位置を監視する意味っていうのがわからないなぁ 画像のチェックで変化を監視するなら画像のチェック>変化があったらその場所をクリック(ツールを開く?)だけでいいと思うし
while true IFb CHKIMG("turukame_icon.bmp",,0,0,1920,1080) then BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y,10) //BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y,10) //msgbox("メールを読み終えたらOKを押してね") endif SLEEP(0.1) wend ・CHKIMGの画像検索範囲を狭めれば高速化 ・メーラーアクティブにダブルクリックが必要なら2つめのBTNも有効に ・メール未読状態継続でiconに変化がない場合はmsgboxを有効に ・お好みに合わせてSLEEP()で調整 反応させたいときのアイコンをPrintScreenボタンでキャプチャし、 画像ソフトに貼り付け、切り出してスクリプトと同じ場所にbmpで保存
>>151 試しに同じ動作のものを書いてみようとしたが、意外にいい線いってるかもしれん。
常駐時の通常アイコンが画面内になく、なおかつアクティブウインドウが秀丸でなければ
秀丸メールを実行したいんだよね?
その考え方を生かすなら、ヒントとしては
>GETID("turukame.exe")
そこはプログラムの実行ファイル名じゃなくて、ウインドウのタイトル(一部でもOK)。
ちゃんとバージョンアップしてるなら GETID("秀丸メール")
あと、秀丸は確かに、既に起動していて常駐の状態でも実行ファイルを再度実行することアクティブになる。
exeファイルの実行はこちらの関数。
EXEC("C:\turukame\turukame.exe")
あと、ifbじゃなくてIF
while trueじゃなくて、while chkimg〜ですっきりするかも
whileの中にIFを使って、IFの条件に合う場合はまたwhileのループに戻る方法はこちら
ttp://canal22.org/tag/while/ IFの処理内容にCONTINUE。
>>156 while chkimg〜 だとsleep入らないからマズイよ
それと、ifbは旧バージョンからのなごり。(ブロック形式のIF文) 現在ではifでもよい
ブロックIF文の時のENDIF忘れの防止にもなるからいまだにIFB使ってるわ
ifb=ifになったんだっけ 既存のものの書き換えで済むものしかいじってないから未だにifb使ってるけど
>>157 一行じゃなくブロックの場合はIFBって認識だったけど
いつの間にか変わったんだねw
質問主がやろうとしたのは恐らく
while chkimg〜
sleep(1)
IF アクティブういんどーID = 秀丸エディタID こんてぃにゅー
wend
EXEC 秀丸メール
的な。
このままじゃ一度新着メールが来てループを抜けると終わってしまうから
さらにこれを囲って、何らかの条件でループさせる必要があるけど。
一行の時はif、複数行の時はifbって使い分けてる
call文で戻り値を取得したり、引数を参照渡しにしたりすることはできますかね 関数に収めるにはずいぶんと長くなってきたのでcallで呼び出そうと思ったら関数と同じようにはいかなかったよ・・・orz 値をいったんcsvとかに保存する案を思いついたんですが、もっとスマートにいかないでしょうか あと上記について調べていると、 「関数はFUNCTIONS.UWSにまとめ、Call関数で呼び出すとスッキリ」 というのを某サイトで見たんですが、どういう使い方をすれば関数をまとめれるんでしょうか PARAM_STRに数字を入れて、select文ぐらいしか思いつかなかった・・・
functions.uwsに関数定義しておいて callしたあとに呼び出すだけでおk
こ、こいつはすげえ スマートでスッキリしました 早い返答ありがとうございました
言葉が不足 callしたあとに通常の関数と同じように呼び出せばいい で、今試したら関数呼び出すところより後ろでcallしても問題なかった 個人的には気分的に関数集は頭で呼び出すけど
俺の場合、関数も多くなりすぎたので、 C言語に倣って、ヘッダファイル的なものを導入した。 ・メイン.uwsがヘッダ.uwsをcall ・ヘッダ.wsが複数のライブラリ.uwsをcall これで、メインからライブラリの関数を使用出来る。
またまた質問ですorz とあるファイルを初期化する処理を、 ID=FOPEN("a.csv",F_WRITE) FCLOSE(ID) ID=FOPEN("a.csv",F_READ or F_WRITE) と行っていたんですが、何度も行うと開けるファイルの最大数エラーで落ちてしまいます 代替策としてFPUT(ID,"")を考えたのですが、処理が違うのか、同じように動いてくれません 別の方法や上記二つの違いなどがわかる方がいればお願いします
>>167 >ID=FOPEN("a.csv",F_READ or F_WRITE)
に対する fclose() が無いだけとか?
FPUT(ID,"",F_ALLTEXT)
>>168 そういえばそうだ・・・ 最初の2行で閉じる処理含めてると思ってた
が、全然そんなことはなかった よくよく考えるとただの凡ミスでしたorz
>>169 こんな便利なものもあるんですね お手軽そうなのでこちらと入れ替えてみます
お二人とも助言ありがとうございました
FPUT(ID,"")だと、文字列""をファイルの最後に追記 FPUT(ID,"",F_ALLTEXT)だと、ファイル内容全体を文字列""に置き換え
2012/11/12 UWSC Ver4.8c、 Pro版と Free版をリリースしました。
DOSCMD関数にてマルチ行の実行を出来るようにした 他はバグの修正っぽい感じだがこれかなり使いやすくなるな
新バージョン出たようだな
http://www.uwsc.info/download.html [Ver4.8c]
uwsc.exeに引数で UNICODE文字を渡せなかったのを修正
ループの中で DIM宣言の配列サイズを増やした時にエラーになるのを修正
SENDSTR関数の追加モードにてサイズが大きいと遅いのを修正
FUKIDASI関数にて ちらつくパターンがあるのを修正
LockHard(True)実行中にコンテキストメニュのクリックが出来なかったのを修正
IESETDATA関数にてSELECTの変更でダイアログが出た時にスレッドでの処理が出来なかったのを修正
CLKITEM関数にて種別を省略したデフォルト処理で ClK_ACCも処理するようにした
DOSCMD関数にて出力が ANSIだったのを UNICODEでの出力も出来るようにした
DOSCMD関数にてマルチ行の実行を出来るようにした
Pro版:
CREATEFORM関数を使用すると桁数の大きい小数点演算で値が変になるパターンがあるのを修正
Debugger: フォントのサイズ変更後にペースト処理にて表示が崩れる事があるのを修正
Uws2Exe: バージョン情報の書き込みを出来るようにした
175 :
名無しさん@お腹いっぱい。 :2012/11/17(土) 09:31:48.50 ID:02OswU310
すいません gettimeで出力する時間を 35分とか40分みたいに現在から一番近い時間に設定することは可能ですか? 今から31分だから35分 みたいな感じで出来ると便利ですが
176 :
名無しさん@お腹いっぱい。 :2012/11/17(土) 09:57:30.32 ID:02OswU310
5分毎の時間って意味です
算数の知識を試してるのか
178 :
名無しさん@お腹いっぱい。 :2012/11/17(土) 10:18:44.44 ID:yBBowb8E0
取得した分を5で割って余りが0以外ならその値に1プラスして5をかける
179 :
名無しさん@お腹いっぱい。 :2012/11/17(土) 10:21:48.88 ID:yBBowb8E0
なんか分かりにくい日本語になってしまった気がしないでもないけど気にしない
>>175-176 何がやりたいのか自分でもわかってない
やりたいことをきちんとした文章で表現できてない。
要求仕様を日本語で正しく表現できれば、
後はそれをプログラミングするだけの簡単な内容だよ。
算数も小学校レベルでOK
要するに、5分刻みで切り上げたいだけ?
>>176 GetTime(5 / (60 * 24)) //5分後の時刻を得る
nn = Int(G_TIME_NN / 5) * 5 //分を5の倍数にする
if nn < 10 then nn = "0" + nn //分を2桁にする
GetTime(0, G_TIME_YY4 + G_TIME_MM2 + G_TIME_DD2 + G_TIME_HH2 + nn + "00") //時刻変数に時間を設定する
MsgBox(G_TIME_YY4 + "年" + G_TIME_MM2 + "月" + G_TIME_DD2 + "日 " + G_TIME_HH2 + "時" + G_TIME_NN2 + "分" + G_TIME_SS2 + "秒")
>>178 その方法だと、年・月・日・時も補正する必要あるから面倒だよ。閏年とかも
183 :
名無しさん@お腹いっぱい。 :2012/11/17(土) 11:03:48.95 ID:02OswU310
>>183 ごめん凡ミス。きっちり5分後だとまずいんだった。最初の行は…
GetTime((60 * 5 - 0.01) / (60 * 60 * 24)) //約5分後の時刻を得る
一番近い時間とか計算で出すよりも実行フラグ作ってフラグが立ってる時のみG_TIME_NN MOD 5 なら実行とかした方が楽じゃね?
186 :
名無しさん@お腹いっぱい。 :2012/11/18(日) 18:43:07.61 ID:Va2B+ONc0
画像を開くにはどうすればいいですか?
doscmdでパスを指定する
もしかしてUWSCってINIファイルにコメント書き込めないの?
キーの後には書き込めないみたいだな 最初に書くか・・・
左クリックを押しっぱなしにしている間だけ、左クリック連打したいです。 どうすればいいのでしょうか?
キー判定+BTN
マウスってキー判定できたっけ >GetAsyncKeyState 関数は、マウスボタンの状態も取得できます。ただしこの関数は、物理的なボタンのマップ先である論理的なマウスボタンの状態ではなく、 >物理的なマウスボタンの状態を取得します。 aa, できるのか。
>>192 それだとBTN(LEFT,UP)の時にキー判定がクリアされてしまいませんか?
GetAsyncKeyStateで物理的なものを見てそれが押されてる間仮想のキーをアップダウンすればいいんじゃね?
GetAsyncKeyStateは使い方が分かりませんでしたが、mouseorgを使えば解決しました。 ありがとうございました。
あ、今のなしで
198 :
名無しさん@お腹いっぱい。 :2012/11/20(火) 14:51:26.71 ID:iIVHdBd7P
あぁこれ仕様で無理みたいだな 連打クンとか他のツールと組み合わせるか別のキーで連打するようにすれば?
>>186 > 画像を開くにはどうすればいいですか?
いま出先で試せないけどexec(だったかなw)でパス指定すれば関連付けされたソフトで開かないかな。
あと、原始的だけど画像ビューアをそれで起動してから
ファイルを指定されたアプリにドラッグ&ドロップする関数でポイでも、
ブラウザゲームをやっていて xx1,xx2,xx3と文字列を順番に送信する必要があります。 文字列の送信をしたいのですが、SendStrでは送れません。 ID=GETID("タイトル名 - Windows Internet Explorer","IEFrame") SendStr(ID,"xxxx",0,FALSE) 3つ目の引数については色々試しましたがうまく送れませんでした。 SCKEYを使ってコピーペーストも考えたのですが、 文字列をどこに保存させておいて、クリップボードへの保存のさせ方がよくわかりません。 皆様ならどのようにされますか?アドバイス宜しくお願いします。
ブラウザゲームといってもいろいろあるからそれだけでは何とも フラッシュプレイヤーで動作しているのかどうかとか
ヘルプ見ればスクリプト関数に「IE操作関連」つーのがあるだろが。
ちなみにクリップボード云々はSENDSTRをヘルプで調べればすぐ分かるはず
>>ゲーム上で右クリックしたところ adobe flash player 11.5.502.110と出てきました。 ちなみにSENDSTRを使ったクリップボードへの保存の用途がURLのインナーテキストを保存等難しい用途に感じてしまい 数文字の文字列を保存させるのに使うようなものじゃない気がしていて他にあるんじゃないかと思ったのですが、 再度ヘルプを読み直して調べたところ id=GETID("IE","IEflame") FOR i = 1 to 10 SendStr(0,"xxx"+i) SCKEY(id,VK_CTRL,VK_V) NEXT みたいな感じで出来そうなことに気づけました。 ありがとうございますm(__)m
フラッシュのゲームじゃごく一部を除いてSendStrじゃ文字送れないと思うぞ
>>205 送るのじゃなくて、SendStrでクリップボードへ書き込みって話だよ
クリップボードに送るだけなら SENDSTR(0,"文字") だけで十分じゃん
だからそうしてんだろこのスカポンタンが
そうしてるってfor文で番号回してる上にidでIEに送ろうとしてんだぞ? どう見てもクリップボードに送りたいんじゃなくどっかの入力欄に送りたいんだろ
>>209 クリップボードに書き込んだ後に、ウインドウid指定でCTRL+Vしてるのよ
まあENTERは必要ないのか?という意味なら、そうだけどw
Flash上の文字列取得できたら便利なんだがそういうことできてる人いる?
そのFlashによるとしか スタティックやアクセシビリティ経由で文字取得できるのもあれば できないものもある
214 :
名無しさん@お腹いっぱい。 :2012/11/24(土) 05:07:22.31 ID:mq32/tJY0
例えば2つのUWSファイルを同時に実行中、それぞれの中からBTN()などが同時に 呼ばれた場合って動作は保証される? せめて行単位での排他動作が保証されているといいのだけれど...
すまん、exclusion()てのを使えばいいのか。 でもあまり速く動かすことは想定してないっぽいのか...
今開いてる特定のwebページの情報をバックグランドでコピーすることって出来ますか? 例えば、IEでこのスレッドを開いてる時(開いてるけど、最小化してる時)、メモ帳に情報を貼り付ける事とかはできますか? ただし、HTMLの情報じゃなくて、表面のテキスト情報だけを取得したいんですが。
すいません。簡単にいうと、やりたいことは、 最小化、もしくはアクティブじゃない状態の今タブにあるIEのページ情報を クリップボードに送りたいんです。 それだけ出来れば良いんですが、やはりページをいちいち開いて、Ctrl+Alt+Cで コピーしなきゃいけないのかと思って。
218 :
名無しさん@お腹いっぱい。 :2012/11/24(土) 18:11:53.77 ID:2VwmlgzE0
htmlのソースを取得する方法があるでしょ そんな原始的なやり方じゃなく
マウスのサイドボタンは使えないの? 記録できない
スレッド使ってないのにUWSCのプレイヤーウィンドウが2つ表示される(後からのは未再生状態)現象が発生… 配列を多重に参照渡ししてその先でリサイズしているのだが、その辺で何かやらかしてしまっているのだろうか…
だめだ、原因がわからないので再現PGが書けない。 宣言だけして定義していない配列をループで参照して中身を確認するブロックを消したら直ったけど、同じように再現PGを書いても再現しないわ。。。
日記ならチラシの裏にでも書いとけよ
禿同 聞きたいならちゃんとまとめて環境も書いて質問するとヨロシ
質問です。 UWSCは外部dllを使わず、プロセスメモリを読み込むことはできますか?
プロセスメモリを読めるアプリを操作して、間接的に読むことはできるはず
公式のサンプルページにメモリ使用量をソートする奴があるけどDLL使わないとタスクマネージャーとかりソースモニター使うとか間接的にしか読み込めないだろうね
>>221 Bつけ忘れの従来エラーだった
IF ... THEN 改行
でなった気がしたがすぐ直してしまったので忘れた
229 :
名無しさん@お腹いっぱい。 :2012/11/29(木) 06:54:33.65 ID:gon9dsRt0
>>220 普通にwebページをCtrl+ALT+Cで選択した状態でコピーさえできればいいです
それをしかもバックグランドで
>>229 横からすまんが何か釈然としないのは多分俺だけじゃない
最初から「バックグランドでwebページをCtrl+ALT+Cで選択した状態でコピーしたいです」って書けば?
>>220 見てお前のやりたいと思われる事は出来たが
UWSCはアプリのメモリやパケットジェネレートできるようになったら最強だと思う
232 :
名無しさん@お腹いっぱい。 :2012/11/29(木) 10:13:48.77 ID:ekmRdWzVP
>>229 CreateOLEObj("InternetExplorer.Application")して
DOMからinnerTextを得ればいいだけじゃないの?
BTNのクリックの押下時間を短くする方法ってありますか? 画面Aのある場所をクリックすると画面Bに変わるのですが、画面Bはクリックしてはいけません。しかし、クリックの余韻?が残っているのか、画面Bもクリックされてしまいます。 clickでもdown&upでもなります。 手動でクリックした時はなりません。 何か良い方法はないでしょうか?
>>234 MOUSEORG(id, 2)を組み合わせると指定のウィンドウだけに送ることができる
236 :
名無しさん@お腹いっぱい。 :2012/11/29(木) 20:15:19.66 ID:gon9dsRt0
>>235 すみません。画面Aと画面Bは同じウィンドウです。分かりづらくてすみません。
エラー:画面が未定義です
BTNで画面が切り替わるまで押した状態なんてまずなくね? 画面Bでも反応しちゃうような条件で押させてるんだろ
>>239 そうなんですか。システム設定的な何か環境の問題でしょうかね。。
>>240 PosX=300; PosY=300
while 1
ブラウザに画面AのURLを入力する
表示待ち
btn(left, click, PosX, PosY, 100)
sleep(1)
wend
こんな感じです。。
ウィンドウはブラウザで、リンクの場所をクリックして次の画面Bに変わるのですが、クリックした場所にリンクが有り、それをクリックしてしまいます。
ループで回すと、20回に1回位発生します。
URL入力と表示待ちは自作の関数を使っていますが、他にbtnは無く1回だけです。
画面Aに飛んで表示が切り替わるのを待って画面Bへのリンクがある場所を条件もなしにクリックして1秒待つ 個のれ繰り返しのスクリプトなんだからそりゃ画面Bへ飛ぶでしょ
表示待ちの自作の関数も怪しいけどsleep(1)も表示待ちに変えてみれば? IEなら位置でクリックするんじゃなくてCOM使うほうが確実 あと画面じゃなくてページって言えよ
>>241 ページAのリンクをclick
↓
時々、sleep(1)ではページBの読込みが完了しない
↓
ページAのURLを入力するが、まだビジー状態のままなので無視される
↓
ページAの表示待ちしてるつもりが、実際はページBの表示待ちになる
↓
ページBをclick
対処は、ページBの読込み完了を待つか、ESCキーで読込みを中断する
246 :
名無しさん@お腹いっぱい :2012/12/01(土) 01:27:40.77 ID:uU/nGnSv0
技能オリンピック
While True Main.uws ├Call test.uws │ └Thread Timer_kill └Call test_2.uws WEND このような構造のマクロを作りました。 test.uwsからThreadでTimer_killという自作関数を読み出しています。 目的の内容としては15分以内にtest.uwsのマクロが完了しなければ強制的にtest.uwsを終了させMain.uwsに戻り、次のtest_2.uwsを読み出すというものです。 ですが、Thread内でexitを使うとThreadが終了するだけで、test.uwsが終了せず、 exitexitを使うとmainが終了してしまいます。 test.uwsだけを終了させて、main.uwsの通常の流れに持っていくことはできないのでしょうか?
完了しないならっていうのがどういう分気かわからないからエスパーだけどbreakは?
×分気 ○分岐 ループさせてるのかとか全く分からないからってことね
グローバル変数でフラグ管理 15分経過したらフラグON test.uwsでちょくちょく変数参照させてフラグ立ってたらexit こんな感じでなんとかならんかね?
>>247 test.uwsのメインの処理の方をThreadにしたらいけるんじゃね
252 :
名無しさん@お腹いっぱい。 :2012/12/06(木) 16:39:46.00 ID:brybNQe80
>>247 exit したら関数が終了する。すべて処理し終えればスレッドも終了する。
exitexit したらスレッドが終了する。
exit も exitexit も、それを実行した関数やスレッド自身が終了するだけ。
メインスレッドが終了した場合はすべて終了する。
親から子スレッドを強制終了するには Windows API 使ってスレッドのハンドルとか取得しないといけない。
それができないから
>>250 のようにするしかない。
あと、ループでスレッドを作り続けているから子スレッドが終了しても新しいのが常に存在する状態になってるね。
普通はスレッドを呼び出してからsleepとかループに入る。
public flag = true thread main() time = 0 while (flag and time < 15) sleep(1) time = time + 1 wend procedure main() //やりたい処理 flag = false fend test.uwsの中身をこんな流れにしたら多分お望み通りの結果になるんでは
レスどうもです。
>>250 の案を使って見てうまく行きました。
ちょくちょくみるのは少しスマートでは無い感じですがorz
API叩くほどの知識が無いのでいずれ挑戦してみようと思います。
書いてから気づいたのですが、
Mainの中にWhileでした。
testの中はただの流れが書いてあるだけでループなどは無い物です。
testのメイン処理をThreadにしたものも作って見たのですが、Threadの最大個数が〜みたいな警告が出て怒られてしまいました
画面上にA、B、C、D、E、F、Gの画像のどれかがあればそこをクリックするってことを今やろうとしています IF文でやろうとしたらELSE多重定義というエラーが出てよくわからない状態になってます AがあればAを押す なかったら BがあればBを押す こういう感じの命令文はIFじゃダメなんですか?
書いたソース晒すよろし
ELSEIF 使ってないとかじゃない? IF ELSEIF ELSEIF ELSE ENDIF みたいな形じゃないと駄目だよ
>>257 それでした
ELSE
ELSE
ELSEみたいになってたのが原因ですね・・・
ELSェ・・・
こんにちは。 2点質問があります。 1点目はエラーについて。 CHKIMGを使った際に CHKIMG :number of hit exceeded maximum value 4096 または CHKIMG : It is not BMP,or resource cant be acquired(後者の問題によるエラーです) などのエラーが出てしまいます。 これらのエラーを無視して処理を実行させ続けるにはどうすれば宜しいでしょうか? IE関連のエラー無視ならありましたけど、UWSC関連はどこをいじれば宜しいのでしょうか。 構成ファイル(.INI)を見てもそれっぽいのは見つかりませんでした。 2点目は 逐次処理の合間合間に予想外の状況になったときの割り込み処理をいれたいのですが、 while お仕事中 割り込み処理:コーヒータイム wend while 帰宅後 割り込み処理:コーヒータイム wend みたいな感じで対応しているのですが、あまりにもwhileが多くて見づらいのです。 割り込み処理をするタイミングを並列で検知して、 逐次処理をストップして割り込ませるよい方法があれば教えて頂けませんか
そんなエラー見たこともないけどnot BMPってくらいだからBMPファイルでチェックしてないとか単色1ドットの画像でチェックしててヒット数多すぎて処理しきれないとかそんな感じじゃないのか? 後並列処理させたいならTHREADを使う
THREADで割り込ませるタイミングはわかりますが、 そこでメインの処理を一旦中断して割り込み処理のみを実行させたいんです 仰る通りヒット数があまりにも多くエラーが出てるのですが、 そのエラーを表示させない方法があれば知りたいです。 ヒット数を減らす以外の解決策を探しています。
263 :
名無しさん@お腹いっぱい。 :2012/12/07(金) 11:15:21.71 ID:nCddsll0P
フラグを作ってスレッド処理してる時は他の事をしないようにするとか? ヒット数多すぎるのに何の意味があるのか分からないがどうしてもというならチェック範囲を狭めて1回のチェックでのヒット数を減らすしかないんじゃない? たとえば今全体でやってるなら4分割してチェックを4回してそれぞれのヒット数を別に合計して出すとか
大量にヒットしないように作ったほうはいいとは思うけど一旦それは置いといて chkimg()をtry〜endtryで囲めばいけるんじゃないかな 結果は保証されないだろうけど
ご意見ありがとうございます
ヒット数が多いのは私の至らない点で、
画面Aの時に検索したいもの(白い小さな○)をCHKIMGで検索しているのですが、
画面AからエラーBに遷移した際には、画面が真っ白になってしまって
遷移を認識せずに大量の画像にヒットしてしまうのです。
遷移を認識する必要のないものは手間をかけずにやってしまっているので。
(エラーまで含めると少し面倒くさくなってしまって。)
とはいえ、初心者が1000行くらいのコード書いたらそれはもうぐちゃぐちゃになってしまって
一旦整理した方がいいのでしょうが、画面遷移を綺麗にかけるようなコードが想像できません。
勉強しなきゃなあ・・
>>263 フラグ使えそうです
コード内がフラグだらけになっちゃいそうで怖いですが一度きちんと検討してみます。
綺麗にコードかけるようになりたいけど、お手本探しからになりそうです
>>264 ありがとうございます!
エラーが出ても期待通りの動作はしてくれている様なので、
try-endtryでコード全体を囲んじゃうのが一番適切なのかな
try 通常処理 except 通常処理時にエラーが発生した場合の処理 endtry
って認識であっていますよね?
>>265 CHKIMGの第2引数で白を透過に指定するとかすれば?
余白ないなら透過していように画像を1ドットだけ広げてあげればいいんだし
画面真っ白になっても白を透過にして置けば無視するからエラーは出ないはずだよ
>画面Aの時に検索したいもの(白い小さな○)をCHKIMGで検索しているのですが、 > 画面AからエラーBに遷移した際には、画面が真っ白になってしまって あくまで初心者風にchkimgで解決するなら 白い小さな○をchiimgする前のとこに 白い大きな○をchiimgして、それがヒットする間はsleepしちゃえば。 chkimg多用するなら、目的のブツが出てくるまでsleepって関数作って そこかしこに入れると格段に完成度上がるよ。
うう。簡単なエラー探すのに手間取って朝になってしまった。
コードが長くなると管理しきれませんね。
一行一行進めてのデバッグ出来ればいいのですが。
あと別の話ですが
(true and 92)って1じゃなくて0なんですね。
なんかよくわかんなくなってきちゃいました><
>>266 さん
透過ですか。自分の使っている白い画像はまだら模様の白で、光があたったりそうでなかったりで
色が微妙にかわってきます。なので色の範囲を広げてCHKIMGをしています。
ちょっとそれで透過使っても大丈夫か実験してみます。
>>267 なるほどです。
とても参考になります><
VMware上とかでリソースギリギリで長時間Chkimgさせると 同じエラー出るけど、エラーメッセージは日本語だな。 BMPファイルが見つからない、またはリソース不足です。中断しますか? のようなメッセージだったな。
>>269 同じ環境です。メモリクリーナーってツールいれてみたんですけどだめでした。
DIM click_x[5]=0,184,184,184,184
DIM click_y[5]=0,209,283,363,433
for i = 0 to 5
x=click_x[i]
y=click_y[i]
BTN(LEFT,CLICK,x,y,1000)
NEXT
ってコードで :定義が間違っています
とでるのですが、BTNでは変数や配列は指定できないのでしょうか?
CHKIMGで取得した位置座標を使って
BTN(LEFT,CLICK,G_IMG_X,G_IMG_Y,1000)
は動作していたので動くと思ったのですが。
>>270 配列の基本文法が間違ってる。
ほとんどの言語では、ARY[5]と宣言したら、
インデックスの範囲は0〜4だ。
そもそも
DIM click_x[] = {0,184,184,184,184}
DIM click_y[] = {0,209,283,363,433}
for i = 0 to resize(click_x)
x=click_x[i]
y=click_y[i]
BTN(LEFT,CLICK,x,y,1000)
NEXT
とやればマジックナンバー使わずに済む。
uwscはarray[5]だと0〜5なんだよな
forは0〜5まで回してるのに定義は0〜4の分しか無い
なのでclick_x[5]とy[5]がnullになってる
>>271 も書いてるようにマジックナンバー使わずに書けばこんな事にはならないね
>(true and 92)って1じゃなくて0なんですね。
trueは1として演算されるから0になる
BOOL値と数値を演算しないほうがいいよ
配列はVBもそうだね
勉強になります>< ご親切にありがとうございます! 条件分岐等では数値ではなくBOOL値で記述する事がバグを減らしてくれるんですね。。
(true and 92<>0)
来ねぇなw
IE起動→[ツール]をクリック→[インターネットオプション]をクリック・・からではなく インターネットオプションでセキュリティを高にするスマートなやり方ってある?
グーグルさんが詳しいよ
>>279 それは無い。
探してもないくせにいい加減な事言うなkz
直接じゃなくてもググればヒントは出てくるな
278内の単語にキーワードを一つ足すだけで、検索結果の4番目に解答そのもののページがヒットするね
>>280 このスレはkzしかいないので、時間がもったいないからこんなスレ来ないほうがいいよ〜^^
あなたのために、あなたのために、二度と来ないでね〜^^
286 :
名無しさん@お腹いっぱい。 :2012/12/15(土) 16:51:23.06 ID:5YBHVUPNP
そもそもスレチじゃねーのこれ?
GETKEYSTATE(VK_CTRL) while True ifb GETKEYSTATE(VK_CTRL) id = GETID(GET_ACTIVE_WIN) titl = STATUS(id, ST_TITLE) if titl <> "" then SAVEIMG(titl, id) // タイトル名にて保存 endif Sleep(0.2) wend // CTRLキーにてアクティブウィンドウの画像保存 #n9 公式サイトのサンプルなんですが、一行目のGETKEYSTATE(VK_CTRL)を書く意味は何ですか? 一行目をコメントアウトしてもしなくても見た目の動作は変わらないようなのですが…
宣言みたいなもんじゃない? なくても動くけどな
ifb の条件になってるからでしょ
キーバッファのゴミを捨てて起動即保存にならないようにするためかなぁ? UWSCの起動ホットキーを変更してCTRLが混じってた場合とか?
SAVEIMGで画像を保存するとき 保存先を指定できますか?
293 :
名無しさん@お腹いっぱい。 :2012/12/17(月) 22:01:32.07 ID:TKvSn9CAP
ファイル名の所にファイルパス
ペイントで DROPFILE(paintID, folder, file) // 1つずつドロップ を使うと貼り付けではなくて画像ファイルを開いてしまいます ペイントに画像を貼り付ける方法はありますか?
>>295 ペイントのメニュー>編集>ファイルから貼り付け
>>296 その操作はどうすればできるでしょうか?
>>297 FilePath = "D:\pic\hoge.jpg"
id = GetId(" - ペイント", "MSPaintApp")
ClkItem(id, "編集\ファイルから貼り付け", CLK_MENU)
id2 = GetId("ファイルから貼り付け", "#32770")
SendStr(id2, FilePath, 0, true)
ClkItem(id2, "開く", CLK_BTN)
私の使っているペイントに編集というのはありませんでした バージョンは6.1です
CTRL+Pでも何でも良いじゃん 聞く前にいつもやってる動作を記録してソース見てみるとかすればわかるでしょ
すみませんでした ファイルから貼り付けを マウスを使わずに行いたいのです
>>301 しつこいな
このソフトは自動操作ツールだぞ
あんたがマウスなり何なりで手動操作した動きそのままを自動操縦するだけのことだろ
あんたが手動操作出来ないことは自動操縦しようがないし、
「アンタがマウスを使って出来ること」を自動操縦したものを、
「マウスを使わずに行う」と言えるならば、
マウス操作を記録すれば済むこと。
ショートカットキーを使えばよりスマートに出来るだろうけど
どういうものを作りたいのかも分からないし一回自分で作ったものを上げてどこがわからないのかとかがわからないと何も言えないな 物によってはペイントツールだと相当めんどくさい場合もあるし他のツールと組み合わせたりなんてことも考えないと駄目 作成依頼スレじゃないんだし全部丸投げじゃなく最低限フローチャート作ってどこの部分がわからないのかを提示しないと
呼び出し先のUWSファイルで PUBLIC xx=INPUT() PUBLIC time=GETTIME() と書いているのですが 呼び出し先のUWSファイルで PUBLIC xx=INPUT("") を入れておくと 呼び出し元を実行した最初にINPUT()が実行されました 呼び出し先のUWSファイルで PUBLIC time=GETTIME() を使うと 呼び出し元のファイルが再生されたタイミングで実行されるのか INPUTを実行したのちにGETTIME()が実行されるのか 知っている方がいらっしゃいましたら教えて頂けないでしょうか?
305 :
名無しさん@お腹いっぱい。 :2012/12/21(金) 15:28:07.03 ID:sdSWfqkq0
いちいちPUBLIC付ける意味って… INPUTの後に書かれてればINPUTの後だし前に書かれていればINPUTの前に実行される 呼び出し先も後も関係なく最後に実行されたものが残る CALLで呼んでるファイルは同時に再生されているわけではない
というかPUBLICつけてるからじゃないか? 宣言は初めにするものだからそれで先に実行されてるんだと思うよ
ヘルプにはこうある > ※ ローカル変数は初期値に変数値を利用できるが、グローバル変数の初期値はリテラル値のみ > ※ PUBLIC変数の初期化はスクリプト実行前に行われます 言語仕様を守らず、グローバル変数をリテラル値以外で初期化するとキモイ事が起きるわけか… リテラル値ってのは、ソースコード上に 123 とか "abc" とか true みたいに直接記述する値のこと 変数の値や、関数の戻り値は、ちがう
そんなトンデモコードが一応実行できるっていうのがすごい
PUBLIC xx xx=INPUT() こんな風に分けて書けばいいだけなんだけどね
>>302 >>303 すみませんでした
サンプルにある// 指定フォルダにあるjpgファイルをペイントにドロップする #n55
をファイルから貼り付けで出来ないかなと思って聞きました
でもできなさそうなのでマウスを使うことにします
>>308 普通はエラーになるですよねw
>>309 (subX.UWS)
PUBLIC XX
…
FUNCTION initialize()
XX = INPUT()
…
FEND
(main.UWS)
CALL subX.UWS
…
initialize()
ってやってる。
スクリプトとかわからないのでマウス記録だけで使ってるんですが、たまに再生中にUWSCの ウィンドウをクリックしたまま止まっちゃうんですが、再生中にUWSCウィンドウを表示しない方法って 無いんでしょうか? 記録中には絶対にその場所を押す事なんて無いんだけど、モニタの切り替えとかすると ランダムにこういう状況が発生してしまいます。
313 :
名無しさん@お腹いっぱい。 :2012/12/22(土) 11:55:25.55 ID:4aAnGUFf0
STOPのウィンドウの事かな? それならスクリプトのファイルを開いて一番初めの行に STOPFORM(FALSE) って追加して上書き保存すれば出ないよ
>>313 おお素晴らしいw
ありがとうございます。
ついでにもうひとつ聞きたいんですが、ブラウザがクラッシュして「原因を確認する〜」みたいな
ウィンドウが出る時に、録画の途中でキャンセル位置を押すようにしてるんですが、クラッシュ時に
その操作で継続する場合と、クラッシュの時点で再生が止まっている場合があります。
手動でクラッシュレポートのウィンドウを消してやればそのまま何事も無かったかのように続きが
始まるんですが、この原因がいまいちよくわかりません。
XPではそういった症例は無かったんですが、7に変えてからの症状です。
315 :
312 :2012/12/22(土) 12:32:55.30 ID:IRYxzFzR0
ありゃ、ID変わってる; 失礼しました
どういうスクリプト作っているのかわからないけどクラッシュレポート閉じれば良いなら 戻値 = GETID("クラッシュレポート") //クラッシュレポートの所にタイトル名かクラス名を入れる IF 戻値 >= 1 then CTRLWIN( 戻値, CLOSE2) みたいなもので強制的クラッシュレポートのウィンドウを閉じちゃうとか クラッシュの原因がスクリプトの所為なら危ないと思うけどね
317 :
312 :2012/12/22(土) 13:58:00.95 ID:tjjbo22w0
ブラウザ開いてブックマーク押して、ポチポチ押してブラウザを閉じる。 これをIE、chrome、FFで順番にやってくような1セット5分くらいのマウス記憶です。 止まるのはIEの時だけで、マウス記憶のみなのでスクリプトとかは全然いじってません。 クラッシュレポートウィンドウを閉じる時と、クラッシュレポートのキャンセルボタンの位置で 再生が固まってる時の明確な差異が確認出来ないのでずっと疑問に思ってました。 動き続ける時は1週間でも動き続けるんですが、止まる瞬間の現場が押さえられなくて。 元々IE9がクラッシュ多目なのでなんとなく諦めてたんですが、もし解決法があればと思って 質問させていただきました。 ご丁寧にありがとうございました。
STATUS関数は、ウィンドIDが無効だと固まる
>>52 から、
それに近いことが起きてると予想。
マウス記録だけで一週間も動き続けるなんてたいしたものですよ それ以上の安定性を求めるならスクリプトを書けるようになるしかないと思います それでもサーバーが落ちてたらどうしようもないんだけどね 私はスクリプトが止まったらメールが入るようになってます 様々なタイミングでスクリーンショットを更新し画像のログを保存してます スマホから遠隔操作できるようにするとか工夫してますよ
アプレット内のボタン操作を非アクティブで操作したいんですが 電卓等と違いgetitemでボタン情報を持ってこれません mouseorg(id,2...btn(click..等もアクティブでしか操作できませんよね 諦めた方がいいでしょうか? もし可能ならヒントだけお願いします
>>320 仮想PC上でアクティブにさせて操作し
仮想PC自体は最小化にするとか・・・
間違い無くそれしか無い そもそも非アクティブで自動操作できるということが特別であって、 他のプログラムから部品として使われることを前提に アプリケーションが元々そう作られている必要がある。 OLEオブジェクトとして扱うことができるとか、 コマンドラインで操作できるとか。 非アクティブで自動操作できないのはGUIベースアプリの弱点 そう簡単に克服できたら世話はない。
>>321 >>322 ありがとうございます。
仮想マシンのネット環境作りから頑張ってみますm__m
hnd = GETCTLHND(IE.HWnd,"MacromediaFlashPlayerActiveX") フラッシュのハンドルの取得の仕方を調べると大体これが出てくるんですけど、 この方法だと"MacromediaFlashPlayerActiveX"で動いている一部のフラッシュのハンドルしか取得できません フラッシュが何で動いているか(≒GETCTLHNDの第二引数に何を書けばよいか)を調べる方法を教えてください
325 :
名無しさん@お腹いっぱい。 :2012/12/24(月) 02:12:28.96 ID:Ak7JTuQN0
総戦力Lv5だけ湧きすぎ
エラーウィンドウが出てるアプリを強制的に再起動するスクリプト教えてください。 ググっても探せませんでした。
エラーの感知>DOSCMDでプログラムの終了(taskkillとか)>EXECでプログラムの起動 エラーを監視する方法はプログラムによって変わるので目的のプログラムに合わせて
画像認証ってどうやるの? どこかにサンプルプログラムある?
このクリスマスイブに冗談よせよ。 そうじゃなくても暇な俺は機嫌が悪いんだ。
初心者なんでおしえてくだせい
また自称初心者荒らしか
このスレ探し出すよりググってやり方探す方が簡単な気がするw
2012/12/25 UWSC Ver4.8d、 Pro版と Free版をリリースしました。
h
b
難しすぎて使えない
最初は記録から入ればよろし それで手に余ることが具体的に分かったらググレ
>>328 ヘルプよくできてるからヘルプ読めばいいと思う。
参考までに、指定した画像と同じものが画面内のどこかに現れたら反応する関数はCHKIMG。
画像はBMP形式じゃないとだめ。
画像名にファイル名だけ書くなら画像の置き場所はそのuwsファイルと同じフォルダ。
よくできてると言われても、ヘルプって元々おおよその使い方がわかっているものならいいけど、 0から勉強するにはあまりにも不向きだと思うんですが。 解説サイトとかないですかね?
>>340 >>1 にいっぱいリンクある。
UWSCはソース書いてコンパイルしてどうのって本格的なプログラミングじゃなくて
メモ帳で文法通りにやりたいこと書いてテキストファイルとして普通に保存したら
なんもしなくてもそのまま動くから。拡張子はuwsに変えるけど。
それだけわかれば、あとはヘルプ見て使いたい機能探してコピペするだけ。
>>339 レス情報ありがとです。ヘルプ良く見てみます。
1+1=2ってなんですか? そりゃ1を2つ加算したら2だろって答えに +ってなんですか? 教科書見ろよって言われて 教科書って0から勉強するにはあまりにも不向きだと思う とか言われて回答者が唖然とする様だな
>>344 教科書って0から勉強するにはあまりにも不向きだと思う
まぁ気持ちはわかる、自分も初めわけわからなくて戸惑ったもの でもマイクロソフトのヘルプの意味不明さに比べればよほどわかりやすい
手っ取り早く覚えるには、どこかからソースコードを入手して そこから改造していく方法がいい プログラムの構造であるとかを理解できるし、要る機能を付け足して、要らない機能を外していけば 自然とやりたい事も達成できるし、コードを書く事も覚えるから
ヘルプの問題じゃなくてやる気の問題だろ やる気があれば、わけわからなくても試行錯誤して自分のものにできる やる気がないなら、すぐ投げ出して他人に丸投げする
そうそうゼロから覚えるなんて非効率も良いとこだ やりたいことからやってく一点突破のほうが早い
350 :
名無しさん@お腹いっぱい。 :2012/12/28(金) 14:12:58.43 ID:Kvp04PE60
せめてHELP見てHELPのどこがわからないのか位書いてれば説明もできるのにな ×HELPがわかりにく ○HELP見るのもめんどくさい ってだけだろ
UWSCを使う前に最低でもコレだけは知っておけ、って物をテンプレに入れといたら? 基本的な質問も減るだろ
初心者ではないが、未だにHELPは見づらく感じるけどなあ 目的別にジャンル分けされた一覧表も付けて欲しいかも マウス・キーボード・ウインドウ・画像・クリップボード…… みたいな
こんなスレに来る前にググレってのは駄目なのかな。
基本的に割とよく浮かぶやりたい事って骨格の部分はサンプルスクリプトから取ってこれるんじゃないかな 細かい機能は自分で少しずつ改良していかないとダメだろうけど
例えば ウインドウID/ハンドル関連 GETID、GETALLWIN、GETCTLHND、IDTOHND、HNDTOID キーボード関連 KBD、SCKEY、GETKEYSTATE、SETHOTKEY、LOCKHARD マウス関連 MMV、BTN、CLKITEM、MOUSEORG、GETKEYSTATE、LOCKHARD、MUSCUR みたいな表があると直感的に見つけやすいなあと思ったんだけど
357 :
名無しさん@お腹いっぱい。 :2012/12/28(金) 18:38:40.00 ID:LNRKV4RE0
IEで大きなページを開いたときに特定のピクセル位置までスクロールさせるには どうすればいいでしょうか? WHEELやキーだと遅いし特定の位置に一発で移動できないですよね...
>>357 IEのDOMから window.scrollTo(x,y)
ほんとに何もわからないけどUWSC使いたいっていう人は ウインドウをクリックして、なんか2つ3つキー押す程度の 簡単な動作を自動で記録して、どこかにテキストで保存して 中身をメモ帳で見たら、あぁなるほどー。ってなって、 そっからはもうリファレンスがわりにヘルプ見て いろいろいじってく感じになるんじゃないかなー。
>>358 なるほど。
しかし新規にIEを起動してってのはみつかったのですが、既に起動している
IEを動かしたい場合はどうすれば?
マウス位置/アクティブなウィンドウのIEにアクセスしたのです。(正確には
Sleipmir中で起動しているIE)
>>360 Sleipnirはオートメーションサーバ機能あるので、そこからIEのDOMへ
たぶんこんなかんじ
Sleipnir = CreateOleObj("Sleipnir.API")
id = Sleipnir.GetDocumentID(Sleipnir.ActiveIndex)
document = Sleipnir.GetDocumentObject(id)
>>354 それ、ほとんどの関数を使ったことがある今なら、特に問題は感じないが、
最初はどの機能がどの関数なのか、非常に見つけづらかったなぁ。
>>355 関数の説明ページからサンプルページに跳んでも、
サンプルコード中のどこに書いてあるのか探すのが意外と面倒だよなハイライトされないので。
しかも大抵、やりたい使い方とは別だったりするし
(戻り値を使用せずグローバルシステム変数つかってたり)
キーワードで検索してもずっとスクロールできるからどこまでがそれの説明か分かりずらいときはあったな 今はすぐ分かるけど
>>363 chkimgできることが一番の売りみたいに書いてあるように見えるんだが
なんか他にあんの?
画面上の画像切り取ってって言うマクロツールならわかりにくい外国産じゃなくても国産でいくつかあるよな そういうの使っていてもやりたいこと増えた時にできなくて結局UWSCに行きつくことが多いんだけど UWSCの弱点はUIが作りにくいことくらい
>>365 日本語情報少なくて断念w
キーストローク送信とか普通にできる模様。
javaなんで、javaで出来ることは出来るはず…クラスプログラミングもOLEも出来るっしょ。
ということはIEのオブジェクトを生成して非アクティブでも操作というのはUWSCと同じくらいできるはず。
しかもWindowsでもlinuxでも使える。
画像判定はopenCVで行われており類似度検索できる。
画像ベースで書く場合、スクショから登録までの手間のかからなさに大きなアドバンテージがある。
でも日本語情報少な過ぎて不安すぎるので様子見だなw
そこまでするならjavaでよくねw
if MOOD=1 xmax=1;ymax=5 elseif MOOD=2 xmax=9;ymax=1 endif if MOOD=1 DIM t[xmax][ymax]=_ elseif MOOD=2 DIM t[xmax][ymax]=_ endif みたいなことをしたいのですが多重宣言になって出来ませんし,
DIM t[xmax][ymax]を間に挟んで t[xmax][ymax]=・・・としても上手くいきません. 仕方がないので配列のサイズ変更でなんとかしようとしても 2次元配列は一番上(つまり@一行目のみですかね)のサイズ変更しかやってないようで resize(t,(xmax+1)*(ymax+1)) t[][]=・・・ではうまくいきませんでした C++の#define;if defみたいなことはできないのでしょうか
>>369 初めに宣言しておいて後から条件により変数に値入れるのじゃだめなの?
UWSCの仕様で先に宣言の動作するはずだからIFで分けてるように見えて2回宣言してるよ
つまり, DIM t[][]だとサイズの問題があるようなので 配列は宣言時にリテラル値で明確にサイズを指定しないといけません 今回は実行時にサイズの指定をしているのでどうしようもない ということなんでしょうか・・ 初めに適当に宣言しておいて,その後MOODの値によってresizeでサイズを変えられればいいかな と思いましたが2次元配列のサイズの変更は無理そうなので質問してみました
>>372 どの言語でも、先に宣言するのが常道だよ。
宣言の時点でメモリの確保が行われる訳だし。
UWSCで2次元配列は言語仕様上、
想定される最大を予め宣言しておくしかないね。
UWSCの言語仕様はぶっちゃけプアーなんで、
俺も、他言語で開発してUWSCのほうを部品として使いたいんだけど、
そう出来るようにするとUWSCで商売してる人が困るのかもしれない。
その分割と安定している、ということで我慢するしかないのかなぁ
>>373 ありがとうございます
DIM t[9][5]
if MOOD=1;t[][]=・・・
if MOOD=2;t[][]=・・・
で解決しそうです
いつもぴったりサイズ確保することしかやってなかったので
大きくとる事は考えていませんでした
空文字の条件を考えるのは少し頭がいたいですが一度試してみます!
ありがとうございました
空白じゃないときだけ処理するか空白が見つかったら処理を終了みたいな作りにすれば? if 変数 <> "" then 空白じゃないときの処理
すいません <> って=と同意だと思っても宜しいですか? 空文字が大変というのは,if内の3つの条件として3つのand orを考えるのが苦手なもので・・・ もう一つ質問です 2次元配列を書き直す場合,書き直したい配列を用意して for ループで逐次書き換える以外に良い方法はありませんか? setclearを試してみたのですが,あれは全部同じ文字で埋めちゃうんですね. DIM a[0][1]="1","2" DIM b[0][1]="4","4" setclear (a,b) でaの配列が4,4になってくれたらよかったのに. 関数作ればいいだけですね.すいません.
377 :
名無しさん@お腹いっぱい。 :2012/12/29(土) 21:54:12.88 ID:dCT+ijGm0
>>376 =の逆、!(○○=○○)と同じ意味
例
DIM a[] = 0,1,2,3,4,5,,,,,
for i = 0 to 10
if a[i] <> ""
print (a[i])
else
print (i+"個目で空白発見、終了します")
exitexit
endif
next
はーい.ありがとうございます! ちなみに自分は!(条件)を使っていたのですが <>の方がわざわざ括弧でくくらなくていいので好まれる のでしょうか?
どっちが好まれてるかは分からないけど動作的には同じだし好きな方で良いと思うよ 自分は!だとぱっと見で見分けがつきにくいから<>をよく使うけど
FUNCTION copyArray(lSrcArray[], VAR lDistArray[], lCopyType=0) //lCopyType // 0 : ミラー,サイズも完全に合わせる // 1 : 上書き,必要に応じ拡張 RESULT = FALSE lSrcMaxIdx = RESIZE(lSrcArray) IF lSrcMaxIdx<0 THEN EXIT TRY lDistArray[0] = lSrcArray[0] EXCEPT EXIT ENDTRY IFB lCopyType = 0 OR RESIZE(lDistArray)<lSrcMaxIdx THEN RESIZE(lDistArray, lSrcMaxIdx) ENDIF FOR lI=1 TO lSrcMaxIdx TRY lDistArray[lI] = lSrcArray[lI] EXCEPT EXIT ENDTRY NEXT RESULT = FALSE FEND
>>380 プログラムありがとうございます.所々意図がつかめませんがとても参考になります
これを二次元配列に変えればいいんですね.Resizeできないので全く同じ配列を用意してコピーする所に限定します.
VARは今まで使っていませんが,使ってみようと思います.ポインタみたいなものですよね
一つ目のTryExceptをいれた理由がちょっとわからないです.良かったら教えてください
一人で書いてても上達しないしUWSCの誘惑などのサイトを見ても何が何やらさっぱりで
自分の書きたいプログラムのお手本とか,中間くらいで何かよい教材があればいいですね
下記で関数呼び出しのシンタクスエラーになります.どこがダメなのでしょうか? a[][]=・・・ b[][]=・・・ copyArray(a[][],Var b[][]) FUNCTION copyArray(lSrcArray[][],VAR lDestArray[][],lCopyType=0) RESULT=FALSE j=0 lSrcMaxIdx=Resize(lSrcArray)//xの配列数 for i= 0 to lsrcMaxIdx Repeat TRY IDestArray[i][j]=ISrcArray[i][j] j=j+1 EXCEPT j=0 flag=1 ENDTRY UNTIL flag=1 flag=0 NEXT Result FALSE FEND
最初のRESULT=FALSEと最後のResult FALSEがどーゆー意図でやろうとしてるかわからないけどだめじゃね 文法的には最後のほうが
>>382 copyArray(a[][],b[][])
copyArray(a,b)
ありがとうございます.解決しました 配列を関数に渡す際の引数は,配列の変数名だけにしなければならないんですね. ちなみにcopyArray(a[][],b[][])やcopyArray(a[][],b)でもシンタクスエラーになりました a[][]とaの使い分けが良くわかりません. 関数に渡す時は引数が配列だろうが参照(var)だろうが,配列のアドレスを渡しなさいということでしょうか. どこかで配列渡すときはa[][]でもよかった風に書いてあったのですが見間違えだったんですね
>>383 しまった一番最後のRESULTはTRUEの間違いでしたw
>>386 C言語の配列知ってると判りやすいんだけどね。
ちょっとやってみるんで待っててください
FUNCTION copyArray(lSrcArray[], VAR lDistArray[], lCopyType=0) //lCopyType // 0 : ミラー,サイズも完全に合わせる // 1 : 上書き,必要に応じ拡張 // 2 : サイズは変更せず、足りなければ中断 RESULT = FALSE lSrcMaxIdx = RESIZE(lSrcArray) IF lSrcMaxIdx<0 THEN EXIT IFB lCopyType = 2 AND RESIZE(lDistArray)<lSrcMaxIdx THEN EXIT ELSEIF lCopyType = 0 OR RESIZE(lDistArray)<lSrcMaxIdx THEN RESIZE(lDistArray, lSrcMaxIdx) ENDIF FOR lI=0 TO lSrcMaxIdx TRY lDistArray[lI] = lSrcArray[lI] EXCEPT EXIT ENDTRY NEXT RESULT = TRUE FEND
FUNCTION copyArray2d(lSrcArray[][], VAR lDistArray[][]) RESULT = FALSE lSrcMaxIdxX = RESIZE(lSrcArray) lSrcMaxIdxY = RESIZE(lSrcArray[]) IF lSrcMaxIdxX<0 OR lSrcMaxIdxY<0 THEN EXIT FOR lX=0 TO lSrcMaxIdxX TRY IF !copyArray(lSrcArray[lX], lDistArray[lX], 2) THEN EXIT EXCEPT EXIT ENDTRY NEXT RESULT = TRUE FEND
DIM testArrayS[8][8] DIM testArrayD[8][8] FOR lX=0 TO 7 FOR lY=0 TO 7 testArrayS[lX][lY] = INT(RANDOM(1000)) NEXT NEXT copyArray2D(testArrayS, testArrayD) FOR lX=0 TO 7 FOR lY=0 TO 7 PRINT "S:" + testArrayS[lX][lY] + ", D:" + testArrayD[lX][lY] + ", CHECK=" + (testArrayS[lX][lY]=testArrayD[lX][lY]) NEXT NEXT ※全角空白2個をタブ文字か半角空白4個に置き換えて使ってください
>>382 × 最後から2行目がresultへの代入子抜け
× 配列変数名の頭文字が変わっている(lとI)
間違えないよう、私はテキストエディタに「ゆたぽん(コーディング)」というフォントを入れて使っています。
あとTRYでエラートラップしている意味は、
コピー元とコピー先で異なる型の変数だった場合の対策です。
(srcが文字列でdistが数値型変数だった時など)
配列インデックスをオーバーさせエラーが起こるまで回す、というやり方は異常で、
エラーの発生を通常処理の判定に使うべきではないかと思います。
ご丁寧にありがとうございます. 自分もエラー発生を通常処理に使うのはまずいなと感じていたのですが, 2次元配列の列側の配列数の把握の仕方はその様にすればいいのですね TRY EXCEPT 初めて使ったので,配列の型の違いのための対策までは想像できませんでした.勉強になります a[][]とaの違いは Cでは配列自信かポインタかの違いと認識していますが UWSCではVar 引数はポインタかなと思いcopyArray(a[][],b)が使えるのかと考えてしまいました
色々とお伺いさせて頂きたい事はあるのですが やはりきちんとCを勉強してというのが早道なのでしょうか. 優しい本なら二通りほどやりこんだのですが. ネットでぐぐっても二次元の配列操作は見つけられませんでしたし,一つのプログラムの常識を活かせるほどの知識が不足していると感じます. 記述方法を探すのに手間がかかるのは少ししんどいです 学びたい事は 他言語のすらすら読んで違和感なく言語規則を理解できるだけの基礎知識と 今回TRY,EXCEPTや,最初にResult=FALSE 最後にTRUEで関数がきちんと終了したことを示したり なんでicopyTypeを引き数の中で定義しているかなどの作法です
はい. 色々とありがとうございました. そちらの本を探すと共にURLを一通り見てみたいと思います. 実際に会社の方がどの様な所で苦労しているかまとまっているのでとても良い参考資料になりそうです^^
急に、第二水曜日の日付がスクリプト中で知りたくなった。 UWSCだと面倒くさい。
だからなんなんだよ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
面倒くさい(から誰か作ってくれ)。
簡単だろそんなの
カレンダー見て配列にぶちこんでしまえ どうせ一年もつかわないんだろ
ごめんなさい面倒くさかったけど自分で作りました FUNCTION nThDayOfTheWeek(lYear, lMonth, lNumOfDayOfTheWeek, lNTh) // 指定年月でのn番目の曜日の日付を返す。 // 曜日 (0:日曜....6:土曜) GETTIME(0, getDateTimeStrByGettimeSeconds(transGettimeSeconds(lYear, lMonth))) lDaysOffset = lNumOfDayOfTheWeek - G_TIME_WW IF lDaysOffset < 0 THEN lDaysOffset = lDaysOffset + 7 RESULT = 1 + lDaysOffset + 7 * (lNTh - 1) FEND
text = "" for y=2013 to 2020 for m=1 to 12 d = Get2ndWednesday(y, m) text = text + y + "/" + m + "/" + d + "<#CR>" next next SENDSTR(EXEC("notepad"), text, 1, true) exitexit function Get2ndWednesday( year, month ) cnt = 0 for i=1 to 31 GETTIME(0, year + COPY(100+month,2) + COPY(100+i,2)) if G_TIME_WW=3 then cnt = cnt + 1 if cnt=2 then break endif endif next RESULT = i fend
一点お聞きしたいのですがb.UWS内で a.UWS内の変数a=0を初期値として一度だけ実行する a.UWS内の繰り返し実行し,一回実行すぐ毎に変数aを1ずつ増やして呼び出す 二つの事をやりたい時は b.UWSを作る際に毎回a.uwsをのぞいてb.UWS内で変数a=0で初期化しなければならない事を確認して作るしかないのでしょうか? a.UWS内でPUBLIC a=0と宣言しておくのは前回だめだと言われたので. 初回実行時のみa=0で実行する事が出来ないかと思い訪ねてみました この様な場合はb.UWS内に関数化しておいておくしかないのかな
メインのスクリプトの初めにPUBLICで宣言 CALLで呼びだすファイルでの宣言はしない(読み込む度に宣言で多重宣言エラーの元もなる) 別にCALLで呼びこむときの最初に初期化するのは何の問題もない(PUBLICとか余計なものをつけない)
>>403 3行目がちょっと文法がおかしいので推測になるけど、
a.UWSの初回実行時のみa=0として実行し、
2回目以降はa=1,2,3,...として実行する、という意味だと仮定。
俺だったらまず、
main()に相当する関数ではない実行部分をもつスクリプトは常に1つとし、
それ以外は全て関数のみのファイル(それ単体で実行しても何も起きない)とする。
そうすると、b.UWSからは、a.UWSを実行したい都度にCALLで呼び出すのではなく、
冒頭で1回だけ呼び出しておいて(何も起きない)、都度a.UWS内の関数を呼び出す形になる。
そして変数aは常にb=main側にて管理し、
a.UWSを呼び出す度に引数に含める。
そうするとリエントラントな関数となるので
仮に複数のスレッドから呼び出したとしても、それぞれに独立した動きとなる。
もちろん、前のスレッドの呼び出しでaが+1させ、
後のスレッドの呼び出しに影響させたいという用途なら、この方法は使えない。
別解として、
他の言語だと
>>403 の変数aはstatic宣言すればいいんだけど、できないので、
a.UWSに属する大域変数とする。
その際、不用意に同名の変数が使われないよう、長くて意味のある変数名にする。
そしてさらに厳密に構造化するなら、
その大域変数をa.UWS以外から直接変更・参照するのをコード規約で禁止とし、
a.UWS内のget/set関数によってのみ参照・変更するようにすると、
疑似カプセル化となりオブジェクト指向っぽくなる。
俺はそこまでやってないけどw
ゲッタやセッタ作ればオブジェクト指向という風潮 一理ない
IEで1つの処理をやらせてるんだが 複数タブ開いて複数並列でやろうとするとスレッド処理が必要なのは分かるが テンプレってある?なきゃないでいいし作ろうと思えば作れるが。
408 :
名無しさん@お腹いっぱい。 :2013/01/04(金) 17:02:45.87 ID:dUTUQDfW0
>>404 ,405
ありがとうございます。
関数にして最初に呼び出してしまえば今後使えるようなのでその方向で言ってみようと思います
オブジェクト指向もコード書きながら学べるようでしたらぜひそちらのほうで少しずつ進めて生きたいと思います。
「ITM_BACK UWSC」でぐぐると出てくるけど、 アクセシビリティ経由でのGETITEMがよくフリーズしてくれて辛い。 スレッドにしてみても、スレッドを強制終了する方法が無い。 もっとも、大抵の場合、GETITEMの対象のウィンドウを強制終了させれば フリーズも解けるから、フリーズからの脱出は可能かもしれない。 でもそもそもフリーズしてくれちゃ困るんだよね。
FUNCTION getItemFreezeResistant(VAR lAllItemList[], lWID, lItemTypeConstants, lItemsNum=-1, lTimeoutSeconds=30, lListViewColumnsNum=1, lFlgRejectDisableItems=FALSE) RESULT = FALSE; lHND = IDTOHND(lWID); lCurSeconds = GETTIME() IF !isExistProcess(lHND) THEN EXIT FOR lJ=0 TO lTimeoutSeconds FOR lI=0 TO 5 IF staticSemaphoreGetItemByThread_inSubCommon <= 0 THEN BREAK 2 SLEEP(0.2) IF lTimeoutSeconds <= GETTIME() - lCurSeconds THEN EXIT NEXT NEXT IF staticSemaphoreGetItemByThread_inSubCommon > 0 THEN EXIT IF lTimeoutSeconds <= GETTIME() - lCurSeconds THEN EXIT THREAD getItemByThread(lWID, lItemTypeConstants, lItemsNum, lListViewColumnsNum, lFlgRejectDisableItems) FOR lJ=0 TO lTimeoutSeconds FOR lI=0 TO 5 IFB staticSemaphoreGetItemByThread_inSubCommon <= 0 THEN RESULT = TRUE; copyArray(staticAllItemList_inSubCommon, lAllItemList); EXIT ENDIF SLEEP(0.2) IF lTimeoutSeconds <= GETTIME() - lCurSeconds THEN EXIT NEXT NEXT FEND PUBLIC staticSemaphoreGetItemByThread_inSubCommon = 0 PUBLIC staticAllItemList_inSubCommon[0] PROCEDURE getItemByThread(lWID, lItemTypeConstants, lItemsNum=1, lListViewColumnsNum=1, lFlgRejectDisableItems=FALSE) staticSemaphoreGetItemByThread_inSubCommon = staticSemaphoreGetItemByThread_inSubCommon + 1 GETITEM(lWID, lItemTypeConstants, lItemsNum, lListViewColumnsNum, lFlgRejectDisableItems) copyArray(ALL_ITEM_LIST, staticAllItemList_inSubCommon) staticSemaphoreGetItemByThread_inSubCommon = staticSemaphoreGetItemByThread_inSubCommon - 1 FEND
HELPで思ったこと: ・MSGBOXやGETITEMなどの複数指定可能種別定数(ITM_ACCTXT OR ITM_BACK とかやるやつ) の複数指定方法、初心者には壁だよなぁ。 VBSとかのMSGBOXで使用経験があれば問題なく理解できるだろうけど。 ・GETITEMのITM_BACKみたいな、ほとんど何の説明もないオプションは、 HELPがわかりづらいという印象を与える一因。 ってかITM_BACK指定してもダメなときはダメだったが… ・THREADで参照渡し出来ないのは他言語でのスレッドプログラミング経験者には常識かも知れないが、 HELPにも書かれていなければエラーも吐かないのはどうかと思う。 ここに書くなって? ごめん俺ヘタレなもんでw
ググっていくつかサンプル見てなるほどーと思った関数は多いけど そういうもんだと思って気にしなかったなぁ。
基本的にスクリプト組んで作る人はそれくらいの知識はあるのが前提でそういう知識がない初心者でも使える録画機能が付いてるんだと思ってるが スクリプト組んで作ろうという意識があるなら多少なりとも自分で調べたり例を少し変えてみて試したりとかするだろうし 初心者を言い訳に調べもしない奴が多すぎるのが問題
そうやって門戸を閉じてユーザビリティ向上を図らないのが 日本のソフトウェア開発が世界最低水準である原因
415 :
名無しさん@お腹いっぱい。 :2013/01/06(日) 13:47:57.82 ID:gPAg8utt0
>>414 開発者自体が広がる事を嫌ってるんじゃないか?w
ユーザビリティってかもともとかける人のためにスクリプト組めるようになってるじゃん 出来なくても調べればごろごろ情報出てくるし
実際に最低水準なのかは知らないけど、もし本当にそうだとしたら 英語弱くて読めるドキュメントの数が限られるのが原因だと思うけどな。 基本は自分で調べるもんだよ。
日本人が英語苦手で英語のマニュアルとかフォーラムとか見ないのが一番の原因だろ
ちなみに俺も英語なんて読む気がしません
英語のリファレンスしかないなら頑張って読めよ 大して難しいこと書いてないぞ
>>420 書いてるほうも文学やってきたわけじゃないしな
ややこしい言い回しなんかたぶん知らない
アホ iphoneにはマニュアルなんてついてないぞ。マニュアルなくても操作できるからな 電話帳並のマニュアルを付けていたガラケーが負けた理由がまだ理解できないのか日本のエンジニアは 俺もその端くれだが、このソフトはマウスとキーボード記録以上のことを勉強する気になれない タスクマネージャよりはこちらの方が多少便利なので使っているだけ 必要になれば勉強するけど、たいていのことは他のソフトの方が楽だし
? 馬鹿でも触れるようにしたのがiPhoneで 馬鹿じゃ触れないのがUWSC 住み分けできてんじゃねw 文句あんなら馬鹿でも触れるUWSC組めば
スクリプトの勉強しようと知人に相談したら UWSCのマクロやるよりプログラミング言語を基本からきちんとやったほうがいいって言われたんだけど UWSCってプログラミング言語には何の役にもたちませんか?
>>424 やる気がないと挫折するぞ
作りたいもんをリファレンス引きながら作る
ある程度できるようになったり詰ったら基本に戻ればよい
なんでもいいから最後まで作るのが大事
んだんだ コレをやりたい一点突破なら、苦労しながら尋ねながらでも最後までできるだろうし覚えも早い UWSCつかマクロでやりたいことできるなら、UWSCから入ったほうが早い ただUWSCProでEXE化汎用化(配布)を考えてるなら知人の言うとおり
>>424 正直、言語なんてのはアプリを表現する為の方言みたいなもんでしかない
有利不利は当然あるけど、基本的な事であれば大体どんな言語でもできる
基礎をやるとレベルアップの成長速度にプラスになる 基礎をやり遂げられるならやったほうが良いに決まってるが、 挫折する=0ぐらいなら、モチベーションの続く方をやるほうがプラスになる
>>424 プログラミング言語覚えたいならマクロツールで覚える必要ない
だが覚えれば自作のDLL作ったり出来ることの幅が広がる(UWSCは自作DLLも読み込んで使えるので)
だがそこまでやるなら別にUWSCである必要はない
どのレベルの物を作りたいかによる
ゲームのマクロとかサイト巡回、簡単な作業効率化程度のマクロ作成ならプログラミング言語の基礎なんて覚えなくても適当に調べる力があれば作れる
最後まで作るのが大事なのは同意だけど 何かを作る時は 自分の中で確認済みの所と そうでない所を見極めて課題とし それを最小単位でとりあえず作ってみるのも大事だよ そして全て確認出来たらそれらを組み合わせて完成させる
>>424 条件分岐や変数といった基本はどんな言語でも共通なんで
役に立たないということはない。
ただし、C言語やJavaやBasicといったメジャーなプログラム言語は
初心者向けの書籍やドキュメントが充実してるのに対して
UWSCやアプリケーション付属のスクリプトはたいていが
「操作を記録・再生できます。プログラミングできる人ならソースを見てカスタマイズも可」
ってスタンスだから、何も触ったことの無い人がUWSCから入ろうとすると
ID:zRVxLEuBPのようにドキュメント不足で発狂することになるw
入門レベルで作れるプログラムはCやJAVAでは検索すればフリーソフトがごろごろ出てくる UWSCは入門レベルで自分だけの超ニッチで超便利なツールを作れる それによってモチベーションに格段の差が生じる
サンプル見てどういうものかわからない人は仕組みを理解しようとしない人だからプログラムには向いてない その程度の機転の利かない奴は基礎がわかってもどう使っていいのかがわからなくて詰むから俺なら早い段階で諦めさせるな
まあ、何が便利かって、大手の言語は色々と段取りが難しい事だろうな プロジェクトを作って、各種のファイルをプロジェクトに取り込んで、などなど UWSCは言語として出来る事は汎用言語に比べたら劣るけど 咄嗟に思いついたほんのちょっとしたアプリを作りたいときは便利 インタプリタ型のスクリプト言語のコンセプトなので、手直しして再実行までの手続きとかね
UWCSを機動していると予期せぬエラーが発生しましたとでて強制終了させられてしまいます windows XPではこのようなことは起こったことがありませんでしたが、vistaと7では起こるようになってしまい、 vistaではtdl.dll、7ではusp10.dllによるものだとありました。 ぐぐってみたらマイクロソフトオフィスIMEが悪さをしているとあったのでgoogle IMEに変更をしましたがかわりありません どうすれば解決できるのでしょうか
エラーの内容書かない人はアレだよね。
>>436 エラー文とは以下のようなもので良いのでしょうか
障害が発生しているアプリケーション名: UWSC.exe、バージョン: 4.8.4.0、タイム スタンプ: 0x2a425e19
障害が発生しているモジュール名: USP10.dll、バージョン: 1.626.7600.16385、タイム スタンプ: 0x4a5bdb32
例外コード: 0xc0000005
障害オフセット: 0x0005294e
障害が発生しているプロセス ID: 0x1074
障害が発生しているモジュール パス: \syswow64\USP10.dll
レポート ID: 2597ed6c-589d-11e2-87c2-8c736eddde36
ごめんなさいそう長くないのに本文が長過ぎますとでたので2つにわけました
>>437 callを多様しているのでそのでいかもしれません
callでメモリが増えるというのはa.uwsからb.uwsをcallしたときはもちろんですが、同じa.uwsをcallしたときにも増えるのでしょうか
例外コード: 0xc0000005 これでぐぐったら良いじゃないかと毎度。
正直スクリプトの問題ならスクリプト見ないと原因はわからないな スレッドの作りすぎCOMオブジェクトの解放をしないで作りまくってるetc UWSCとは別のツールが問題ならそのツールを起動するのに必要なファイルが古いとか何らかのファイルがセキュリティーソフトに引っかかってるとか スクリプトに問題があると思ってるなら各動作ごとに分解して動作させて見てエラーが出る場所を特定するとかPRO版使ってるならデバッグツール使って確認してみるとか
>>439 メモリアクセス違反のエラーであるとでました
ただ、解決するためにはリカバリをしなければならないようで、他の解決策を全て行い、それでもだめだった場合に最終手段としてやりたいと思います
>>442 すみません。これはつまりどういうことなのでしょうか
次から次へコールする構造を改めてみてはという事じゃない?
なるほどそういうことでしたか。 メモリの使用量について聞いていたのでそれの答えが書かれているものかと思っていました callを少なくすることで使用量も抑えられそうなのでさっそくやってみよます
call乱用はよろしくないのか 色々融通効くからプロセス毎に分けてその都度呼び出してたわ
最後の最後に☆3キター リックドムだけど
現在日時の取得ってどうやるんですか
Print で出てくるウィンドウの出現位置を任意に指定できませんか
>>449 GetTime()の後にG_Time_??変数に入る。ですね。
ヘルプの制御関数をスルーしてました。すみません。
452 :
名無しさん@お腹いっぱい。 :2013/01/09(水) 19:38:32.38 ID:GGO+2d6qP
>>449 GETTIME
>>450 acw(getid(GET_LOGPRINT_WIN),X座標,Y座標)
LogPrint( True, 500, 300, 100, 200 ) でおkなようでした。
スレッド処理便利すぎるwwwwwwwwアホかwwww便利すぎるwwwww いいですね。Thread
if 変数 = "abc" then 処理 ←出来る if !変数 = "abc" then 処理 ←出来ない ブロック文でelse使うしかないの?
>>456 否定の!を文字列に対して使ってるから期待しない動きになるんじゃない?
if !(変数 = "abc") then 処理 か
if 変数 <> "abc" then 処理 でしょ
>>457 ありがとう
記号はヘルプやGoogle先生に聞きにくくて困ってた
「演算子」って言うんだなこれ
>>375-379 だな
他人の作ったスクリプトとか見てるとよく出ると思うけどプログラムやってる人とかじゃないと知らないって人は多そうだ
ある特定の条件があれば、スクリプトの特定の場所、または特定の行に飛ぶということをやりたいのですがどうすればいいのでしょうか 移動させずに、その特定の場所にかいてある文と同じ内容をそのまま書けば良いとも思いましたが、 そうするとやたら長くなってしまうので、省略するためにどうにかできないものかと思っています。
Function - fend /Procedure - fend を使う 釣り?
今まではぐぐったり他の人が作った構文を参考にすることで解決できていましたが、 今回はそれでもわからなかったのでここで質問をさせていただきました functionとprocedureは初めて見るものなのでどう使うかまだよくわかりませんが、あとはぐぐるなりして自分でやってみます ありがとうございました
これはひどい
乞食にエサを与えると味を占めて何度でもエサを貰いに来るようになる
関数引数戻り値やらモジュールという言葉には馴染みがなかったということもありますが、 私の調べ方が悪かったようですね ご迷惑をお掛けしました
関数という構造化すら知らないド素人ノンプログラマでも ある程度スクリプトで使えていたというのが驚き そして最初の言語がUWSCだというのは 長い目で見ると気の毒
最近どこのスレでも無駄に煽る奴が多いこと
それは無い
おやまの大将気分で煽る奴はほっときゃおk
何これちょっと ドコにも書いてないけど参照渡しした配列をリサイズ出来ないの? それとも俺のバグ?
Var
参照渡しの配列がリサイズ出来たりエラー吐いたり 挙句には何故かJOINが文法間違ってないのに Syntax error 気持ち悪いから組込みプログラミング風に 最初から最大領域確保するように書き直してるけど エライ手間だわ。 今朝から別の用事があったのに今日丸つぶれだわ〜
直し始めてから気づいたが… 俺の4.8bなんだが… 2012/11/12 [Ver4.8c] ループの中で DIM宣言の配列サイズを増やした時にエラーになるのを修正 以前はちゃんと動いていたから、 もしかしていつの間にかエンバグしてたのかな? もう直し始めちゃって今さら元に戻せないよ… 他にも色々思い当たる修正あり過ぎるわ。 全然枯れてないじゃん…くそがorz
この分だと、Windows Server 2003 上でだけ、XPでは問題ない、 IF文やJOIN文が Syntax Error になるのもバグかな〜
>>475 参考までにエラーになるJoin()ってどんな感じなの?
出先からです
>>476 join(array, ",")
配列が存在しなかったりresize(array)=0の時だけかと思ったら
極普通の時にもエラー
4.8dにしてからはまだ時間がたってないので何とも言えないけど今のところ未確認
ちなみに2003ではIFBにせずに複数行構文にするとエラー
何にせよこんな目にあったからには今後一切、配列の動的確保とかする気ない。
UWSCの本分はWindowsの自動操作であって汎用言語の提供ではないんだから
車輪の再発明してないで.NETで使えるようにしてほしいわ…
>>477 ありがと
普通の構文だね、4.8bだけどエラーになったことないので他の要因との兼ね合いなのかなぁ
今後エラーになたときのために記憶に留めておくよ
あくまで多分だけど、 リソース不足の時に関数の引数に配列を指定した場合、 参照渡しにした場合、サイズ変更した場合、 この辺りが怪しいと思う。 また、chkimgやgetitemなどで生成される配列のシステム変数が、 該当なしの時にresize(ALL_ITEM...)=-1(だったと思う)になる時があって、 いじる前にヒット数をチェックして ヒット数0のときは触らないようにしないといけないというのが意外と盲点。
FUKIDASIが超ちらついてたのも超直ったw こんなに違うもんなのかというほど前はちらついてたがバグだったのか…
俺はストップボタンがちらつくぜい
配列の問題が解消したら アクセシビリティ経由でのGETITEMがフリーズしやすい現象も 減ったか無くなった気がする
484 :
名無しさん@お腹いっぱい。 :2013/01/27(日) 13:20:58.64 ID:7HPQBdjI0
autohotkeyではできたんですが ~RBUTTON&1::SEND{F1} のように右クリしながら1を押すとF1が押される みたいなことを UWSCでやるにはどうしたらいいんでしょうか? SETHOTKEYを使おうと思ったらマウスのクリックを設定できないみたいなのですが
戻値 = GETKEYSTATE( キーコード )
>>324 の再投稿です
分かる方いましたらよろしくお願いします
hnd = GETCTLHND(IE.HWnd,"MacromediaFlashPlayerActiveX")
フラッシュのハンドルの取得の仕方を調べると大体これが出てくるんですけど、
この方法だと"MacromediaFlashPlayerActiveX"で動いている一部のフラッシュのハンドルしか取得できません
フラッシュが何で動いているか(≒GETCTLHNDの第二引数に何を書けばよいか)を調べる方法を教えてください
ブラウザによってはFLASHのハンドルは取れないよ(公式のサンプル内にも書かれてる) IE上のFlashからデータ取得(バーチャルFXからレート取得) #n60 // IE10 では Flashは内臓の為ハンドルの取得はできないので、クライアント全体"Internet Explorer_Server"を指定 flash_id = HndToID(GETCTLHND(IE.HWnd,"Internet Explorer_Server"))
488 :
486 :2013/01/28(月) 21:02:18.30 ID:2bwxkZWr0
回答ありがとうございます コードがAAのあぼーん設定に引っかかってて気づくのが遅れてしまいました…
エエーッ!
アアーッ!
491 :
名無しさん@お腹いっぱい。 :2013/01/30(水) 19:11:13.13 ID:OylmZoEI0
sd
492 :
名無しさん@お腹いっぱい。 :2013/01/31(木) 21:19:24.14 ID:e7HV4NQR0
uwscはumiumi windows scriptなり
Aキーを押している間はA連打 Aキーを押しながらBキーを押している間はAB連打 (Bキーを単独で押しても反応しない) 上記の動作をしたい場合どうすればいいでしょうか? 続けてifb-endifを記述するとAを押したときにBが一度だけ入力されてしまいます
すみません。勘違いかもしれません。 もう少し試行錯誤してみます。
SLCT_BOXの選択肢を横に並べたいのですが できるでしょうか?
無理じゃない? どうしても横に並べたいなら自分でフォーム作ってデザインするしか無いと思うよ
CLICITEMでCLK_ACCが探すのが遅いんだけど、どうすりゃいいの?
スレッド処理、検索の仕方を変える、PCのスペックを上げるetc
ACC使わないでクリックできるアプリに変更する
できますん
>>497 低スペック・低リソースだとフリーズするよ。
ということは逆に、ハイスペックだと速くなる気がするw
>>503 ACC使わないでクリックできるアプリに変更する
>>505 鉛筆削りを使わなくて済む筆記用具に変更する、と言ったのに、どうやって変更するか聞かれても困るんじゃね?w
座標クリックしちゃえよ
508 :
名無しさん@お腹いっぱい。 :2013/02/08(金) 11:02:47.74 ID:uvTvzEkv0
どこかに4.6とか旧バージョンはありませんでしょうか 現在の環境に4.8だとサンプルでもCOM errorを吐いてまったくCOMが使えない状態です 誰か持っていたらくださいませ
510 :
名無しさん@お腹いっぱい。 :2013/02/08(金) 11:38:26.30 ID:uvTvzEkv0
>>509 いや環境はXP ProのSP3です
Microsoftエージェントは特に呼んでいないのです
使えなくなったきっかけがUWSCのバージョンうpだったもので
どのサンプルがエラー吐くの?
512 :
名無しさん@お腹いっぱい。 :2013/02/08(金) 12:26:22.75 ID:uvTvzEkv0
514 :
名無しさん@お腹いっぱい。 :2013/02/08(金) 12:55:23.18 ID:uvTvzEkv0
別にエラーなんて出なかったが・・・
516 :
名無しさん@お腹いっぱい。 :2013/02/08(金) 14:27:27.88 ID:irJbQx570
for nextとかの繰り返し処理させるスクリプト組んだんだけど、何回か処理するうちに正常に処理できなくなります 動作が重いのかなーとか思ったりしますけど、なにか解決策あります?
call使って別に分けてみるとか
sleep入れてみるとか
callとかsleep入れたら軽くなるんですね 長めのスクリプト組んでたので試してみます
ごめんスレ読み返したらcallは駄目だw
sleep多用してみます!
質問です。 下記の通り行うと ウィンドウの端から500ずつのところまで画像を保存してしまいます。 aaaの座標から幅、高さを500の範囲ところまで保存したいのですが、 G_IMG_X,G_IMG_Yから指定範囲を保存するにはどうすれば良いですか? IFB CHKIMG("aaa") SAVEIMG(画像名,ID,G_IMG_X,G_IMG_Y,500,500,TRUE,100) ENDIF
G_IMG_X+500とかにしなきゃだめなんじゃね?
SAVEIMGのIDを0にすべきなんじゃないの?
>>523 500→G_IMG_X+500ってことですよね?
やってみましたが結果は同じでした
>>524 IDを0にしたら画面全体の左上端からになってしまいました
SAVEIMG("画像名",0,G_IMG_X,G_IMG_Y,G_IMG_X + 500,G_IMG_Y + 500,TRUE,100) でテストしたら普通に画像の位置から500,500の範囲の画像作ったぞ?
きっとMOUSEORG使ってる事を隠してるんだよ
モニタからはみださないようにチェック入れたほうがいいと思う
>>526 それでやると検出座標分でかくなるぞ@4.8b
530 :
522 :2013/02/10(日) 11:39:05.97 ID:16Z+YVXF0
>>527 MOUSEORG使ってます
使ってると失敗するんでしょうか?
>>530 MOUSEORGで何やってるかによって、CHKIMG、SAVEIMG 部分の記述が変わってくるって意味
MOUSEORGを上書きする方法でいいなら
MOUSEORG(ID)
IFB CHKIMG("aaa")
SAVEIMG(画像名,ID,G_IMG_X,G_IMG_Y,500,500,FALSE,100)
ENDIF
532 :
522 :2013/02/10(日) 13:22:54.77 ID:16Z+YVXF0
>>531 出来ました
教えて下さった皆様ありがとうございました
UWSCで指定したウインドウが表示(ホップアップ)されたらwavを鳴らせるようにできませんか? 簡単だったら教えてください。
GETIDとSOUND関数
あなたには難しいから教えません
たまにウインドウ閉じてもID残ってて面倒なのあるけどな あとタイトルかぶったり
538 :
名無しさん@お腹いっぱい。 :2013/02/11(月) 17:44:38.35 ID:K/ANU6sD0
iMacrosと連携して使っている人、いる? Excelからデータを抽出して、Firefoxでフォームに入力するのを自動化したいんだけど、うまくいかない。 UWSCでExcelから抽出した文字列をiMacrosに受け渡す方法が分からない。
IE使えよ
540 :
名無しさん@お腹いっぱい。 :2013/02/11(月) 19:00:01.01 ID:+dfhn8vw0
繰り返し処理をfor文で回しているのですがそれが何周目かを画面の片隅にでも表示させることは できないでしょうか? FUKIDASIで表示させてもすぐに消えてしまいます。すごい初心者質問ですがよろしくオンエガイします
すぐ消えるって上書きしない限り消えないと思うjけど
542 :
名無しさん@お腹いっぱい。 :2013/02/11(月) 19:05:24.89 ID:+dfhn8vw0
FUKIDASIで消えないように出来ました! しかし実害はあまりうないが通常実行中は消えるUWSCのウィンドウ(バー)が 画面上でちかちか点滅するようになってしまった
一体どんなやり方をしてるんだ・・・
ブラウザで表示されているページ内で指定した画像を見つけ、見つけたらその画像が左上の隅に表示されるようにページを上下左右にスクロールさせたいのですがやり方を教えていただけないでしょうか? ブラウザはプニルを予定しています
545 :
マウスでクリックしたらそこを原点にして丸を書きたい :2013/02/11(月) 21:26:53.76 ID:lSOnMsoQ0
ACW(GETID("無題 - ペイント","MSPaintApp"),-4,-4,1200,900,10) dim px = 650, py = 520, r = 200, s = r / 2 for i= 0 to s t = 3.14 * 2 * i / s x = cos(t) * r + px y = sin(t) * r + py if i = 0 then BTN(LEFT,DOWN,x, y) else MMV(x, y,10) next BTN(LEFT, up)
546 :
533 :2013/02/13(水) 09:51:12.11 ID:P5sQE7p90
Gmailにログインして、今日きたメール全部の本文だけを抽出してメモ帳に書き出すのを書いているんですが、うまくできません。 テキストを選択するのが失敗してしまう様です。 誰かヒント下さい。
メールソフト使え
550 :
544 :2013/02/14(木) 10:05:49.51 ID:ifA5gmvm0
どなたか
>>544 のやり方教えていただけないでしょうか?
画像チェックして目的の位置に来るまでキーダウンじゃダメなの?
>>550 >>551 でもいいけど
ソースに画像のURLがあったらそこにフォーカスを移動するだけでいいんじゃね?
この方法はフォーカスが移動できる必要があるけど。
で、画面下に現れるんだけど、
いったんページの一番下までスクロールしてからその画像にフォーカスを移すと、画面の一番上にスクロールされる。
タブキーでフォーカスを移動していけばどんなかわかる。
でも、たぶん、画像にフォーカスは移せんよなあ・・・
フォーカスを移動するには、テキストボックスならIESETDATAでヌルテキストを入れてもいいけど
DOMに .forcus ってメソッドがある。
配列とhash使う機会ある?
取得画像が複数で逐一処理するなら配列は避けられない ハッシュリストは無いよりマシだと思ってたが、 それ以前に配列処理の信頼性に疑念が残り 固定配列長しか怖くて使い得ない 本当は既に完成した外部の言語からUWSCをライブラリとして操作すれば UWSC言語仕様内にハッシュリストなんか不要 もっともっと高性能なライブラリがとっくにあるのに使えない
555 :
名無しさん@お腹いっぱい。 :2013/02/17(日) 12:54:06.60 ID:5bHGYbUl0
疑念て何?そんな検証もできない問題がなんかあるん?
556 :
名無しさん@お腹いっぱい。 :2013/02/17(日) 12:54:53.52 ID:5bHGYbUl0
あと、DLL呼べるんだから高性能()なライブラリが使えない理由がわからない。
>>557 COM呼び出しじゃ駄目なのかい?
list = CreateOleObj("System.Collections.ArrayList")
list.Add("ddd")
list.Add("zzz")
list.Add("aaa")
list.Sort()
list.Insert(1, "@@@")
print list.Count
for i=0 to list.Count-1
print i + ": " + list.Item(i)
next
print "IndexOf: " + list.IndexOf("ddd", 0)
MsgBox("")
なんだよ、ただリストが使いたいだけの話? あまりに低レベル。 すまんかった。
低レベル過ぎる煽り
さすが高性能()
高レベルすぎて話が見えないオレがいる
>>559 想像以上に簡単に使えるんですね。
現状、ChkImgで複数画像を検索すると、座標がALL_IMG_X[]とALL_IMG_Y[]に入りますが、
複数種類の複数画像を、list.location.kindとlist.location.Xとlist.location.Yに入れ、
原点からの距離list.distanceを設定してソートする、なんてことができるといいなぁと考えてます。
配列でやっていたことがありますが、一つ前のバージョンのバグでひどい目にあって使いたくないのです。
565 :
名無しさん@お腹いっぱい。 :2013/02/17(日) 23:41:07.66 ID:5bHGYbUl0
バグってどんな?
566 :
名無しさん@お腹いっぱい。 :2013/02/18(月) 11:36:32.44 ID:iTRhX4jH0
UWSCのスケジュール機能はUWSC.exeを起動していないとスケジュール起動しないのでしょうか? 試しにスケジュール機能を設定してやってみましたが、UWSC.exeを先に起動しておかないと始まりませんでした
>>566 フリー版の為に「.uws」のファイルを関連づけができて無いとか・・・?
Pro版なら多分インストール時に関連づけが行われるので常駐させる必要ないし
EXE形式にする事もできるから、多分起こりえないと思う
>>567 UWSCを起動してない状態で、スケジュール起動させたい.uwsファイルをダブルクリックしてみましたが、ちゃんと実行されました
関連付けはされてると思うんですが
皆さんは問題無くUWSC.exe先行起動無しでスケジュール起動できてるんでしょうか?
>>568 なるほど、関連づけはできてるみたいですね
じゃあ例えば、UWSCを起動する引数としてそのファイルを渡すようにしてみたら?
>>568 自分もできないよ
時間関係の処理は中で記述してスタートアップに入れてやってるから
普段使ってないスケジュールは詳しく知らないけど
>>569 起動する引数とは具体的に同やることなのでしょうか?
>>570 PCを起動したらUWSCも起動するように設定してるって事ですね
私もそうしてみます
とりあえずUWSC.exeを起動させていればスケジュール起動するようなので
>>571 タスクスケジューラにどうやって設定してるか解らないけど
起動するファイルを「UWSC本体」、起動する引数の箇所を「動かしたいマクロファイル名」
とすればどうでしょう?
スタートアップであれば、それ用のバッチファイルを書いてやるとか
例えばコマンドラインから
"C:\Program Files (x86)\UWSC\UWSC.exe" "動かしたいマクロファイル"
としても起動されるので
>>573 アドバイス色々ありがとうございました
皆様のご意見を参考に何とか解決できそうです。
ご迷惑おかけしました
575 :
名無しさん@お腹いっぱい。 :2013/02/18(月) 17:55:53.02 ID:i7uFTMl20
タスクスケジューラーじゃなくてUWSCのスケジュール機能でしょ? そっちはさすがにUWSC起動してないと動かないと思うが
576 :
名無しさん@お腹いっぱい。 :2013/02/19(火) 22:12:21.04 ID:yATMOBM80
uwscで作業させてるときに作業させたままディスプレイをオフさせる方法ないですか?
>>576 ディスプレイをオフにするソフトを起動すればいいのじゃないか?
>>579 でもuwscでマウスとキーボード使われるから画面つくくない?
ディスプレイのケーブルでも引っこ抜いとけ ノートPC?そんなの知らん
poffでできるだろ
>>580 それはソフト次第だろ
UWSC側もMORG_DIRECT使ったりで回避できないのかな
ディスプレイついてないと動かないのかと思った
UWSC起動させるとCtrl-Wとか押すと変になるんだけどこれ切れないの? emacs使ってるから困るんよね。
ホットキーがかぶっているんでしょ? 設定に無いと思う??
587 :
名無しさん@お腹いっぱい。 :2013/02/20(水) 17:14:26.38 ID:5SQInTKz0
ランチメニューの設定のところの下部に設定開けるところあるからそこを変更だな
emacsなんてやめちゃえ ブラウザで長文書いてるとき癖が出て何度もひどい目に遭った
>>587 おぉ、サンクス。「設定」にないんで決め打ちなのかと思ってたわ。
>>588 emacsで書いてコピペしかしないんで関係ない。
Ctrl-Wってブラウザのカレントタブを閉じるショートカットキーじゃんw
変更じゃなくて無効にできない? ランチメニューのホットキーなんて使わないんだよなぁ
何らかのキーコードの入力があった場合 (どれでも) と言うことがしたいのですが 一つ一つ vk_〜〜 と登録していく以外に方法は無いでしょうか?
AからZとか数字はFOR文で一応回せる が基本全部登録が必要 def_dll GetAsyncKeyState(Long):int:user32.dll while true sleep(0.1) for i = vk_a to vk_z if GetAsyncKeyState(i)<>0 then fukidasi(i) next for i = 0 to 9 if GetAsyncKeyState(i)<>0 then fukidasi(i) next //後は個別にSHIFTやら他のキー判定を記述 wend
数字の部分は間違ってたわ
ありがとうございます こんなことができるとは・・・
>>593 GETKEYSTATEを使わないのは何故
getkeystateだとCPUが専有された時にキー判定が正常に行われない時があるから全キー判定とか無茶させるならGetAsyncKeyStateのほうが良いんじゃないかと 別にgetkeystateでも動くことは動くけどね
uwscは他のツールを使わず(コマンドプロンプトぐらいのものはあり) チューリング完全ですか?
今時チューリング不完全なもの探す方が難しいと思うが。
ありがとうございます あんなものでもチューリング完全なんですね、よくわかってないけど
全部のキー監視するのはいいな、アイディアいただくわ でもなぁ、 ここ数秒以内に パソコン触ってるかどうか確認する方法ないんすかね?
>>601 触ってない間ループさせて
その前後の時間の差を求めて判断すればいいのでは?
>>601 調べてみたけどスクリーンセーバーみたいに検知するには
何かフックしてDLLしてキーロガーらしいっすよ…
オンラインかオフラインかスマートに確認する方法無いですか? スカイプよんで画像認識とかはもうこりごりです・・・
ピングが通る外部サイト宛に飛ばしてみた結果を見るとか
二つ同じuwscが 起動しないようにするにはどうしたらいいですか?
NotMultiplex = -1
>>607 実行中ずっと自分自身のuwsファイルを排他制御モードで開いておく
開始時に開けなかったら他が使用中と判断して即終了させる
ヘルプのFOPEN関数を参照
>>608 >>609 ありがとうございます
その他の項目、こんなのが合ったんですね
何年もヘルプ使い続けてるのに見逃してました
ありがとうです
あ、これは全部を二重禁止しちゃうのか 400にできるとは・・・ 足りない足りないとずっと困っててあきらめてたらこんなものが思わぬところで助かりました FOPENキッチリ覚えてみます
スリープモードからの復帰を認識するのって なんかありますかね?
613 :
名無しさん@お腹いっぱい。 :2013/02/24(日) 14:00:04.45 ID:fMy1AT9R0
スリープの解除にパスワードを設定してパスワードの入力画面が出たらとかじゃダメなの?
UWSCで秒数をカウントして実際の経過時間と比較して閾値を超えたらその間CPUが止まっていたと見なせるんじゃない?
変数を文字列に変換できます? aiueo = "aiueo" で""内が変数で表したものにしたいのです
ああ、vartype使えばいいみたいだけど procedure内の変数と文字列がからむと うまく機能しないみたいです…
>>616 その文章では何をしたいのかよくわからん
他人に伝わるようもっと丁寧に説明すべき
どうもすいません procedure ok_osu( var title , var class_dayo , var button_name ) title_mojiretu = vartype( title , var_bsrt ) class_dayo_mojiretu = vartype( class_dayo , var_bsrt ) button_name_mojiretu = vartype( button_name , var_bsrt ) id = getid( title_mojiretu , class_dayo_mojiretu ) clkbtn( id , button_name_mojiretu ,clk_btn ) fend こんなのを callして お手軽に"OK"やら"はい"を押したいのですが 機能してくれないのです
うん意味分かんない
621 :
名無しさん@お腹いっぱい。 :2013/02/25(月) 17:42:53.00 ID:UDne134m0
>>619 とりあえず
×var_bsrt
○var_bstr
あ、ですね、申し訳ない コピペは修正前のでしたが 修正してたんですがやっぱ動かなかったです…
>>619 clkbtn じゃなくて ClkItem の間違いなんじゃないの?
それと、引数を参照で受け取る必要ないよね
procedure ok_osu( title, class_dayo, button_name )
id = GetId( title, class_dayo )
ClkItem( id, button_name, CLK_BTN)
fend
Num lockしてるときの 右側のテンキーの vk_ってあります? 見当たらない(><)
CHKIMGの使い方について質問させてください CHKIMG("○○○.bmp, -1,,,,, -1") として仮に該当する画像が5つあった場合戻値はいくつになるのでしょうか また左上から数えて1番目と2番目の座標情報は ALL_IMG_X[], ALL_IMG_Y[] で表すとどのようになるのでしょうか ひたすらぐぐっても分からなかったのでご教授願います
628 :
名無しさん@お腹いっぱい。 :2013/02/27(水) 14:28:53.04 ID:EwKWtS0s0
番号にて -1指定時はヒットした数を返し、座標情報は配列変数 ALL_IMG_X[], ALL_IMG_Y[] に格納(配列はゼロから) ヘルプより
はいそれを何回も読んで組んだのですがエラーが出てしまいます 組んだマクロを書いてみます やりたい事は指定画像が複数出てきた場合に左上の一番目からクリックして別ページに飛び処理Aを行い 次に左上から二番目の画像をクリックして同じ処理を行いそれを出てきた画像分繰り返すと言うものです hits = CHKIMG("○○○.bmp", -1,,,,, -1) for i = 0 to hits step1 BTN(LEFT, CLICK, ALL_IMG_X[i], ALL_IMG_Y[i]) REPEAT SLEEP(0.1) UNTIL !IE.busy AND IE.readystate=4 処理A NEXT こう組んだのですがはじめの一回は上手く行くのですが二番目の処理になると 変数:ALL_IMG_X 配列をオーバーしてます ○○行目:BTN(LEFT, CLICK, ALL_IMG_X[I],ALL_IMG_Y[i]) と出てしまい処理をしてくれません
あんまり詳しくはないけど、こんなんだと普通にいけたっぽい hits = CHKIMG("test.bmp", -1,,,,, -1) msgbox("ヒット数" + hits) for i = 0 to hits - 1 msgbox(ALL_IMG_X[i] + "<#CR>" + ALL_IMG_Y[i]) BTN(LEFT, CLICK, ALL_IMG_X[i], ALL_IMG_Y[i]) // REPEAT // SLEEP(0.1) // UNTIL !IE.busy AND IE.readystate=4 // 処理A next EXIT サーチ時のヒット数は1からだけど、変数格納が0からっぽいので -1してやればいいって事なのかな多分
出来ました!! 解決策まで示していただきありがとうございます >サーチ時のヒット数は1からだけど、変数格納が0からっぽいので >-1してやればいいって事なのかな多分 正にこの通りでした 気付かなかった・・・
>>631 あとヒット数0をチェックして配列に触らないようにしないと参照しようとした瞬間エラーで止まるよ
そうなんですよねw 出来たと言っておきながら実践導入したらエラー吐いてますw 今日は時間が無いので明日ちょっと弄んでダメだったらまた聞きにきます
634 :
629 :2013/02/28(木) 17:43:39.55 ID:KwvETkQU0
むっずい
ifb CHKIMG("test.bmp", -1) hits = CHKIMG("test.bmp", -1,,,,, -1) for i = 0 to hits - 1 BTN(LEFT, CLICK, ALL_IMG_X[i], ALL_IMG_Y[i]) // REPEAT // SLEEP(0.1) // UNTIL !IE.busy AND IE.readystate=4 // 処理A next else // hits=0の場合の処理 endif
質問させてください キーボード入力を変更したいのですが、例えば「/」(テンキー)を入力したら 「DB」と入力後カーソルをDとBへ移動する(←を一度押す)等をしたいです その条件を3つ程度入れたいと思ってます UWSCでそう言う事は可能でしょうか。可能ならどのような条件文にすればいいでしょうか。 不可の場合はどの様なソフトなら可能でしょうか。 調べましたが、「/」をDに変えるようなソフトはあったのですが、 上記の様な事は出来ないようでしたので、UWSCでできるかと考えました。
ありがとうございます!やっと本当に出来ましたw 問題は処理Aでもう一回別の CHKIMG("??.bmp", -1) を書いてしまい ループさせた時に座標情報が上書きされているのが原因でした なのでfor〜の一行下にもう一度 CHKIMG("○○.bmp", -1,,,,, -1) を書いてやることで解決しました ありがとうございました まだまだ他のマクロも書きたいのでまた詰まったら相談させてください
>>636 SetHotKey(VK_ESCAPE, MOD_SHIFT, "End") // Shift + ESC で終了
SetHotKey(VK_DIVIDE, 0, "OnPush")
while true
Sleep(1)
wend
procedure End()
exitexit
fend
procedure OnPush()
Kbd(VK_D)
Kbd(VK_B)
Kbd(VK_LEFT)
fend
一応出来るけど
テキスト編集に利用するつもりなら、マクロ機能のあるテキストエディタを使った方がいいよ
>>638 SetHotKeyでエラーが出たのでUWSC最新に変えたら問題なくできました
最近追加された関数なのかな?
まずは礼だろクズ
更新履歴には2011/06/05のバージョンで追加になってる
>>638 あれ?俺もこんな関数あったの今気づいた。
>>593 をこれでやったらループ回しっぱなしにせずイベントドリブンで書けるってことか。
>>637 今更だがIFB hits >= 1みたいな条件付けるだけでもいいんだぜ
大規模規制の巻き添え食らって書き込みするのも大変だぜ
645 :
名無しさん@お腹いっぱい。 :2013/03/02(土) 01:30:23.62 ID:uiJlB9ca0
ifbとifって区別する必要あるの?
ぱっと見で区別しやすいのと説明で使う場合わかりやすい 上の例だとIFBだとENDIFで挟む必要があるからその1行だけではなく間にBTN関数の行入れてきちんとはさみなさいってことでもあるし IF hits >= 1 みたいな条件でだとその1行で解決みたいに見えちゃうだろ
テスト
ifでもブロック形式でかけるんでしょ? 多分昔は1行でしか使えないとかだったのかも知らんけど。 ifbって使ったことないけどいいんだよね?
649 :
名無しさん@お腹いっぱい。 :2013/03/03(日) 22:08:19.81 ID:ZvbQYUqe0
画像認識で最初は普通に認識してくれるのですが ブラウザを付け直すと画像が普通にあるのに認識してくれません 背景色もそれ自体の色も形も変わっていません なぜでしょうか
650 :
名無しさん@お腹いっぱい。 :2013/03/03(日) 22:30:13.39 ID:WsLPRlRy0
ひどい質問だけど、エスパーするとウィンドウIDが変わってるから
while-wend条件をfalseにすると repeat-untilと同じに repeat-untilは条件をtrueにするとwhile-wendと同じになるよな
同じにはならない
なったよ。 chkimgと組み合わせで while chkimg("hoge.bmp")=false 処理 wend でhoge.bpmが表示されてない間に「処理」しろで repeat 処理 until chkimg("hoge.bmp")=true でhoge.bmpが表示されるまで「処理」しろ --- repeat 処理 until chkimg("hoge.bmp")=false でhoge.bmpが表示されなくなるまで「処理」しろで while chkimg("hoge.bmp")=true 処理 wend がhoge.bmpが表示されてる間「処理」しろ だろ? 同じじゃん repeat-untilが最低でも1回は処理するとか揚げ足取りは無しな
揚げ足取りでもなんでもなくそこが最大の違いだろ そりゃ同じになることもあるがな
repeat 処理 until chkimg("hoge.bmp") 処理の所で処理1と処理2を順にやりたいんだけど、なんかスッキリ書く方法ってないかな? 下の様にしてみたけど、なんかスッキリしない repeat ifb A=1 処理1 A=2 else 処理2 A=1 endif until chkimg("hoge.bmp")
while true 処理1 if chkimg("hoge.bmp") then break 処理2 if chkimg("hoge.bmp") then break wend
657 :
名無しさん@お腹いっぱい。 :2013/03/04(月) 01:37:21.82 ID:Z1jGiP6z0
>>850 つまり画像認識のスクリプトにもGETIDというようなものが必要になるということでしょうか?
>>647 MOUSEORG使ってるんじゃないの?ってことじゃないの?
使っていて意味がわからないって言うことならHELP見てね
Aという100行位の処理中に、ポップアップが発生したら自動でOKか続行を押したいんだけどこれでいける? errorID = getid("","#32770",-1) repeat 100行の処理 break until(errorID <> -1) Clkitem(id, "OK") Clkitem(id, "続行") もしくは while(errorID = -1) 100行の処理 break wend Clkitem(id, "OK") Clkitem(id, "続行")
いやbreakじゃなくてexitだな。 getidの引数に-1をつけると、無期限待ちになるってこういう解釈でいいのかなって。
ブラッシュアップさせた Thread Popupkill() 以降は普通に本処理記述 errorid=1//【本処理最終行に記述】#32770の監視終了条件 //【最下行に定義】#327701でポップアップが出たらOKが続行を押す(アプリケーションの例外ハンドル等想定) Procedure Popupkill() errorID = getid("","#32770",-1)//-1で無期限待ち repeat until(errorID <> -1) clkitem(id,"OK") clkitem(id,"続行") Fend
IEをバックグラウンドで動かしたいんだがどうにも動かない。 教えてエロい人 サンプルを参考に書いたスクリプト id = GETID("InternetExplorer.Application") MOUSEORG(GETCTLHND(id,"Internet Explorer_Server"), 2) BTN(left,click,1000,600,100) KBD(VK_A); KBD(VK_B); KBD(VK_C) オブジェクト判定に使ったスクリプト While True // ESCを押したときに終了する If GetKeyState(VK_ESC)Then ExitExit sObject = Status(GetID(GET_FROMPOINT_OBJ), ST_CLASS) Fukidasi(sObject) //Shiftを押したときにクリップボードにコピーする If GetKeyState(VK_SHIFT)Then SendStr(0, sObject) Sleep(0.1) WEnd サンプルの通りメモ帳動かしたら動作した IEで起動で積んだ 過去ログ探して他の方法もチャレンジ ID読み込みできてないんじゃないかとHndtoIDつかって移動したりした やっぱり積んだ ←今ここ 1週間さまよってもまだできないんだ お願い助けて
GetObject
>>653 あー他に言語やったことない証拠ですねぇ…
do〜whileとかCで使ったりもするし、揚げ足取りとかwwwwwwwバカ過ぎてヤバイ
俺はループにFOR以外は使わない。 ループに必ず上限を設定し無限ループを予防するため。 ループの終了が正常なのか異常なのか判定するのがちょっと面倒臭いけどね。
>>661 errorIDはgetidを実行した時点でのIDだからそれだと
何万回ループしようと消せるポップアップは1つだけだな
というか消した跡もerrorIDが-1に更新されず無限ループ Thread Popupkill() を実行する度にそういったゾンビスレッドが増殖する
clkitemのidは閉じたいポップアップのIDじゃないだろうから、閉じるの失敗したままスレッド終了 ポップアップ出なかったら、出るまでgetidから帰ることなくゾンビスレッド化 erroridはgetidの戻り値で上書きされるので、errorid=1しても無意味
これってexe化したあとuwsには戻せないんですか?
基本的には無理やね
exe化するときにuwsファイルが消えるわけでもないし取っておけばいいだけじゃないか
初心者なんですが質問してもいいですか ある変数の値を読み取って、その数値をキーボードで入力する式を作りたいのですが どういう式を書いたらいいでしょうか 例えば変数nが321の時、キーボードを3、2、1と叩くようにする感じです
文字や数字を仮想キーへと変換する自作関数を作っておく 文字数を調べる 文字数分文字を1つずつ分解して別の変数に入れる(配列にしておくと後で楽) 作った自作関数を使い分解した文字を仮想キーへと変換 文字数分KBDさせる 配列にしておけば何行も書かなくてもFOR文でまとめて数行の処理可能
例 PUBLIC 文字 = 321 PUBLIC MOJI = "" 文字数 = LENGTH( 文字) IFB 文字数 >= 1 FOR i = 1 to 文字数 MOJI = COPY( 文字, i,1) キーダウン NEXT ENDIF //自作関数 PROCEDURE キーダウン FOR n = 0 to 9 IF MOJI = n THEN KBD(EVAL("VK_"+n),0,100) NEXT FEND
>>673-674 ありがとうございます
不勉強な為分からない箇所がありますがいろいろ試してみたいと思います
無事完成させることが出来ました ありがとうございました これからも精進して参ります
>>676 初心者のくせに仕事はやいな!おれも見習おう
>>664 たりめーだks
オマエは他に言語やった事ないやつがここに来る想定さえもできてないのか?
むしろそっちの方が見てて多いだろ。
優越感に浸ってて楽しいね。ボクwww
知ったかぶるから恥かくんだよ
知ったかぶってるように受け取ってるお前ら糞なプライド高すぎwwww
教えてもらう態度じゃないな。 下がって良いぞ。
痛すぎるwww これ、素なんかな?
ここでしか威張れない連中なんだ ほっといてやれww
雑魚ほどキャンキャンと吼えるという実証
firefoxでは
id = GETID("Mozilla Firefox", "MozillaWindowClass")
SENDSTR(id, "
http://google.com " , 1, True, True)
SCKEY(id, VK_RETURN)
でURLに入力してくれるのですが
Chromeでは
id = GETID("Google Chrome","Chrome_WidgetWin_1")
SENDSTR(id,"
http://google.com ",1,True,True)
SCKEY(id,VK_RETURN)
としてもURLに入力してくれません
ChromeではURLのとこをクリックしてからじゃないと無理なのでしょうか?
687 :
ゴルゴ :2013/03/07(木) 01:42:47.61 ID:Pc6emUy+I
uwscを起動するとchange of exe name is prohibitionとでてしまいます。 解決策はないでしょうか…
名前を変えない
前スレかどこかでその質問で自爆してた奴がいたな…
690 :
名無しさん@お腹いっぱい。 :2013/03/09(土) 05:53:46.98 ID:uhKracHj0
あるマクロを再生しているなかで、1時間毎にwindows自体を再起動って、どうしたらいいですか? 再起動したらマクロも当然終了しちゃうので、1回で終わってしまいます。
再起動 POFF(P_REBOOT) マクロはスタートアップにでも登録しておけばいいでしょ
サンプル www1.axfc.net/uploader/so/2822641
>>692 このくらいの量なら直接投稿しちゃえyp
適当に圧縮して無断で投下
あと変数名が判りやすいから要らないコメントは勝手に消しといたw
//サンプルスクリプト「一時間後に再起動」 //前提条件:UWSファイルがUWSCと関連付けされていてShortcutの実行でスクリプトが動くこと // UWSファイルへのShortcutがこのスクリプトと同じフォルダに入っていること UWSファイルへのShortcut="\UWSファイルへのShortcut.lnk" objNetWork=CreateOleObj("WScript.Network"); User名=objNetWork.UserName カレントディレクトリ=GET_CUR_DIR StartupFolder1=""; StartupFolder2="" 再起動時刻=GETTIME(1/24) OS=KINDOFOS(FALSE)//32bitか64bitの識別はしない SELECT OS CASE 13 //WINDOWS XPの時 StartupFolder1="C:\Documents and Settings\" StartupFolder2="\スタート メニュー\プログラム\Startup" CASE 22 //WINDOWS 7の時 StartupFolder1="C:\Users\" StartupFolder2="\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup" DEFAULT //OSが識別不明の時は終了 msgbox("OS識別不能のため終了するよ"); EXITEXIT SELEND //StartupにShortcutがあるかどうかのチェック IFB FOPEN(StartupFolder1 + User名 + StartupFolder2 + UWSファイルへのShortcut, F_EXISTS) //"Startupにファイルが存在するかどうかのチェック //ファイルが存在する場合の処理 ELSE //Startupファイルが存在しない場合はShortcutファイルをコピー DOSCMD("copy /y <#DBL>"+ カレントディレクトリ + UWSファイルへのShortcut + "<#DBL> <#DBL>" + StartupFolder1 + User名 + StartupFolder2 + "<#DBL>") ENDIF WHILE ! GETKEYSTATE(VK_ESC) //ESCが押されるまでループ 現在時刻=GETTIME() IF 再起動時刻 <= 現在時刻 THEN POFF(P_REBOOT) //最初の時間の取得から1時間経過したらPC再起動 FUKIDASI(再起動時刻 - 現在時刻 + "秒後に再起動"+"<#CR>"+"終了させる時はESCキーを押してね"); SLEEP(1) WEND
ミス × StartupFolder2="\スタート メニュー\プログラム\Startup" ○ StartupFolder2="\スタート メニュー\プログラム\スタートアップ"
いーなー スタートアップフォルダ名の取得関数を独立させて 再起動待ち関数をスレッドで動かしたいな ショートカットの作成はWSHで出来るけど面倒くさいからこのほうがいいか…
697 :
692 :2013/03/09(土) 09:48:05.64 ID:mjUStLr/0
規制中で海外鯖通してるのでID変わっていても気にしないでくれ ショートカットのリンクは www.vector.co.jp/soft/dl/win95/util/se158605.html この辺りのツールと組み合わせて自動でショートカットを作らせると環境に左右されないで動くものが出来る(忍法帳の関係でリンク貼れないのでアドレスの先頭は消してある) 使い方はツールのREADME見てサンプルを元にDOSCMDで動かせばOK 後再起動の予定時間変更してPC再起動を短時間で繰り返すような悪質なスクリプトは作っちゃダメだぞ、絶対だぞ
1時間毎に再起動マクロサンプル2 www1.axfc.net/uploader/so/2822700 ショートカット作成コマンドツールを利用しショートカットを作成するスクリプト DOSCMDではなくbatファイルをEXECで実行だったね
ログイン画面が出ないように設定しなきゃならないのかな?
>>697-698 いいですね〜私も使わせて頂きますわ〜
スタートアップフォルダ取得を関数化してみたよ
PRINT getStartupFolderPass()
FUNCTION getStartupFolderPass()
// ユーザープロファイルの場所
// Windows 2000/XP/2003 C:Documents and Settings<ログイン名>
// Windows Vista/7/2008 C:User<ログイン名>
// スタート メニュー (ユーザ)
// XP C:\Documents and Settings\ユーザ名\スタート メニュー\プログラム
// Vista C:\Users\ユーザ名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
// UWSCは 95/98/MEは動作せず、NT/2000は未サポートで正常動作しない場合多いため、対象外とする。
objWshShell = CreateOleObj("WScript.Shell")
strUserProfilePass = objWshShell.ExpandEnvironmentStrings("%USERPROFILE%")
numKindOfOS = KINDOFOS(FALSE) //FALSE:OS種別番号を返す
SELECT numKindOfOS
CASE 20, 21, 22 // Windows Vista/2008Server/7
RESULT = strUserProfilePass + "\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"
CASE 12, 13, 14 // Windows 2000/XP/2003Server
RESULT = strUserProfilePass + "\スタート メニュー\プログラム\スタートアップ"
DEFAULT
RESULT = EMPTY
SELEND
FEND
>>699 そこはPGでやるより窓の手でやったほうが楽かな〜
XPではログオンパスワードは無しにすると自動ログイン出来なかったから注意
>>699 あくまで1時間毎の再起動と再起動後に同じマクロファイルを実行という動作のサンプルスクリプトだからログイン画面が出るならその処理を自動で行う動作を入れないとダメ
自動でログインさせるならセキュリティーなんてないようなものだからスクリプト作るよりも初めから出ないようにしたほうが楽だとは思うけど
>>698 CSC.exeが流石に古くて、?startup?の機能がWindows7で失敗するので、パスを埋め込まにゃいかんから、やっぱりDOSCMDでやることになるかな〜
空白を含むパスだったり色々あって、
set DIR=%~dp0
"%DIR%csc.exe" "%DIR%1時間毎に再起動.uws" "C:\Users\(ユーザーID)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\UWSファイルへのショートカット.lnk"
で、やっとこさ作成できた。" は <#DBL>に置き換えて文字列作成かな。
ただ、UWSの関連付け、サクラエディタで編集するようにしてんだよね〜
ショートカットの中身にUWSCへのコマンドラインオプション含めて作成出来ればいいんだけど。
Readme102の最後に /arg オプションがあったからコレで行けるかな
>>703 oWshShell = CreateOleObj("WScript.Shell")
startupFolderPath = oWshShell.SpecialFolders("Startup")
スクリプトのPATH = "D:\hoge\1時間毎に再起動.uws"
ショートカットファイル名 = "UWSC - 1時間毎に再起動"
oShortcut = oWshShell.CreateShortcut(startupFolderPath + "\" + ショートカットファイル名 + ".lnk")
oShortcut.TargetPath = GET_UWSC_DIR + "\UWSC.EXE"
oShortcut.Arguments = "<#DBL>" + スクリプトのPATH+ "<#DBL>"
oShortcut.WorkingDirectory = GET_UWSC_DIR
oShortcut.Save()
>>704 FAでたかw
WSHでそんなに短くw
thx.
WSHにしろAPIにしろ知らない奴がこうしたいと思ってぐぐってもキーワード違いで拾ってこれないレベルだよなこれ…
IsWindowって何だよ便利すぎだろw
346 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2013/03/10(日) 01:48:45.09 ID:dfoFNmwc0
>>319 そういう時こそUWSC
60秒毎に上書き保存の一例
-----------この下から
DEF_DLL IsWindow(HWND): BOOL: user32.DLL
idAT = GetID(" - 暗号メモ帳", "Afx", -1)
hAT = IdToHnd(idAT)
While IsWindow(hAT)
Sleep(60) // ここで周期指定(単位:[秒])
ClkItem(idAT, "ファイル\上書き保存")
Wend
ExitExit
-----------この上までを「CyclicSave.uws」等の名前で保存、以下はUWSCの使い方をどうぞ
707 :
名無しさん@お腹いっぱい。 :2013/03/10(日) 13:37:57.43 ID:aFLtHCIQ0
どなたか優しい人このFireFox用javascriptをUWSCのIEで使える様に移植してもらえませんか self.port.on("shika", function(message) { if (message) { var image; var img = document.getElementsByTagName("img"); for (var i = 0; i < img.length; i++) { if (img[i].src.match("\/shika\.php")) { image = img[i]; // image.onload = function() { if (image) { var arr1 = [ "キャンプ","サイクリング","サイコロ","サバイバル","ジャングル", "ストーンヘンジ","チュパカブラ","ツチノコ","ネッシー","バックパッカー", "ハネムーン","ビックフッド","ヒッチハイク","ひのきの棒","ぶらり旅", "マチュピチュ","モヘンジョダロ","リュックサック","ルーブル美術館","遺跡探索", "一人旅","家族旅行","海外旅行","奇妙な冒険","寄り道", "国内旅行","傷心旅行","小旅行","食べ歩き","新婚旅行", "世界一周","素泊まり","卒業旅行","大冒険","探究", "探検","途中下車","洞窟探検","道草","貧乏旅行", "放浪の旅","万里の長城","未開の地","未確認生命体","未知との遭遇", "民宿","夢旅人","夜行バス","野宿","旅館", "旅人","旅立ち"];
var arr2 = [ "dioS7", "c1XgN", "dvFt2", "atnny", "vR8YF", "ot8ED", "TIeCk", "2rrop", "U0jpW", "LlPY5", "XLCct", "8ZjuD", "yHyaX", "sT1Nl", "t5KOY", "NqK9N", "vp1+g", "jTwM+" , "eIupq", "YRkao", "sm5qc", "VPlFs", "35uw+", "x71qc", "2mton", "zlUvN", "vt9Ww" , "IJF8d", "m592t", "qHWhl", "y3mp8", "Wgthf", "dEsul", "ljmLB", "LgS+S", "cs78S", "xgokh", "xIdAi", "qHNG7", "8EYFe", "rOsSM", "z3Tiv", "GCQMc", "8mFyq", "qSkpy", "KVY98", "jF5id", "1NqaB", "BEhWR", "hpqp+", "HmHea", "eOFL1"]; var canvas = document.createElement("canvas"); canvas.width = "400"; canvas.height = "100"; var ctx = canvas.getContext("2d"); ctx.fillRect(0, 0, 400, 100); ctx.drawImage(image, 0, 0); var data = canvas.toDataURL(); var n = arr2.indexOf(data.substr(-25, 5)); if (~n) { var input = document.getElementsByTagName("input"); for (var j = 0; j < input.length; j++) { if (input[j].name == "imgauth_word") { if (arr1[n]) input[j].value = arr1[n]; } else if (input[j].value == "決") { input[j].focus(); } } } }; break; } } } });
作成依頼スレいってこい
失礼 作成依頼スレのURLを教えて下さい
UWSC勉強しろ。
Webブラウザで表示中のページを文字列検索して 最初に該当した文字列の座標XYを返す関数を教えてください 座標を返さずとも該当箇所にマウスを移動したりクリックしたりできるものでもありがたいです。
>>712 公式でスルーされてたやつか?
そんな関数無いし作るとしても相当めんどくさいから誰も作りたがらないと思うぞ
もし作るとしたら
1、ソースからBODY部分の取得
2、先頭の数文字を抜き取る
3、PosACCを使って座標を0から2で抜き取った文字がヒットするまでチェックする
って感じでやるしか無いだろ
サンプル //アクティブウィンドウのID取得 ID = GETID(GET_ACTIVE_WIN) //アクティブウィンドウの座標取得 ACTIVE_X = STATUS(ID,ST_CLX) ACTIVE_Y = STATUS(ID,ST_CLY) ACTIVE_WIDTH = STATUS(ID,ST_CLWIDTH) ACTIVE_HEIGHT = STATUS(ID,ST_CLHEIGHT) FOR i = ACTIVE_X to ACTIVE_WIDTH FOR n = ACTIVE_Y to ACTIVE_HEIGHT //アクティブウィンドウ内の文字を検索 HIT_WORD = POSACC(ID,i,n,ACC_BACK) FUKIDASI(i+","+n) IFB HIT_WORD <> "" //文字が見つかったらその座標をPRINT表示して終わる PRINT ("(" + i + "," + n + ")で文字を発見") EXITEXIT ENDIF NEXT NEXT //文字が見つからなかった時のPRINT文 PRINT ("指定した文字が見つかりませんでした")
何らかの文字がヒットしたらその座標をPRINTして終わるサンプル FUKIDASI(i+","+n)はチェックしてる座標だからいらないな アクティブウィンドウ内の座標を全チェックするから実用的ではないぞ
質問の内容から察するにわざわざ座標を取得する必要のない操作がしたいだけに見えるがな
どうでもいい訂正 FOR i = ACTIVE_X to ACTIVE_WIDTH >FOR i = ACTIVE_X to ACTIVE_X + ACTIVE_WIDTH FOR n = ACTIVE_Y to ACTIVE_HEIGHT >FOR n = ACTIVE_Y to ACTIVE_Y + ACTIVE_HEIGHT クリックしたりってことはそれ自体で反応がある部分だろうからCLKITEMとかで出来そうだけど座標を知りたいってことだからね
画像ならともかく文字の座標をわざわざ調べて何したいんだろうね その座標をクリックしたいだけだったらとんでもない徒労だよね だから回答がなかったんだろう 条件後出しと同じ、質問の仕方が悪い典型だね
>>712 oRange = oIE.document.body.createTextRange()
ifb oRange.findText("探したい文字列") = false then
MsgBox("見つからない")
else
oRange.scrollIntoView()
MsgBox("x = " + oRange.offsetLeft + " y = " + oRange.offsetTop)
endif
>>713-715 ,717
質問は初めてです。ありがとうございます。
PosAcc()での走査よりも早いものがよかったので質問しました。すみません。
>>716 ,718
検索し該当する文字列付近に表示されている情報を取得したいだけです。
CLKITEM()でクリック後に座標をずらすということも試したところ、
とても遅く、また文字によっては必ずしもTrueを期待できなかったので。
>>720 ありがとうございます。比較的単純なページでは期待通りでした。
本来対象のページはスクリプトのサイトのようで
oIE = GetActiveOLEObj( "InternetExplorer.Application" )
MsgBox( oIE.document.body.innerHTML ) で中身が殆ど取れず、
oRange = oIE.document.body.createTextRange() で名前が不明だと言われました。
bodyが空っぽなのかも?body.Children?とかの正しいElement?を指定する?
という感じで躓きました。oRangeを利用したいので
HTMLとか勉強する必要がありそうです。ありがとうございました。
>>720 ここまでくるともはやUWSCそのものが足をひっぱる側だな…
>>721 > 該当する文字列付近に表示されている情報
というのが背景画像とかだったら意味があるかもしれないけど、
文字なり何らかのアイテムであるなら、遠回りだと思うな
ちなみに力技で、 探す文字列もその近傍の情報も 全て画像判定するという方法がある。 大量の画像を予め登録しておく必要があるが、 画像に重ね合わせやぼかし効果などの変更が加わらない限り 確実に判定できる。
clkitemでツールバーの中身?が効かない時があります どうすればいいですか?
ツールバーのアイコン画像を探してクリック
>>719 今の自分だとhta用にすら変換できないw
勉強してきます
>>726 何で効かないのか、原因を知って
根本的に解決したいです
>>728 725の文章だけで原因究明できると思ってるの?
730 :
名無しさん@お腹いっぱい。 :2013/03/15(金) 04:45:15.92 ID:stmevALv0
「test」ウインドウにある複数項目のうち、「hogehoge」以外のどれかひとつをランダムに選んで、変数「Y」に格納したいのですが、 kazu = GETITEM(test, ITM_LSTVEW) while True X=random(kazu) Y = ALL_ITEM_LIST[X] if POS("hogehoge", Y)>0 then continue else break wend こうすると、 変数: ALL_ITEM_LIST 配列をオーバーしてます 〇〇行目 : Y = ALL_ITEM_LIST[X] とのエラーが出てしまいます。 どこが間違っているのか分からず、困っています。 よろしくお願いします。
DIM X[2]=1,2,3 という配列に対して X[3]とかX[4]とか呼びだそうとするとそのエラーが出る
732 :
名無しさん@お腹いっぱい。 :2013/03/15(金) 05:22:58.27 ID:stmevALv0
>>731 ありがとうございます。
しかし、
X=random(kazu)
を
X=random(kazu - 1)
としても、やはりエラーが出てしまいます。
>>730 GetItemで取得できてないんじゃないの
print kazuでちゃんと1以上になってる?
>>733 すみません、その通りでした。
kazu = GETITEM(test, ITM_LSTVEW,-1)
にしたら、ちゃんと取得してくれて、エラーがなくなりました。
ありがとうございます。
よろしければ、もうひとつ教えて下さい。
IE.navigate("
http://aaa.com/ ")
repeat
sleep(0.1)
until !IE.busy AND IE.readystate=4
sckey(IEid, vk_ctrl,vk_t)
sleep(1)
IE.navigate("
http://bbb.com/ ")
repeat
sleep(0.1)
until !IE.busy AND IE.readystate=4
という部分で、
COM_Error:RPC サーバーを利用できません。
〇〇行目 : IE.navigate("
http://aaa.com/ ")
のエラーが出てしまい困っています。
どこか、まずいのでしょうか。
その前に IE.Visible = True を入れたら、エラーは出なくなりました。 お騒がせしました、すみません。
clkitemでツールバーの中身?が効かない時が 複数のソフトであったんですよね なのでよくある普遍的なことなのかと思いました。すいません
IE10だとソースとie.document.body.innerHTMLで返ってくる値が違うんな 属性の並び順が変わってる
>>737 innerHTMLは、DOMをソースコードの形式に再構成したものであって、元のソースではない
STOPFORM(FALSE) ACW(GETID(GET_ACTIVE_WIN),889,494,1030,705,0) 上記のように、マクロ実行時にアクティブになってるウィンドウを 所定の位置に移動するという簡単なマクロを作ろうとしたのですが、 マクロ実行時にSTOPボタンのウィンドウがアクティブになってしまい、うまくいきません STOPFORM(FALSE)も効果ないようです 何かいい方法ないでしょうか
>>739 CtrlWin(GetId(GET_THISUWSC_WIN), MIN)
ACW(GETID(GET_ACTIVE_WIN),889,494,1030,705,0)
>>741 なるほどーUWSCを最小化するってことですか
ありがとうございました
743 :
名無しさん@お腹いっぱい。 :2013/03/16(土) 06:11:45.86 ID:frETHI600
処理1 if1 処理2 if1 最初のif1を満たした時に処理1に戻って if1を満たさなかったら処理2 二番目のif1を満たしたら処理2に戻る のループを作りたいんだけど出来る?
>>743 repeat
処理1
until !( 条件if1 )
repeat
処理2
until !( 条件if1 )
あっれ 今まで resize(array) の戻り値は、インデックスの最大値、 array[123] なら 122 が戻ってくると思っていたが、 勘違いしていたみたいだな… DIM testSingleDimensionArray[123] PRINT "一次元配列のRESIZE参照テスト testSingleDimensionArray[123]" PRINT "RESIZE(testSingleDimensionArray)=" + RESIZE(testSingleDimensionArray) //123 DIM testMultiDimensionArray[5][2][500] PRINT "多次元配列のRESIZE参照テスト DIM testMultiDimensionArray[5][2][500]" PRINT "RESIZE(testMultiDimensionArray)=" + RESIZE(testMultiDimensionArray) //5 PRINT "RESIZE(testMultiDimensionArray[])=" + RESIZE(testMultiDimensionArray[]) //5 PRINT "RESIZE(testMultiDimensionArray[][])=" + RESIZE(testMultiDimensionArray[][]) //5 PRINT "RESIZE(testMultiDimensionArray[0])=" + RESIZE(testMultiDimensionArray[0]) //2 PRINT "RESIZE(testMultiDimensionArray[0][0])=" + RESIZE(testMultiDimensionArray[0][0]) //500 ver4.8c1
過去のソース見たら、全てインデックス上限値と見なしてプログラムが組まれてたわ… これから使用箇所190行を修正する作業が始まるお…
ん・・・?あってるんじゃないの dim a[5]としたらできるのはa[0]〜a[5]までの6個だよ
>>747 まじか…
> 多次元配列には宣言が必要: DIM 変数名[数]
> (配列での初期値代入: DIM X[2]=1,2,3 配列数の省略可 DIM X[]=1,2,3 )
DIM宣言時の数は要素数だから
DIM a[5] → a[0]〜a[4] とばかり思っていた…
一体いつから─────── 一般的に配列の宣言は要素数を書く、と錯覚していた?
ってか今調べたらUWSCが特殊なのね。
どうりで配列の結合が失敗するわけだ。。。
これから誤修正した190行を書き戻す作業が始まるお…
ランチメニューを常時出しておく設定はありませんか?
// FORのテスト PRINT "FOR lI=0 TO 3" FOR lI=0 TO 3 PRINT lI // 0,1,2,3 NEXT PRINT "end of FOR lI=0 TO 3" PRINT "now lI="+lI+", out of loop." // 4 PRINT "FOR lI=1 TO 1" FOR lI=1 TO 1 PRINT lI // 1 NEXT PRINT "end of FOR lI=1 TO 1" PRINT "FOR lI=1 TO 0" FOR lI=1 TO 0 PRINT lI // 実行されない NEXT PRINT "end of FOR lI=1 TO 0" PRINT "test end."
何が言いたいのか全くわからない lIとか普通使わないとか? 1 TO 0 とか初心者でもしないようなミスのこと?
(`・ω・´)ゞ
753 :
名無しさん@お腹いっぱい。 :2013/03/16(土) 23:31:43.51 ID:/I0Wh0cB0
CHKIMGをC++で実装しようと思ってBitmap使ったら速度どのくらい違う?
IESETDATAでテキストボックスにパスワードを自動入力してログインさせたいが name属性がソースに見当たらない件。。 Java Scriptらしいのでcommon.jsの中や全てのhtmlファイルやjsファイルの中見たけどelementの記述がない場合諦めるしかない?
つ IERec
<tr align="center"> <td> <input type="password" id="ID_PASSWORD" onkeypress="handleKeyPress(event)" /> </td> </tr> <tr align="center"> <td> <center> <table border="0" cellpadding="0" cellspacing="0"> <tr><td align="center" style="text-align:center;"> <a class="ovalbutton" href="javascript:Login();"><span id="oLogin" class="item_btn">LOGIN</span></a> </td></tr> </table> </center> </td> </tr>
>>755 おいおいこの3年間Free版の方使ってたからIERecは1回も触ったことなかったよ。
この3年間手動で解析して苦労してた事がこれで全部1瞬でわかってたわけだ。。驚いたよ。さすがPro
しかしコレ。uwscpro本体じゃないがIERecもやっぱレジストしないと試用期間しか使えないわけだよな。。?
ありがとう
>>755
2003Server上でのみ、JOINの第2引数が省略できない。
最新版に更新してJOINの全ての引数を省略せずに書いても2003Server上でJOINが使えなかった。 とうとうサポートから外れたか。
try〜endtryによる例外処理すら効きません >2003server XP代わりに使っていましたが、突然のお別れを告げられた気分ですw
初心者です。 mouseorg(id,2)で非アクティブウィンドウに左クリック命令を送りたいのですが上手くいきません。 第2引数を0や1に変え、ウィンドウをアクティブにしてテストしてみると目的通りに動いてくれます。 クリックの命令自体は(場所は全然違うけれど)届いているみたいなので座標が間違っていると思うのですが、 絶対座標、相対座標どちらを試してもだめでした。 画像認識などはしておらず、BTN(LEFT,CLICK,100,100)のように直接数値が入っている簡単なプログラムです。 原因と解決方法を教えてください。 よろしくお願いします。
MOUSEORG(ID,2,MORG_BACK)は?
>>762 今試してみたけど、やっぱり変なところをクリックしちゃうみたいです。
>>763 バックグラウンドの問題じゃなくクリック位置の方の問題だったのか
HELPにも
以降のMMV()、BTN()、PEEKCOLOR()、CHKIMG()関数の座標を指定ウィンドウを基準にしたものにする
基準指定にて MORG_DIRECTが指定された場合は KBD()、MMV()、BTN()関数の情報は直接ウィンドウ(オブジェクト)へ送る
って説明がきちんとされてるけどスクリーン座標でやってるとか言うオチじゃないの?
>>764 スクリーン座標=絶対座標ですよね?
他は全くいじらずに、mouseorgの第2引数を0または1にしてアクティブ時にテストする時には、
ウィンドウの位置を動かしても目的の場所でクリックしてくれるので、そこは大丈夫だと思います。
ダメ元でウィンドウを(0,0)に配置しても解決しませんでした(間違って絶対座標でやってたらこれで動くと思ったので)
第2引数を2にすると、アクティブ・非アクティブに関わらず変なところをクリックします。
// 必:起動オプション(accessibilityをOnにする) "--force-renderer-accessibility"
path = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
id = Exec(path + " --force-renderer-accessibility --process-per-tab --new-window
http://www.google.co.jp/ ")
表示完了待ち(id, "Google 検索")
SENDSTR(id, "検索文字", 2, True, True) // 検索文字
sleep(1)
CLKITEM(id, "Google 検索", CLK_ACC or CLK_LEFTCLK) // 検索ボタン
表示完了待ち(id, "日本語のページを検索")
CLKITEM(id, "日本語のページを検索", CLK_ACC or CLK_LEFTCLK)
// 指定アイテム/文字が確認できるまで待つ
Procedure 表示完了待ち(id, item)
While True
Sleep(0.4)
for n = 0 to GETITEM(id, ITM_ACCCLK or ITM_ACCTXT)-1
if ALL_ITEM_LIST[n] = item then Exit
next
wend
Fend
サンプルにあるこのコードを実行してもグーグルトップが表示されるだけで"検索文字"を入力してくれません
今はこの書き方ではダメなのでしょうか
どうせネトゲじゃねーの?
どちらも、クリックする直前にウィンドウIDをGETIDで再取得してmouseorgしてみ?
>>767 最近はブラウザゲーの無人化やらネトゲのマクラーが質問に来すぎだなw
でも最近のブラゲは無人化されてるんだろ最初から?
アクセシビリティ用インターフェース経由でアクセスする例って、何処かにサンプルがありませんか?
アクセスするってどういうことだ? 普通にACC使う方法ならサンプルの通りで動くが
既に起動している「ABC」という名前のエクセル(正確にはLibreOfficeのCalc)のファイルのセルA1の値を読み取る方法をを教えてください
>>773 MSエクセル操作したければUWSC有料版
と思ったがLibreOfficeじゃダメだな
マクロ起動するとかで出来ないかと思ったが、UWSC関係ないか。
OLEで操作するならUWSCより何倍も優れた言語と開発環境を使えばいい。 ましてやEXCELなどのマクロ記録機能のついたアプリなら、マクロでやらない理由に乏しい。 マクロ機能のないアプリの手動操作をそのままトレースして置き換えるのがUWSCの本来ではないか。
>>773 CSVで保存
TXTで保存とかさせて
そのファイルの1番目のデータ読めばいいんじゃね?
>>773 COM操作したいなら wsh com.sun.star.ServiceManager でググれ
ちなみにポータブル版はCOM操作できない(標準状態では)
COM操作したいなら Windows マクロテクニック を買って勉強したら?ちゃんと書いてあるよ。
VBSでExcelのウィンドウを開かずにやりくりする方法があったはず
そのウィンドウをアクティブにしてホームキー、F2、Ctrl-A、Ctrl-Cとか すればいいんでね?
782 :
名無しさん@お腹いっぱい。 :2013/03/23(土) 19:46:43.87 ID:OJVqFLF90
毎日7時から18時までの間で、4分おきに作動させたいんですが、 設定画面のスケジュール項目から設定できますか? どうやって設定すれば良いのか分からずに悩んでいます><
4分おきに起動するスクリプトの最初に現在時刻の確認を行い 時間外なら終了するという処理を追加すると似た動作になりますね
WHILE TRUE GETTIME() IFB 0 = G_TIME_NN MOD 4 and G_TIME_HH >= 7 and G_TIME_HH <= 18 CALL "○○.uws" ENDIF SLEEP(1) WEND って内容のUWSファイルを別に作ってそれを実行 ○○.uwsその時間に実行させるファイル ファイル読み込みがすぐに終わる(1分以内)ようなら連続して使用しないようにSLEEP内の時間を調整
式による設定 (HH=7 OR HH=8 OR HH=9 OR HH=10 OR HH=11 OR HH=12 OR HH=13 OR HH=14 OR HH=15 OR HH=16 OR HH=17 OR HH=18) AND ((YMDNN MOD 4)=0) Helpそのままだけど
祝日判定はどうやったら一番スマートかな〜 エクセルは使いたくないな
788 :
名無しさん@お腹いっぱい。 :2013/03/24(日) 04:33:13.67 ID:EFy0Kgav0
>>784 callだとpublic変数が初期化されないからだめなケースもあるよね?
初期化必要ならCALLする前に初期化するとかPOFF(P_UWSC_REEXEC,TRUE)でループの最後にツール自体を再起動させるとか
791 :
名無しさん@お腹いっぱい。 :2013/03/25(月) 05:09:16.38 ID:sMeSNtHh0
googleリーダーのスターを自動的に付けるという スプリクトを作ったのですが 見てるときは動作するのですが見てないとスプリクトは 動いてるようですがスターがつかないという現象が起こってます どのようにすれば改善できるのでしょうか。 ブラウザ Firefox19.02 googleリーダーのショートカットキーを使用して sキーでスターを付けてpキーで上のアイテムに移動 それのループと一定時間のSleepをする。 ソース For i = 1 TO 8 For i = 1 TO 30 KBD(VK_S,CLICK,10) KBD(VK_P,CLICK,10) Sleep(0.5) NEXT Sleep(3600) NEXT For i = 1 TO 10 KBD(VK_S,CLICK,10) KBD(VK_P,CLICK,10) Sleep(0.5) NEXT よろしくお願いします。
792 :
名無しさん@お腹いっぱい。 :2013/03/25(月) 08:41:39.42 ID:dpUxCjVy0
repeat 処理A REPEAT SLEEP(0.1) UNTIL !IE.busy AND IE.readystate=4 ifb CHKIMG("○○.bmp") repeat 処理B REPEAT SLEEP(0.1) UNTIL !IE.busy AND IE.readystate=4 until !CHKIMG("○○.bmp") repeat 処理C REPEAT SLEEP(0.1) UNTIL !IE.busy AND IE.readystate=4 until !CHKIMG("○○.bmp") continue endif until !CHKIMG("○○.bmp") IF文が出たときだけcontinueで処理Aの上のrepeatに戻りたいのですが 上手く行きません エラーメッセージは ループ外にCONTINUE文がある です ご教授願います
>>792 まず動作しないように始まりにexitexitを書いておく
エラー出なくなるまで、処理A,B,Cを順にコメントアウトしていって、原因箇所を絞り込む
絞り込めたら、更にコメントアウトして絞り込む
コマンドプロンプトを呼び出して 2行以上を続けて行動させる たとえばフォルダを移動して、特定ファイルを開くといったことをするにはどうすればいいんでしょうか? 1行ずつしか受け付けてくれない感じがします
>>795 ありがとうございます
シェルとか色んなもの勉強しないと色んなことが出来ないものなのですね
797 :
名無しさん@お腹いっぱい。 :2013/03/25(月) 13:34:55.40 ID:dpUxCjVy0
前より全然ご褒美儲からない オワコン
ニダランの自動化の質問は受け付けておりません
>>791 ショートカットキーが正しく実行できたかどうか全くチェックしないフィードフォワード処理であれば、
ショートカットキー実行結果が出てくるタイムラグのうち最大限に長いウェイトを取らなければすぐコケる。
最大限のウェイトを取ればすぐにはコケないがとても遅い。なおかついつかは必ずコケる。
確実に実行したければ手順ごとに実行結果のフィードバックを設ける。
「見ていない時」がウィンドウ非アクティブとかバックグラウンドとかの意味で言っているなら、
そもそもその方法では無理。
>>792 それ以前にまず重複部分は関数化して吐き出す。
REPEAT
SLEEP(0.1)
UNTIL !IE.busy AND IE.readystate=4
↓
PROCEDURE waitIeReady()
REPEAT
SLEEP(0.1)
UNTIL !IE.busy AND IE.readystate=4
FEND
それから、
それから、 repeat 処理A waitIeReady() ifb CHKIMG("○○.bmp") repeat 処理B waitIeReady() until !CHKIMG("○○.bmp") repeat 処理C waitIeReady() until !CHKIMG("○○.bmp") continue endif その他の処理 until !CHKIMG("○○.bmp") のようにちゃんと字下げをしてループを把握していく。 処理B,Cについても関数化し、それぞれ単独で正常動作するか テストプログラムを書いてテスト。
Dim HHMM[ 12 * 2 * 7 -1 ] For i = 0 To ReSize( HHMM ) Step 1 h = HHMM[ i - i Mod 7 ] m = ( i Mod 7 - 1 ) + "0" Select i Mod 7 Case 0 HHMM[i] = i / 7 Case 1 HHMM[i] = "{" + h + ":" + m Case 2,3,4,5 HHMM[i] = h + ";" + m Case 6 HHMM[i] = h + ":" + m + "}" Default HHMM[i] = "??:??" SelEnd Next N = PopUpMenu( HHMM ) For i = 0 To ReSize( HHMM ) Step 1 HHMM[i] = Replace( Replace( HHMM[i], "{", "" ), "}", "" ) Next MsgBox( HHMM[N] ) Print "12 * 2 * 7 -1: " + "<#TAB>" + ( 12 * 2 * 7 -1 ) Print "ReSize(): " + "<#TAB>" + ReSize( HHMM ) Print "i: <#TAB>" + "<#TAB>" + i Print "Length(): " + "<#TAB>" + Length( HHMM ) Print "" Print "HHMM[166]: " + "<#TAB>" + HHMM[166] Print "HHMM[167]: " + "<#TAB>" + HHMM[167] Print "HHMM[168]: " + "<#TAB>" + HHMM[168]
なんかコメントください
チラシの裏にでも書いてろ
とあるゲームで、mouseorg(2)を使ったときにダブルクリックを認識しません クリックの間隔が正しくないという問題ではなくて、クリックを連打させても反応しないです mouseorg(0)にした場合は認識するので、ダブルクリックという処理を送る必要があるんでしょうか 解決策わかる人いたらよろしくおねがいします。
>>804 APIのPostMessageで直接ウインドウメッセージを送る
>>802 わざと複雑に書いてるように見える
s = ""
for i = 0 to 23
s = s + Replace("x,{x:00,x:10,x:20,x:30,x:40,x:50},", "x", i)
next
HHMM = Split(s, ",", true)
N = PopUpMenu(HHMM)
if N = -1 then exit
MsgBox( Replace(Replace(HHMM[N], "{", ""), "}", "") )
>>804 APIを使えばそういうことができるんですか
現状必要ないかなぁと思って手をつけてなかったんですが、試行錯誤してみようと思います
助言ありがとうございました
>>806 悔しいです!!
手取りいくらですか?
もしかして趣味グラマですか?
810 :
名無しさん@お腹いっぱい。 :2013/03/28(木) 01:22:30.64 ID:hEmcj9Um0
CHKIMGは、exe化したら動かない?
多分カレントディレクトリの問題
812 :
810 :2013/03/28(木) 02:38:16.07 ID:hEmcj9Um0
スクリプトの間はUWSCの実行ファイルの場所がカレントディレクトリだけど 実行ファイル化したらそのファイルの場所がカレントディレクトリになる そしてCHKIMGを相対ディレクトリで指定していたとしたら 当然、比較用のファイルが見つからない
815 :
名無しさん@お腹いっぱい。 :2013/03/29(金) 13:00:19.83 ID:8qOHGb+X0
javaのswingは操作できないの? // Javaのデモアプリ FileChooserDemo を起動、操作(ACC方式) #n39 これを見たらできるような感じなんだけど。 全然できないよ
V2C用のマクロ作ろうとしてる? ACC方式ってコメントにある様にその範囲でなら操作できる
3つ質問があります 3つとも id = GETID("Mozilla Firefox", "MozillaWindowClass") でIDを取得してからになります clkitem(id,"開始", CLK_BACK or CLK_LEFTCLK) でマウスポインタが開始のボタンまで移動してクリックするんだけど ポインタを動かさないままクリックする方法はありますか? SENDSTR(id, ,url , 1, True, True) SCKEY(ffid, VK_RETURN) URL移動するときアクティブになるんですけどアクティブにならない方法ありませんか? for n = 0 to 10 ifb pos("result",Getstr(id,1,STR_ACC_EDIT)) 表示完了待ち(id, "使う") break endif BTN(LEFT, CLICK, STATUS(id,ST_WIDTH)/2, STATUS(id,ST_HEIGHT)/2, 80) sleep(0.5)//待つ next URLにresultが出るまでクリックという方法で フラッシュをクリックしてるんですけどもっといい方法ありませんか
火狐を使わないという選択肢
>>817 1・2
VMwareなどの仮想マシン上でやれば全て解決
3
方針としては正しいフィードバック処理
ただしアクセシビリティ経由だと遅かったりフリーズしたりすることがあるので
敢えて画像判定でチェックしたほうが良い場合がある
俺の場合、指定画像が存在すればクリックする関数を設定して使っている
Firefoxでなくてもいいけど、IEは使いたくない
821 :
名無しさん@お腹いっぱい。 :2013/03/29(金) 22:52:39.11 ID:8qOHGb+X0
>>816 FXトレードの注文に使用したいのですけど。うまくいきません。
サンプルのMonkeyやFerretみたいにCからjava access bridge使ってたら
できるんですかね?
誰かやった人いてる?
822 :
名無しさん@お腹いっぱい。 :2013/03/31(日) 10:26:28.19 ID:1XiCPpsO0
// if GetKeyState(VK_LBUTTON) tnen exit if GetKeyState(VK_LBUTTON) then exit コメントアウトした方は実行するとエラーになる。 上はWebページからのこぴぺ 下は手打ち
あ、then が tnen だったわ(笑
株とかFXをUWSCでやってる人は凄いな ソースくれ。おれも資産増やしてぇぜ!
( ´Д`)キモッ
UWSCにできてWSHで出来ない事って何があります?
828 :
名無しさん@お腹いっぱい。 :2013/03/31(日) 14:24:00.59 ID:1XiCPpsO0
>>824 .net と Excel でやれ。マジで。
>>826 マルチスレッド。
なんかググったらそれっぽいものを実現する方法はあるみたいだ。
あと、他アプリの制御はWSHでは難しいんじゃないかな。
>>827 キーボードなら WshShell.SendKeys
マウスはできないみたいだけど、DLL を用意して呼び出せば出来る。誰も正式公開しないけどなー。
あえてUWSCを避ける理由としては、管理者権限なしで実行できることかな。
確かUWSCでだけは管理者権限がいるんじゃなかったっけ。
> 2012/07/27 ? アプリが管理者権限で実行されている場合には、UWSCも管理者権限が必要です:
ああ、そういうことか。
bad eggs online で勝つためにデスクトップ定規と分度器を使ってみたんだけどなかなか大変。
特に微調整が難しかったのでキーでマウスを移動するスクリプトを書いてみた。というのが
>>822 カーソルキーで移動するようなソフトはあったと思うが、あいにくカーソルキーは砲台設定で使われてるので、テンキーを使ったものを作ってみた。
で、微調整は確かに簡単になったんだが、・・・
UWSCでコントロールできるなら自動で計算して目標位置に落としてくれればいいんじゃないかと思い立ったところ、
Flashのサンプルコードを見っけた。
ttp://hakuhin.jp/as.html ルートってあったかなと思ったけどSQRTって関数名なんだな。
>>827 >>828 マウスや他アプリ制御ですか。。。
ずっとUWSC使ってたんですけど、言語仕様的になんかコードの再利用がしづらいなと思ってて。
PHPやJavaScriptの可変関数とかCの関数ポインタとかオブジェクト指向言語の
ポリモーみたいな実行時の再利用です。
とにかくありがとうございました。
830 :
名無しさん@お腹いっぱい。 :2013/03/31(日) 23:48:30.34 ID:cgs78iIo0
sleepで秒数をランダムに指定できますか? 20〜60秒の間で、毎回待たせる時間を変えたいのですが。。
sleep(random(40) + 20)
832 :
830 :2013/04/01(月) 00:11:46.55 ID:TJrBsBaK0
2013/04/01 UWSC Ver4.8e、 Pro版と Free版をリリースしました
IE = GETACTIVEOLEOBJ("InternetExplorer.Application") IE.Navigate(url) BusyWait(IE) IE.Navigate(url2) BusyWait(IE) GETOLEITEM(IE.document.getElementsByTagName("div")) print ALL_OLE_ITEM[0].innerText //IE処理待ち Procedure BusyWait(IE) REPEAT SLEEP(1) UNTIL !IE.busy AND IE.readystate = 4 Fend 上記のコードを動かすと まれにALL_OLE_ITEM[0].innerTextが空だったりurlのほうの文字を持ってきたりします 完全に表示を完了していることを知る方法はありませんか?
835 :
名無しさん@お腹いっぱい。 :2013/04/01(月) 03:40:55.75 ID:zpym0Xtb0
対象Webページで 表示が完了した時点で動作する動的なスクリプトを使ってレイアウトしてるんじゃないかな。 それか自動的に他のページに飛んでるとか。 BusyWait()の後にSleep()を入れないとそういうことが起こりやすい。 Sleep(1) を入れても絶対確実とはいえないけど。
mmvのウエイトを廃止したって事は、そのままでは動かなくなるスクリプトも出てくるんじゃないのか? 特にゲームとかw
>>836 確かにタイミングが重要なやつだと影響出るな。
ウェイトを指定してれば問題ないようだけど、
俺とか常に省略してたから・・
てっきり、デフォルトでのウェイトはゼロだと思ってたよママン。
画像認識後のクリックラグを出来るだけ短くするならグラボ差し替えるのが一番効果的ですかね?
839 :
名無しさん@お腹いっぱい。 :2013/04/01(月) 16:47:43.83 ID:T9Mvv3ej0
windows8で画像認証がうまくいかないのですが、誰か動作報告お願いします
8も7もAero切らないとCHKIMGまともに動かないよ
>>833 上げてみたけれどバージョン戻した
正規表現使うのに RegExp オブジェクト使う共通関数の
IgnoreCase のプロパティ(Boole)に値を与えていた部分が動作しなくなった
COMオブジェクトのBooleの設定が・・・って変更箇所があったからその影響だな
以前のバージョンでは問題なかったんで修正版が来るまで放置決定
バージョンが5.x 台になったら乗り換えるは
>>841 MultiLine や Global もだね
プロパティにfalseをセットするのは大丈夫だが、trueだとエラー
なんじゃこりゃw
え、エイプリルフールだから(震え声)
>>840 8にaeroなんてありましたっけ?そこら辺調べてみてもわからないので切り方教えてください
>>845 UWSCのプロパティの互換性タブで
「デスクトップコンポジションを無効にする」にチェックを入れればおk
これが Aero プレビューを実現してるやつ。
847 :
名無しさん@お腹いっぱい。 :2013/04/01(月) 21:29:33.32 ID:zpym0Xtb0
テンキーでドット単位でマウスを動かすようにしたけど 範囲が 240x240 くらいあって時間かかりすぎるから 5ドットまとめて動かすようにしてみたらなんか余分に動いてしまう。 1ドットずつのループにしても同じ。 ゲーム側の問題かもしれんが、ずれちゃったら意味がない・・・ ちなみに、マウス自体はちゃんと正確に動いてる。 問題はコントロール対象。 画面キャプチャとかせず、コントロール対象が期待通りに動いてくれることを前提にしてるから これが狂うとどうにもならん。 どうしたら100発100中になるんだ・・・
848 :
名無しさん@お腹いっぱい。 :2013/04/01(月) 21:59:58.72 ID:5GeQ7j940
>>847 ウィンドウ座標を始めにとってそこを基準にきちんとした位置へ移動してるかを確認
>>841 UWSCのバージョンが stable かどうか番号で判りますか?
>>847 マウスポインタの位置をいきなり5ドット飛ばしてるんなら微waitて1ドット移動×5回にしてみたら
851 :
名無しさん@お腹いっぱい。 :2013/04/01(月) 22:54:45.27 ID:zpym0Xtb0
>>848 デスクトップ定規でマウスの相対座標チェックしてるから問題ない。
照準の設定はペイントに画像を貼り付けてマウスで移動するのと同じ感覚でできるので
マウスが画面内にありさえすればいいんです。
ペイントで、マウスは10ドット動かしてるのに画像が12ドット動くなんてありえないでしょ。
だけどゲームの方はあるんですよ。
Flashゲームだからかな?
>>850 Sleep はもちろん入れてます
// 移動
btn(LEFT, DOWN); sleep(0.1)
//mmv( G_MOUSE_X + dx, G_MOUSE_Y + dy, 100 ); sleep(0.5)
ifb dy
sy = G_MOUSE_Y
for i = 0 to dy step dy/abs(dy)
mmv( G_MOUSE_X, sy + i, 0 ); sleep(0.05)
next
endif
ifb dx
sx = G_MOUSE_X
for i = 0 to dx step dx/abs(dx)
mmv( sx + i, G_MOUSE_Y, 0 ); sleep(0.05)
next
endif
btn(LEFT, UP); sleep(0.1)
x = x + dx
y = y + dy
endif
break
wend
ds = 5 * scalar
if ds = 0 then ds = 1
fukidasi("d:" + ds + " x:" + x + " y:" + y + " ")
操作対象が グリッドにスナップする機能があれば 別に不思議じゃないかもよ
e1になったよ
855 :
名無しさん@お腹いっぱい。 :2013/04/02(火) 11:05:46.64 ID:xcFIqH5y0
>>810-814 UWSC.exe を .uws に関連付けて、.uws を直接開いた場合は .uws の存在するディレクトリがカレントディレクトリになる。
UWSC.exe を起動して .uws を開いてから実行すると、たぶん UWSC.exe の場所がカレントディレクトリになるんだろう。
UWSCのダイアログはマルチスレッド化するとスクリプトで操縦できると思ってたけど、
今やってみたら出来なかったわー。
特定の項目を表示しておくだけだから別ファイルから呼び出すわ。
Flashに問題があって手動操作でもずれるのならなすすべはないな
>>839 windows8+ie10の組み合わせでCHKING使えてるよ(エアロも特に切ってない状態で)
7+ie10と8+ie10でMOUSEORGの挙動が違って、認識しなくなるので困ってるorz
858 :
名無しさん@お腹いっぱい。 :2013/04/02(火) 17:55:28.71 ID:WtCdP4/x0
IEでWebフォームを自動入力させたいのですが、 ドロップダウンメニューでリストから選択するところが出来ません。 IESetDataがうまくいかないです。
859 :
858 :2013/04/02(火) 18:12:07.20 ID:wdxSHZlP0
これがソースです。 「男性」を選ばせるにはどうすればよいでしょうか。 <div class="form-element" id="gender-form-element"> <label id="gender-label"> <strong id="GenderLabel">性別</strong> <div id="GenderHolder" > <select id="Gender" name="Gender"> <option value="">選択してください</option> <option value="FEMALE" > 女性</option> <option value="MALE" > 男性</option> </select> </div> </label> <span role="alert" class="errormsg" id="errormsg_0_Gender"> </span> </div>
iesetdataで出来るから色々試せ
RecIE使えば解るんじゃね
862 :
名無しさん@お腹いっぱい。 :2013/04/02(火) 19:16:12.81 ID:xcFIqH5y0
> 「男性」を喜ばせるには に見えた
ウホッ
864 :
858 :2013/04/02(火) 21:33:28.43 ID:wdxSHZlP0
>>860 ううん、色々と試してはいるんですけど…。
>>861 RecIEやってみましたが、なぜかその部分が何度やっても記録されないみたいです。
じゃあ何を試してできなかったのか書けよ
866 :
858 :2013/04/03(水) 01:20:07.15 ID:In2EnGws0
>>865 IESETDATA(IE,"男性","Gender")
CLKITEM(IE,"男性")
等です。
どれも全く反応してくれません。
>>866 IESETDATA
もしくはタグ名を記述: "TAG=タグ名"
Value: ラジオボタン等で Nameが共通の場合に Valueを指定する
868 :
858 :2013/04/03(水) 02:55:41.11 ID:In2EnGws0
>>867 すみません、そこんところがよくわかってないのかも知れません。
記述の仕方をどう間違えているのでしょうか???
>>868 ああ、ごめん。
ラジオボタンじゃないから関係ないかな。
”男性”は表記だから値じゃない
値は”MALE”
870 :
858 :2013/04/03(水) 04:32:35.47 ID:In2EnGws0
>>869 IESETDATA(IE,"MALE","Gender")
CLKITEM(IE,"MALE")
どっちもダメでした。
>>870 CLKITEMのときは表示文字だから”男性”
<div> が気になってた。
<form> なら問題ないけど、<div> では処理できなかったような。
そのソースはUWSCで取得しました?
UWSCでソースを取得してそれなら出来るんじゃないかと思いますけど、
UWSCで取得できないなら動かない。
これラジオボタンの場合だけど、やってみて
IESETDATA(IE, true, "TAG=Gender", "MALE" )
だめなら IE.ALL.Gender.Value = "MALE"
それでもだめならそのコントロールをアクティブにしてスペースキーで選択。
IESETDATAなんかより IE.document.all("Gender").value="MALE" とか IE.document.all("Gender").selectedIndex=2 ってやったほうが簡単だよん
873 :
858 :2013/04/03(水) 13:14:29.26 ID:In2EnGws0
>>871 IESETDATA(IE,true,"TAG=Gender","MALE")
IE.ALL.Gender.Value="MALE"
どちらもダメでした。
ソースはUWSCでなくIEで取得しました。
コントロールをアクティブにするには、タブ連打するしかないですか?
874 :
858 :2013/04/03(水) 13:16:43.59 ID:In2EnGws0
>>872 IE.document.all("Gender").value="MALE"
IE.document.all("Gender").selectedIndex=2
どちらもダメでした。
このドロップダウンメニューよりも上にあるテキストボックスには、
SENDSTRでちゃんと文字を送信できているんですが。
× IE.ALL.Gender.Value="MALE" ○ IE.document.all.Gender.Value="MALE" だったわ。 まあだめなんだね。 まあ、自分で使うんならあきらめてTABで移動してスペースだね。 そこは割り切っていかないと。 それより、Bad Eggs のツールは暫定版が完成して当たりまくり。 ただ、計算が高さ固定でやってるから使うときにいろいろ気を使う。 あと、テンキーは普段使ってるんだけど ついテンキーをクリックしてしまってマウスが動いてしまう。 一応、機能のOn/OffをCtrl+F7とかでやってるんだけどめんどくさくて使わない。 操作もめんどいから人にあげるのは無理かな。
そうゆう書き方だとGenderの名前を持つエレメントが複数ある場合にエラーになる 最初(0番目)なら IE.document.getElementsByName("Gender").item(0).value = "MALE" たぶん、表示/入力用のフォームと、不可視の送信用フォームを持ったウェブページだろうね 入力されたデータを、JavaScriptでチェック&加工してから、送信用フォームへ入れて送信するタイプ
877 :
名無しさん@お腹いっぱい。 :2013/04/04(木) 06:27:19.11 ID:vf/nLfFw0
13年4月4日、午前4時44分44秒 に書き込むチャンスだったのに逃した。
ならこの場合はむしろ IE.document.getElementById("Gender").value="MALE" でおk
それだとIDが重複してた場合に困るでしょ
サイトのアドレス貼ってもらえば直ぐに解決の予感
IDは仕様で重複して使わないようにされてる 使われてたらそのHTTPのソースがおかしい
HTTPじゃなくてHTMLだな
てかIESETDATAを使うにしても上のCOM操作の方法にしても CREATEOLEOBJ か GETACTIVEOLEOBJ の戻り値をちゃんと使ってるかな? SENDSTRのIDとCOMオブジェクトのIEをごっちゃにしてないよね?
1つのレスにまとめられなかったのか
885 :
858 :2013/04/04(木) 22:52:25.22 ID:8O/CbCiB0
スクリプトの知識が全く無いですしそんなに手の込んだことをやるわけではないので マウス操作を記録して使おうと思ったのですが、なんど記録してもうまく記録出来ません Chromeのウィンドウを10個並べて置いてそれぞれ一回ずつ特定の場所をクリックする、 の単純作業なのですが再生するとウィンドウの並びが変わったりして結果的に記録した時のマウス操作と別物になります 知識が無いなりにも少しだけ調べたのですが、複数のウィンドウを並べてるからアクティブウィンドウが云々みたいな感じで 正確に記録されないのかなと思いました ウィンドウがどうとかそんな余計なことはしなくていいので僕のマウスの移動とクリックを忠実にトレースするように記録することはできないのでしょうか 余分な時間、マウス移動は記録しない、を試しましたがダメでした
>>886 ブラウザの操作を記録できるのは
シェアウェア版で
しかもIEだけ
IE以外もスクリプトを組めばそれなりに動作するけれど お手軽記録は不可能
>>886 [設定]→[記録方法]→[低レベル記録]→[マウス座標を相対座標で記録する] を OFF で記録してファイルに保存
そのファイルをメモ帳などで開いて ACW の行を全て除去する
最近 IE.document.forms[0].elements[0].value = を覚えた者です 現在IE上での操作を勉強中です 任意の入力ボックスに文字を入力するには フォームとエレメントを指定する必要がある と色々なサイトを調べてここまでは理解できたのですが どこのサイトも分かりやすい構造のサイトを例にしていて 「例えばこの入力ボックスはforms[0].elements[6]です」 というように、初めからエレメントが分かっている例しか示してありません 実際にはelements[6]なんて初めから分かりませんし 一体自分が操作したいエレメントは何番目のエレメントなのか それはどうやって調べることができるのか この問題がどうやっても解決できません どうか力を貸してください お願いします
/⌒ヽ⌒ヽ, / ⌒\ / ⌒ヽ, ( ヽ, /⌒\ ,,- ‐ー ‐ - ,,,,. ゝ / ヽ〆`" ミ ( / / ',. \ ヽ 最近IE.document.forms[0].elements[0].value =を覚えた者です / ./ ;. ,,;,, ヽ ) ,,-‐‐-┴--‐、 / ', ,,.'''" `ヽ 彡 / 、゙ヽ、 ‐‐-'' i ' , ,,,,, ,r''( ・)ヽ 彡 /´ .., ヽ,,._) ミ 〃 ゙゙゙゙'' ′. `"´丿 ヾ. / ヽ,r' ',. ( ,r'(・)~,.' `'''''" .i l ヽ」. ', 彡 `"´ ノ ; ヽ. ,' i i −'´ll ', 〆、ミ ー- ''" ( ,、_ ,.ツ ヽ ,' i ト──┤ '{ ⌒ ,' U ,,___,. ,' } i !. \ i、. \ ' ,,.‐''"ニ i´ ,' ノ |. i i \ ヽ ,,,,.ノ ! ./ | ヘ \,,,ノi \ ', i / i ゝ、_ ∧ 、 ‐ - t ,,λ . ヽ ``ー、,___/ .| \ ` ‐---ー"/./ \-─- ,, \ ヽ/ | \ / /\ / `,, ヽ / | \ / / \
>>890 件数調べてループして innerHTML とか innerTEXT とかが探してるやつと一致するか比較して探す。
var length = aNode.childNodes.length;
for( var i = 0; i < length; i++ ) {
window.alert(aNode.childNodes[i].nodeValue
+ "\n" + aNode.childNodes[i].nodeName);
getElementsinfo( aNode.childNodes[i] );
}
}
return 0;
}
プリントタスクが出た段階で処理を行いたいのですが、 負荷無く常時監視的なものは可能でしょうか?
>>885 selectじゃなくてdivじゃねーかよクソが
>>894 え?
> <select id="Gender" name="Gender">
間違ってなくね?
>>893 コンパイラ言語を使う。
ほんとのコンパイラじゃなくても、Just In Timeコンパイラを使う環境ならおk。
VBScript, JScript の他、
UWSCから呼び出せる POWERSHELL も Just In Time コンパイラが使える・・・はず。
コンパイルされたスクリプトでずっとループしてれば負荷は軽いはず。
もちろん、Sleep()は適度に必要。
PowerShellでウィンドウハンドルとウィンドウタイトルを取得
ttp://blog.feelthink.net/?p=1045 $psArray = [System.Diagnostics.Process]::GetProcesses()
foreach ($ps in $psArray){
[String]$ps.Handles + " : " + $ps.MainWindowTitle
}
Googleアカウントの作成を自動化して何するつもりなんだ 858はスパム業者の疑いがあるな
897 :
893 :2013/04/06(土) 18:21:19.32 ID:/TqP9E210
>>895 ありがとうございます。調べて使ってみようと思います。
ソースではそうなってるけど実際にはdivで動いてるぞそれ ブラウザでF12押しながら見てみな
コマンドプロンプトを介す方法になると思うんですけど 今インターネットの接続が オンラインかオフラインか分かる方法ありますか?
>>899 InternetGetConnectedState
901 :
名無しさん@お腹いっぱい。 :2013/04/08(月) 23:58:23.22 ID:7N5DLD3d0
ありがとうございます!
902 :
名無しさん@お腹いっぱい。 :2013/04/09(火) 00:04:41.44 ID:TlPKnOmD0
ありがとうございます!
903 :
メモ :2013/04/09(火) 09:58:21.36 ID:50tQZAOb0
XSLT XMLでGUI設計
WSH + SFC mini + Win32API で Windowsネイティブな GUI も使用可能
(ブラウザベースなら UWSC+COM の IEオブジェクトで可能)
機能 PowerShell ≧ WSH + SFC mini
コード量 PowerShell < VBScript < JScript
環境 拡張子 実行エンジン クラスライブラリ
WSH .vbs, .js cscript.exe, wscript.exe COM
PowerShell .ps1 powershell.exe のみ COM と .NET Framework
拡張子 言語
.vbs VBScript
.js JScript
.wfs 上記の両方をXMLで記述
.ps1 PowerShell
UWSC + PowerShell で カスタムGUI #なんだUWSCの説明にあるじゃん
ttp://www.uwsc.info/sample.html#n52 UWSCのみで CreateWindow (DEF_DLL → CreateThread
ttp://d.hatena.ne.jp/junjun777/20120706/uwsc_createwindow Delphi で RESTサーバー
RAD ツールで簡単GUI
ttp://thinkit.co.jp/story/2011/06/02/2144?page=0,2 RESTはシンプルなSOAP = Windowsの 「COM+」
COM+はNTから標準搭載
SOAP はWindows XP から標準対応
PowerShell はWindows 7 (2009/10/22 発売) から標準搭載
>>857 自己レス
>7+ie10と8+ie10でMOUSEORGの挙動が違って、認識しなくなるので困ってるorz
ツールバーの有無でIDが正確に取れていなかったのが原因でした・・・
?ID = HNDTOID(GETCTLHND(IE.HWnd,"Internet Explorer_Server"))
↓
◯ID = HNDTOID(GETCTLHND(IE.HWnd,"Internet Explorer_Server",ツールバーの数))
お騒がせしました
UWSCにGUI設定機能付く予定はありますか RocketMouseぐらい分かりやすかったらなお良いのに
ぐぐってみたけどエディタ一体型ってことか?
>>905 じゃあロケットマウス使えばいいんじゃね?
サクラエディタで .uws の色分け設定手順 のメモ 1.設定 - 共通設定 1.「強調キーワード」 タブ ・「セット追加」 ボタン セット名入力 ・「インポート」 キーワードファイルを指定 ・コメントスタイル 行型に 「//」 2.設定 - タイプ別設定一覧 1.「設定17」などを選んで「設定変更」ボタン 2.「スクリーン」タブで以下を設定 ・設定の名前 uwsc ・ファイル拡張子 uws 3.「カラー」タブで以下を設定 ・強調キーワード1 uwsc 4.「支援」タブで以下を設定 ・外部HTMLヘルプの設定 uwsc.chm キーワードファイル作成手順 1.UWSCのヘルプの検索タブで適当に検索して予約語を開く 2.予約語の全部をエディタにコピペ 3.VK_NUMPAD0 〜 9 などについて個数分コピペ。1〜9 を縦に書いたやつをAlt+マウスで矩形コピペすると早い。 4.定義済み仮想キー について、「正規表現」にチェックを入れて「 \s.* 」を検索して削除。DLL必要。 5.「// 」(全角スペース)を「// 」(半角スペース)に置換。行削除でもいい。 6.改行のみの行を一行選択し、Ctrl+C。次に置換で全角スペースを対象に「クリップボードから貼り付ける」にチェック入れて「すべて置換」 7.CLK_*(CLKITEM関数) とかを関数の説明文からコピペ。矩形で切り取ると早い。 8.配列の「[]」を削除 9.見出しをコメントにするか削除して .kwd とかで保存し、設定画面でインポートして使う。 環境変わってからめんどくさくてやってなかった。 キーワードファイルがなぜかダウンロードできなかったり別のエディタっぽいものしかないし、 スクリプト使いならファイルより手順の方が早いし。
6でクソわろた \r\n キーワードファイル頂戴(^q^)
制御文、定数、特殊変数、関数でファイル分け、色分けしてる。 (青、水色、紫、オレンジで)
Visual Studio のオートコンプリートで楽して入力してるよ(という妄想)
オートコンプリートは秀丸の単語補完でできるだろ
サクラエディタにも入力補完機能ある
ドットを打つとプロパティやメソッドが出て来て便利です〜
ドットを打つとプロパティやメソッドがどっと出て来(ry
【審議中】
>>917 ∧,,∧ ∧,,∧
∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U ( ´・) (・` ) と ノ
u-u (l ) ( ノu-u
`u-u'. `u-u'
関数名の後に左括弧を書くと、引数の説明がポップアップ表示されて便利です〜(パラメーター ヒント) 自作関数でも書式通りにコードコメントを書いておくと引数の説明がポップアップするよ!
プログラムのプの字も分からなかったけど、目的のスクリプトがなんとか書けてちゃんと動いてくれた! 嬉し過ぎて小便漏れそう
補完されないなあと思ったら手動だった
・Ctrl+Space 補完候補表示
・キーワードの後ろに /// でコメントを書くと説明文表示
だから
>>909 で // を削ってるけど、むしろ /// に置換すべきだった
・コメントは ; なので、コメントを残すなら // を \r\n; に置換。
ついでに
・F1 キーワードヘルプ
ショートカットキー見たら便利な機能があるね。
Ctrl+\ このファイルのパス名をコピー
Alt+; (:) 日付 (時刻) を挿入。エクセルもこれのCtrlだったっけ。
Shift+Ctrl+L キーマクロの実行 ×
Shift+Ctrl+M キーマクロの記録開始/終了
Ctrl+[ 対括弧の検索
F12 (+Shift) タグジャンプ (戻り)
F2 (+Shift) 次の (前の) ブックマーク
F2+Ctrl ブックマークの登録・解除
>>921 VSやEclipseとは比べようもないけど、
サクラエディタは無料でこれだけ出来て神レベルだね。
キーワードファイルがネットに公開されてるのもサクラエディタだし、
事実上のUWSC開発環境はサクラエディタだわな。
普通のテキストエディタで充分
1.UWSCのヘルプの検索タブで適当に検索して予約語を開く 2.予約語の全部をエディタにコピペ 3.VK_NUMPAD0 〜 9 などについて個数分コピペ。1〜9 を縦に書いたやつをAlt+マウスで矩形コピペすると早い。 正規表現にチェックを入れて「^//_」を「;_」に置換 4.定義済み仮想キー について、「正規表現」にチェックを入れて「 \s.* 」を検索して削除。DLL必要。 「正規表現」にチェックを入れて「[^;]_」を「\r\n」に置換 「正規表現」にチェックを入れて「\(_」を「\r\n;_」に置換 5.「//_」(全角スペース)を「//_」(半角スペース)に置換。行削除でもいい。 6.改行のみの行を一行選択し、Ctrl+C。次に置換で全角スペースを対象に「クリップボードから貼り付ける」にチェック入れて「すべて置換」 7.CLK_*(CLKITEM関数) とかを関数の説明文からコピペ。矩形で切り取ると早い。 8.配列の「[]」を削除 9.見出しをコメントにするか削除して .kwd とかで保存し、設定画面でインポートして使う。
サクラのステマがひどくてインスコしそう
emacsで十分。
サクラは秀丸が業務都合で入れられない環境の人には助かるんだろうな 割れてるからどんだけの人間が正規ライセンスで使ってるのかは不明だけど 値上げ前に買ったライセンス持ってるのでメーラーも鶴亀使ってるけど まあ標準的な機能についての操作感は殆ど同じだし、いいんじゃない?
全角スペース入れようとしてタブ+スペース入れたら書き込まれた
コメントを削除してたのを残すようにしてみた
と思ったら /// ってキーワードヘルプ(.khp)だった。
強調キーワード(.kwd)の書式と勘違いした・・・
>>924 の「[^;]_」は間違い
「;」以外の1文字を削ってしまった。
やっぱりなれないことするときは
置換前に検索で色分け状態見るとか
数件検索+1件ずつ置換で様子見てからしないとな。
ピリオドでプロパティを出すみたいなのはこれじゃできないよな。
929 :
名無しさん@お腹いっぱい。 :2013/04/14(日) 14:43:24.76 ID:TfqwkZkW0
グーグル日本語入力使えば予測変換だけで書けるようにもなるで
でもやっぱり秀丸最強
>>930 ありがとう
引数ウル覚えの関数書く時にHELP起動する手間がだいぶ省けるね
これ自作関数についても作れないこともない訳だなぁ
>>903 >>905 ちょっと常駐画面が必要になったんだけど
ネイティブのRADツールよりもDOMアクセスしたほうが簡単じゃないかなと、
やっぱりHTMLで画面作ったほうがいいかなと思ったんだけど
できるだけUWSCと一体でやりたいので
PowerShell でも使える WPF っていいかもと。
> Windows Presentation Foundation (WPF) はマイクロソフトが開発した、
> .NET Framework 3.0以降に含まれるユーザインタフェースサブシステムである。
.net を使ってる人もいるみたいだけど1GB以上あるし重い。
.net っぽい機能を持ってるフリーのツールをちょっと入れてみたけどなかなかよいので
Microsoft Expression Web 4 114MB XAML を GUI で作れるツール。このバージョンから無料化。
PowerGUI 13MB PowerShell エディタ
Expression Design はベクターでお絵かきだからUWSCとは無縁かな。
Microsoft Expressionが終了へ、「Expression Web」「Expression Design」は無償化
「Expression Blend」は「Visual Studio」へ統合
ttp://www.forest.impress.co.jp/docs/news/20121221_579871.html
HTML が ネイティブの RAD ツールと違うのは
自由な配置をするときに DIV レイヤー をまず設置しないといけないところ。
しかもなんか中に設置したフォームがこれにフィットしない・・・(横幅は100%でフィットするけど)
以前、スケジュール登録したいという人がいたけど、PowerShell 3.0 にその機能がある・・
ttp://winscript.jp/powershell/237 メモ:
リリース時期 PSバージョン 対応 .net バージョン
2006年11月 PowerShell 1.0 = .NET Framework 2.0
2009年10月 PowerShell 2.0 = .Net Framework 2.0 Windows 7 で標準搭載
2012年 9月 PowerShell 3.0 = .Net Framework 4.0 Windows 8 で標準搭載
ttp://toro.2ch.net/test/read.cgi/tech/1359863558/850-851
チラ裏にでも書いてろよ
ok. そうする
PowerShell + WPF で作った GUI 画面からどうやってUWSCにイベント通知するか。
ウィンドウメッセージなら
>>903 の UWSC で ウィンドウプロシージャを作って受け取る方法もあることはあるけど
・・・
XML を PowerSell で呼び出したら .net のコントロールになるのかな?
Microsoft Expression Web 4 で作れたのは XML だから当然 IE で開くものだと思って調べてみた。
UWSC の OleEvent で StatusTextChange を登録して ステータスバー経由でイベントを渡せばいいんじゃないかと。
そういえば以前それをやるって人がいたような。
OnClick とか OnChange とかでステータスバーに情報を送ってイベント実行。
これで Web デザインの GUI からマウス制御を呼び出せる。
.net のウィンドウだったなら・・・
キーイベント発行するかな。
ループは好きじゃないんで。
IEやfirefoxを介さずに サイトのソースを取得する方法ってありますか? APIかコマンドプロンプトを使うことになりそうな感じがしますが
>>938 ありますん
MSXML2.XMLHTTP で GET を Send して
ADODB.Stream で SaveToFile する感じで
>>939 事実上IE(の通信機能)を使ってるような
統合だから気にしない
あ、すいません ブラウザをわざわざ開いて、ソース表示させてコピペするとかじゃなくて APIでスマートに取れるならIEでも大丈夫ですっ。というわけで ありがとうございます
それならieのvisible=falseでよかったんじゃ・・・
あんま他ソフト通すと 同期ミスが多くなるからな 気持ちは分かる
IE6まではあれだから嫌われるけど7以降は普通のOS標準ブラウザだと思う
UWSC.INIに直接書いてるんですが 変更を設定でいじるまで受け付けてくれません iniを読み込んでくれる方法とかないですか?
>>947 エスパー回答するけど
POFF(P_UWSC_REEXEC)
でUWSC再起動するのが早いと思うよ
あるよ
READINIしてないだけじゃないの?
再起動だけじゃ無理じゃ無いっけ?
UWSC Pro版のGUIってHTML+IEですよね。 あれちょっとあんまりうれしくないと思ってたんだけど・・・ UWSC と他スクリプトとのデータ連携とか通信とか考えていると やっぱりデータを共有できるCOMが一番使いまわせるだろうなと思った。 イベントもあるし。 で、データ共有のための(軽量な)COMって・・・どこにあるのか分からん。 できればイベントも使いたい。というか使えないと効率悪い。 仮にあったとしても、見れないとデバッグしにくい。 そしたら、IEですべて解決。 だった。 テキストボックスへの入力とかはブラウザ上のスクリプトは実行できるけど イベントは発生しないのでステータスバーとか使うしかないけどできる。 表示したくないデータも非表示のコントロールでいける。 ---- HTAはIEみたいなもんだけどCOMサーバーがないっぽい。 けど、スクリプトでキーイベント発生できるからUWSCを呼ぶことはできる。 COMオブジェクトのステータスバーを配置することもできる。 Powershell+WPF(.net)っていいけど、COMサーバーじゃないよね。あるのかな? これも自分で配置すれば使えるんだろうけど。
>>953 DLLでもCOMでもいいんだけど、
とにかく複数のコントロールを使ったウィンドウが扱えることと、
今欲しかったのはそのウィンドウを表示したままでそのウィンドウからUWSCのスクリプトを制御できる機能ね。
で、CreateWindowはめんどくさいのでWin32APIでもPowershellでも敬遠したいところ。
そのサンプルでもまあいいんだけど
>>933 でXAMLを作れると書いたけど間違いだった。
あれはXHTMLなのでブラウザでしか使えなかった。
XAMLをGUIで作れるのは Expression Blend。VS2012を入れた上で追加で入れる。
古いバージョンなら単独で入れられるけどインストーラーで350MBあった。
こんな大きいのは入れたくないのでXAMLは手書きするかあきらめる。
XHTMLだろうがHTMLだろうが、それを解釈するパーサがあれば簡単に処理できそうだけど・・・
IEとかで読み込めばいいんだよね。
位置を扱えないと使いにくいけど。
スクロールがだるかったけど iniっての触ればよかっただけか 俺も聞きたいんだが結局どうやるの?
>>956 試してるとこ
最初エラー → COM登録
やっぱりエラー → 64ビットでの登録がない
%SystemRoot%\SysWow64\cscript.exe で vbs を実行でいけた。
それをUWSCに移植・・・できない。
イベントをどうやるのかと思って me の代わりに THIS を入れてみたけどやっぱり駄目。
OLEEVENT するも・・・インタフェース名がわからない。オワタ
バイナリのぞいて試したら _IOverlappedWindowEvents だった
その先の DoModal() で引っかかった。
Open() でも駄目だった。
Unknown型からDispatch型へのバリアント変換はできませんって言われる。オワタ
動けば .net より軽くていいかと思ったけど駄目だな。
でも、WSH使うときは利用させてもらうよ。
PowerShellも単独で動かそうとしたらセキュリティかかってて・・・
解除するコマンド動かしたけど変化なかった。
管理者として実行してないからか。
セキュリティがめんどくさいからPowerShellは別スクリプトから呼ぶのがいいかも。
UWSC COM版をPro版に入れてくれれば、全て解決するんだけどなw
seraphyscripttools ってやつでも結局 PowerShell みたいに実行時に作っていく形。 素のW2kやXPでも使えるけど、 それだったら .net 3.5 をXPに入れたほうが早いかな。 W2kは僕も持ってるけど使ってないし。 OS 付属.net 使用可能バージョン W2k なし 1.0 〜 2.0 XP 1.0(MCE) 1.0 〜 4.0 Vista 3.0 1.1 〜 4.5 W 7 3.5 2.0 〜 4.5 W 8 3.5, 4.5 2.0 〜 4.5 WPF なら XAML のデザインツールも使える。 ちょっと大きいので使いたくないけど、表記もXHTMLよりはシンプルなので 軽量なツールでデザインを確認しながら記述する方法もある。 PowerShell 3.0 を使うとW8との互換性が取れなくなるけどそんなに使い込まないだろう。 .net 4.0〜4.5 PowerShell 3.0 DLR PSObject は真のダイナミックオブジェクト .net 2.0〜3.5 PowerShell 2.0 CLR PSObject は ETS(Extended Type System 拡張型システム)の メンバ
>>958 vbscriptとかをCOMで呼び出せるみたいだけど
型とかイベントに互換性がないと単なるバッチ処理で終わる。
あと、UWSCはゲームでよく使われているけど
ゲームって結構タイミングがシビアだから
COMとかで呼び出してても期待通りには動かないんじゃないかな。
objUwsc.mouseMove(x, y, 300) などとやれればいい。 「ウィンドウ関数」と「ウィンドウ関数低レベル」以外は メジャーな言語がそれぞれ高レベルなライブラリを既にいくらでも持っていて UWSCで実装されても車輪の再発明しかも劣化版にしかならない感触がある。
seraphyscripttools は駄目だったけど SeraphyScriptDialog ならいけたよ。 イベント関数が使えないっぽいけど イベントがあったらそのコントロールの番号(作った順)が GETKEYSTATE関数と同じようにループで受け取れるからまあ普通に使えると思う。 seraphyscripttools の方がレイアウト自由だしイベント登録できるからいいんだけど SeraphyScriptDialog の方もとりあえず使うには簡単かな。 レイアウト自由でもどうやって記述しようかとか考えちゃうし。
963 :
名無しさん@お腹いっぱい。 :2013/04/22(月) 22:58:24.26 ID:KBdQTYo+0
初歩的なこと教えてください x=0 while x<1000 x=random(1001) print x wend xが1000以上になったら止まるプログラム(?)です 宝くじみたいに1回出た数字は出てこないようにして 1001のランダムの数字が限られてくるってしたいんですけど どうすればいいですか?
966 :
名無しさん@お腹いっぱい。 :2013/04/24(水) 00:12:58.74 ID:FcFHarq00
あれからいろいろ調べてたが SFC mini とかにたどり着いたものの 画面を作るのがスクリプト手書きじゃ難しい。 COMのシェル機能でexeを呼び出す方法ではマウスの制御は遅すぎるし マウス制御ができるからといってコンパイル言語じゃあコードがめんどくさいかな。 画面のレイアウトが大事ならやっぱり本格的なプログラミング環境かHTMLエディタしかない。 もちろんスライダーとかはHTMLじゃ使えないのでプログラミング環境しかないとなるので それが簡単に操作できるのはUWSCのような制御ソフトとなる。 ただ、 SFCmini にしても seraphy のダイヤログにしても、 イベントとスクリプトを簡単に結びつけるなら VBScript とかのメジャー言語か HSP や AHK のようにサポートツールの多いツールがいい。 かなり回り道をしたけど、とりあえず今作りたい奴はIEで制御することにする。
ひとりごとならブログにでも書いておけよ
ロボットマウスくんの使い方が説明読んでもわかりません。どなたか教えていただけないでしょうか? やりたい事はWebフォームの応募を連投したいのですが。
>>968 ひとりごとならブログにでも書いておけよ
972 :
名無しさん@お腹いっぱい。 :2013/04/24(水) 19:07:37.76 ID:FcFHarq00
>>971 他にいいツールとか比較とかまとめたところがあれば教えてくれる?
ここはuwscスレだボケ
UWSCの使い方としてDLLやCOMを使ったりPoweShellを使ったりする方法があるわけで。 比較検討するスレがあればいいけどないからここで。 どうせ埋めるだけのスレだし。
ID:FcFHarq00死ねカス
いや、続けていいよ。 GUIでデザインできて軽くて無料でUWSCからでさえ簡単に使えるフォーム探してくれよ。 俺有料版持ってるけど設定画面表示するためだけにIE表示するとか重すぎて嫌なんで。
MSComctlLib って基本のコントロールがないな・・・ リストビューを経由してデータをやり取りすることはできるけど HTML側で全部のコントロールにデータをコピーするコードを入れないと・・・ あ、me とか this を使えば共通コードでいけるか。 けど検証がめんどくさいな。 comctrl.dll のコントロールをラップするCOMオブジェクトがあれば HTMLエディタで自由に配置できるけど コントロールが増えると遅くなるだろうな・・・ しかも、HTMLのスクリプトからは使いにくくなる。 とりあえず探してみたけどちょっと見つからん。 MSComctlLib の一覧 ImageComboCtl 画像? ImageListCtrl 画像? ListViewCtrl リストのリッチな奴 ProgCtrl プログレスバー(メーター) SBarCtrl ステータスバー Slider スライダー(音量とかいじるやつ) TabStrip タブでグループ分けするやつ Toolbar ツールバー TreeCtrl ツリー(エクスプローラーのフォルダとか)
981 :
名無しさん@お腹いっぱい。 :2013/04/26(金) 14:20:58.54 ID:EFyc94Sr0
そうです!反応してくれる方がいらっしゃるとは!
>>3 ★4 ★5
作者が有料版で配ってる機能の代行依頼は不正利用に該当
あ、スレ間違えたw
(´;ω;`)残念です・・・仕様を試したかったのですが・・・
感謝あああああああああああああ!!
988 :
名無しさん@お腹いっぱい。 :2013/04/26(金) 20:40:48.93 ID:2BivjPBE0
>>976 もし、IE にアドオンいろいろ入れてて重くなってるんなら
起動オプションでアドオンなしにするといいかも。
-extoff : IE7 以降対応。IE を "アドオンなし" モードで起動する。
アドオンのトラブルシュートでよく使われる。
でも普通はUWSCからCOMを作るから起動オプションとか指定できないんだよね。
そういえばIEが起動/終了するとき、Jane とかがせわしく表示切替てるんだよね。
だけど .hta を開いてもそういう事象は起こらないから、.hta にすれば起動速度の問題は解決するかも。
でも hta はCOM鯖もないしネイティブコントロールでもないからUWSCからアクセスできない・・・
64ビット版のIEを起動してみたけど
COMサーバーとしては32ビットアプリからも利用できるんだね。
ただ、32ビットですでに起動しているとそっちをゲットしてしまう。
特定のHTMLを起動時に読み込んでウィンドウタイトルも指定していればいけるかな。
あんまり意味ないとは思う。
ちなみに、普通にIEを起動すると32ビット版が動いてる。
989 :
名無しさん@お腹いっぱい。 :2013/04/26(金) 23:17:18.34 ID:2BivjPBE0
64ビットIEを使う絡みだけど IEの起動引数でファイル名を指定すればスクリプト入りのHTMLを自動で開けるけど どうせならファイルを使わずにコマンドラインだけでいきたいと試したけどだめだな。 IEのアドレスバーで javascript をコピペするときも、”javascript:”は手打ちしないといけなくなってるし、 アドレスバーでは動くスクリプトも起動引数で渡しても動かない。 ダブルコーテーションを使わないと 「:」 の前をドライブ文字として省いてしまうっぽい。 ファイルを使うしかないな。 ファイル・・というか、HTMLを使うと何がいいかというと、タイトルバーの文字列を指定できるし、 クリップボード経由で起動完了したことが確認できること。
990 :
名無しさん@お腹いっぱい。 :
2013/04/26(金) 23:56:24.21 ID:2BivjPBE0 クリップボードを使う方法はだめやった ローカルファイルだとスクリプト入りHTMLはブロックされるからマウスクリックする必要がある。 WebサーバーにHTMLを置けば解決するけど 場合によっては数百ミリ秒かかるから 普通にスクリプトのないHTMLでウィンドウタイトル+ウィンドウクラスで監視ループしたほうがマシか。