[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 03/23 14:38 / Filesize : 253 KB / Number-of Response : 977
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

自動化ツールuwsc使いよ集まれ7



1 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/08/04(木) 02:00:04.65 ID:7bTLDD7v0]

Windowsを自動化させるツールUWSC。
www.uwsc.info/

uwsc使いのみなさま、マターリ己のスクリプトを晒しましょ。


335 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/23(水) 21:18:24.83 ID:wzzmYU4J0]
UWSCでtwitterに自動で呟けたりしますか?

336 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/23(水) 21:24:58.35 ID:d6sk/n4+0]
>>333
どういう意味? step -1 とかじゃダメなの?

337 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/23(水) 21:40:50.79 ID:4KoCrPGW0]
デフォルトが step 1 になってるだけだよね。
他にカウンタがインクリメントされるループなんかあったっけ?

338 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/23(水) 23:01:11.80 ID:+wgWgFMDP]
無いよそんなもん
ヘルプを読まない馬鹿がいるだけ

339 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/24(木) 00:41:18.47 ID:iwgJn0yc0]
>>333
既にこれは「ヘルプを読まない奴」として否定されているわけだが…

n = 100
for i = 0 to n
 x = n - i
 print x
next

別にデクリメントループが構文として用意されないと誤解してても
『(不恰好ながら)書ける』だろ…とか思うわけで

340 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/24(木) 13:01:18.76 ID:Xjdue0Ae0]
っていうかいつも while ばかり使ってると
for の存在なんて思い出しもしないw

n=100
while 0 < n
n=n-1
print n
wend

341 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/24(木) 15:02:19.21 ID:Rk+VpmeE0]
とある掲示板でPro4.2+尻ってファイル見つけたんだけど、このkeygenで4.7aまでならいけるかな

342 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/24(木) 19:23:17.57 ID:GPYvU7K20]
試した?

343 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/25(金) 06:22:00.11 ID:9/umpwPe0]
ウインドウを閉じるんでは無くブラウザまるごと終了する方法ありますか
プロセスから切るにもchromeだからいっぱい出ちゃう



344 名前:名無しさん@お腹いっぱい。 [2011/11/25(金) 13:00:12.48 ID:p+EqYULU0]
>>335
botでいいだろが


345 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/25(金) 16:40:11.51 ID:6JjYuI9o0]
>>343
窓タイトル = "Google - " //ウインドウのタイトル(の一部)を指定
def_dll PostMessageA(hwnd,int,int,int):user32.dll
PostMessageA(idtohnd(getid(窓タイトル)),$10)

346 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 05:12:01.88 ID:/CGzuT+y0]
>>345
ありがたや

347 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 11:28:49.79 ID:ZZDnddLi0]
ドラッグ&ドロップの方法を教えてください
『余分な時間、マウス〜』のチェックを外してAからGまでD&Dさせたら、点A,B,C,D,E,F,Gを移動して記録させる方法は知ってるんですが、
点AとGだけを残してB,C,D,E,Fを省略する事は出来ますか?(BCDEFも表示させると時間が掛かるため)
よろしくお願いします

348 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 11:32:33.96 ID:t/VZjk9M0]
チェック入れて記録したらいいだろ

349 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 15:35:56.57 ID:lNj7q3Yn0]
初歩的な質問ですみません。
UWSファイルを難読化もしくは中の構文を見られないようにするには
どうすればいいですか?ご教授お願いしますm(_ _)m

350 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 15:39:27.19 ID:CoKoKKvM0]
ヘルプは一度上から下まで全部読んどけよ…そんなに量あるわけじゃないし。

ヘルプ→スクリプト→その他

351 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 18:30:38.88 ID:lNj7q3Yn0]
スクランブルってどうやるんでしょうか。
コマンドプロテクトで/A と打っても認識不可能なバッチと出るだけで何も
起きないです

352 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 18:51:27.35 ID:jqFQ2BSr0]
まさかと思うが、パスに半角スペースがあるというオチじゃないよな…

353 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 18:59:44.19 ID:pCPDtoar0]
>>347
Btn(LEFT,CLICK, A_X, A_Y, 0)
Btn(LEFT,DOWN, A_X, A_Y, 50)
Btn(LEFT,UP, G_X, G_Y, 50)

単純にこれでできたが・・・



354 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 19:17:09.94 ID:lNj7q3Yn0]
コマンドプロテクトでuwsc47bをcdで指定して
ディレクトリ移動する所までは分かったんですが
指定されたパスが見つかりませんとでます
uwsc47bはProgram Filesにあって

cd C:\Program Files\uwsc47bと打っても
そのフォルダに移動しないんです。
何故ですか?

355 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 19:42:24.08 ID:NT6h79Cr0]
スクランブルかけたいモノをC:直下に置くとかで良いじゃない。

356 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 19:49:30.66 ID:CoKoKKvM0]
ここまでパスに関して無頓着だとスクリプトの実行にも問題が出てこないか?
ファイル触りたいとかいう時困るだろうに。

357 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 19:53:24.52 ID:CoKoKKvM0]
っていうかコマンドプロテクトって何さ

知らない単語が出たら適当に自分の知ってる単語に置き換えてみるんだろうか?
知ってる単語でも音だけ知ってて意味は分からない単語なんだろうけど。

意味わからない言葉を適当に使ってみるって行動が理解できないよ。

358 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 20:12:24.70 ID:lNj7q3Yn0]
無知ですみません
C:直下のProgram Filesをcdで指定してもやはり指定されたパスが見つかりません。
って出ます
cd C:\Program Files で合ってますか?
 コマンドプロテクトじゃなくてコマンドプロンプトですね。すみません

359 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 20:26:17.68 ID:rSlze9qY0]
それ自体はあってるよ。

それ以外の要因が説明不足でエスパーが必要なんだろうね。
判るものも判らん。

360 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 20:26:51.15 ID:CoKoKKvM0]
散々適当書いてた経緯からして、ここに書いてあるパスと
実際入力したパスが違う可能性が否定できない…

あと、ブートドライブがCじゃない可能性も…

361 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 20:27:07.92 ID:lNj7q3Yn0]
解決しました
どうやら C:\のc:の部分がいらなかったようです.
コマンヂプロンプトのサイトの構文にはc:が入っていたので分かりませんでした;

362 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 20:27:17.46 ID:rSlze9qY0]
どうしてもわからないなら、>355 の言うとおり
UWSC.exe と 対象スクリプトをC直下に置けば良いじゃない。

363 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 20:28:09.48 ID:lNj7q3Yn0]
なんか自分で見てても文章が稚拙ですね〜^^;
支離滅裂ですみません;



364 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 20:28:40.75 ID:CoKoKKvM0]
ずばり、Cドライブじゃなかったってオチか

365 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 20:32:59.42 ID:lNj7q3Yn0]


CD C:program files じゃムリでしたが
CD \Program files でいけました^^
まずDドライブっていうやつがないので;w;
でもDVD-RWっていうのがありましたがこれがDドライブなんでしょうか?

366 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 20:35:27.03 ID:B+rdzsPG0]
>>365
上のなんで\無くなってるん

367 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 20:38:39.97 ID:lNj7q3Yn0]
やったーーーーーーーー
出来ました^^
3時間も掛かっちゃったpwq
>>366さん
書き忘れましたすみません;
暗号化出来ました^^
でもORGファイルっていうのが出来たんですがこれは何ですか?

368 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 21:14:35.02 ID:DelMMb6d0]
^^;

369 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 21:24:57.65 ID:CiLErwXn0]
これ素でやってんの?

370 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 21:39:49.84 ID:CoKoKKvM0]
ここまで超弩級の初心者がスクリプトの内容を隠したがる理由って何?

またゲームマクロ関係の臭いがしてきた…

371 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 21:43:24.09 ID:65S6433R0]
だからこそだろw
ソース見られたら恥ずかしいじゃん

372 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 21:50:24.68 ID:rSlze9qY0]
自分を大きく見せるためだよ

373 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/28(月) 21:52:16.25 ID:ZZDnddLi0]
>>353
教えて頂いたとおりにやってみたのですが、1行目でファイルを開いてしまいます
2行目でドラッグをしてる筈なんですが、Gまでカーソルが移動してもファイルは移動しないのです
A-G間を一気に移動出来ると良いのですが



374 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/29(火) 00:22:34.51 ID:6f1ikZrG0]
>>373
具体的に何がやりたいんだ?
一応dropfileならコマンドあるような…

375 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/29(火) 13:54:39.76 ID:Wf2HEEvG0]
>>373
353の一行目で何してるかわかってる?

376 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/29(火) 13:56:36.68 ID:Wf2HEEvG0]
一行目のクリックと二行目の間にsleep置くか
一行目省くかで出来るだら

377 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/29(火) 17:13:28.90 ID:7tsIYmjQ0]
質問です。
グローバル・スコープに組込み関数と同じ名前で関数がユーザ定義できてしまいますが、
コードが大きくなってしまい、組込みなのかユーザ定義なのか明示したくなってきました。
コード内で組込みであることを明示する書き方はあるのでしょうか?

例えば、
function Random()   ←ユーザ定義されたランダム関数
  ・・・・・
fend

procedure Shuffle(var OBJ[], TIMES=100)
  len = Length(OBJ)
  for times = 1 to (len * TIMES)
    c1 = Random(len)      ←こちらは組込みのRandom()を使いたい
    c2 = Random(len)
    ifb !(c1 = c2) then
      this.Swap(OBJ[c1], OBJ[c2])
    endif
  next
fend

378 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/29(火) 17:41:41.51 ID:JvceVNuB0]
>>377
逆にユーザー定義の方をuser_RANDOMとかにして区別すれば?

379 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/29(火) 18:00:40.49 ID:7tsIYmjQ0]
ユーザ定義のRandomも複数箇所で使っているので、
組込であることを明示できた方が変更箇所が少なくて済むんです。
だからBuiltin.Random()などと記述できればなーと思ったんですが・・・ヘルプを見る限りできなさそうですねぇorz

380 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/29(火) 19:19:34.10 ID:hLtj59jYi]
>>379
そりゃ、求める方がおかしいからな
諦めて別名を使えよ

381 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/30(水) 00:00:55.66 ID:7tsIYmjQ0]
予約語&関数一覧にある関数名がユーザで使える方がおかしくない?

382 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/30(水) 00:24:34.22 ID:vxsaB//g0]
別におかしくないよ
関数をユーザーが上書きしたり改変したりといった具合にフックできる言語もある

383 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/30(水) 00:31:31.53 ID:Xo98chVK0]
>>381
使えない予約語もあった気がする 具体名忘れたけど
randomはjs、javaを考慮して制約を外してあるとかじゃないかな…?



384 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/30(水) 01:15:31.15 ID:v4l4hkwp0]
>>382
それは引数の型や個数で判別できる場合じゃないの?それで区別してくれれば問題ないんだけど、
UWSCは引数が違うといってエラーになるだけだからなぁ・・

385 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/30(水) 06:53:29.22 ID:08SXj0TB0]
自作関数をrandomという名前にしなければならない理由はないだろ
ちょっと変更すれば済む話。

俺は自作関数で上書きすることで、スクリプトに手を加えることなくデバッグ出力とかできたらいいなと試してみたけど、
いったん上書きしたらもう標準関数を呼び出せなくなるんだよね。
だから>>379が言うような方法があればいいなと探してみたことはあったけどあきらめた。

けど今ちょっと思いついたぞ。
Withを使う方法だ。

DEBUGというモジュールとRELEASEというモジュールを用意して切り替えることで、
スクリプト本文に手を加えることなくデバッグモードの切り替えができる。

With DEBUG
  .関数()

問題はWithがどの範囲で使えるかだけど、関数内で宣言が必要だろうな。関数ごとに・・・
変数が使えればいいけど無理だよな。
C言語のDEFINEみたいのがあればヘッダを書き換えるだけだけど・・・


386 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/30(水) 22:18:17.27 ID:8ezR9SNv0]
>>385
世間一般的な使いこなし術、とは違って
「他言語で実現できてる事」を工夫して提唱しても虚しいぞ。
結論として他言語に移れば良い。

別にWindowsの操作制御はUWSCの専売特許でもない。
ただ、初心者でも使いやすい記述とインターフェースがあるだけ…そこはものすごい利点なのだが。

387 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/11/30(水) 22:37:21.30 ID:yLeiwQBs0]
その初心者向けにヘルプが充実してるところか。
悲しいのは敷居が低いからいろんなのがヘルプ読まずに質問するところか。

388 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/01(木) 00:43:31.29 ID:8QVbGduq0]
ヘルプや例だけでは仕様が曖昧な記述も多いよ。

389 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/01(木) 00:47:03.60 ID:n0XSScXj0]
そういう質問なら別にかまわん。

しかしそれ以前の質問多すぎるだろ…

390 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/01(木) 12:15:23.09 ID:GRaVA5bs0]
ビットテストしたくて下みたいに書いたんだけど、もっとシンプルで実行速度が速そうなの組みたいんだけど
どうしたらいいんだろうか?
Procedure bittest(test)
 for i=0 to 3
  test2=test and power(2,i)
  select true
   case test2=8
    print test2
   case test2=4
    print test2
   case test2=2
    print test2
   case test2=1
    print test2
  selend
next
fend


391 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/01(木) 13:49:09.37 ID:GRaVA5bs0]
>>390の補足
それぞれ立ってるビットによって別の操作をしたい
selectが条件一致したら抜けるんじゃなくて条件に一致した部分全部を実行して欲しい
bittest(6) で呼ぶと
2
4
って感じで表示して欲しい


392 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/01(木) 14:32:22.84 ID:AEqpRIzn0]
チェックボックスのビット判定の例を見ると参考になると思う。

393 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/01(木) 14:58:53.56 ID:GRaVA5bs0]
>>392
レスありがとう
そう言えばSLCTBOX()のチェックボックス指定した時ってビット演算で戻り値取ってましたね
早速例題ググってみます



394 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/01(木) 16:08:10.80 ID:1uXdCRi30]
>>390
その4ビットだけならこれでいいのでは
procedure bittest(test)
if test and 1 then print 1
if test and 2 then print 2
if test and 4 then print 4
if test and 8 then print 8
fend

395 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/01(木) 16:09:56.53 ID:GRaVA5bs0]
>>390だけど
Procedure bittest(test)
 if test and 8 then print test and 8
 if test and 4 then print test and 4
 if test and 2 then print test and 2
 if test and 1 then print test and 1
fend

にした
流しそうめんみたいに上から全部判定して別処理するんだったらこれが一番シンプルだと思った
答えてくれた>>392さんありがとう。サンプルコード見て閃いた
やっぱ素直に書くのが一番でした

396 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/01(木) 16:11:25.72 ID:GRaVA5bs0]
>>394
おお!レスくれてたのか。ありがとうございます。リロしてませんでした。ごめんなさい
仰るように書き直しました。これに気付くまで数時間かかったのでありがとうございます

397 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/02(金) 17:53:16.31 ID:wLnc7Jgd0]
32ビットとか使いたくなった時のために
こんな感じにしといたほうが無難ではないだろうか
procedure bittest(test)
bit = 1
for i = 1 to 32
if test and bit then print bit
bit = bit * 2
next
fend

398 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/02(金) 18:18:35.14 ID:nzM92MKJ0]
並列して似た作業をループさせたいんだが
内容としては、ChromeA、ChromeB、ChromeCってウィンドウがあるとして
AもBもCもループさせてる作業内容は同じで、そのループを同時進行で実行させたい。

知識ないから、単純にA、B、C用にそれぞれスクリプトを組み同時に実行させてるんだけど
なぜだかAウィンドウがCウィンドウの位置にワープしたり、BウィンドウがAウィンドウと重なる位置にワープしたり
わけわかめなんだ。
原因として、何が考えられるのか。改善は可能なのか。
ちなみに、スクリプトの内容は
FOR 回数 = 1 TO 5
ACW(GETID("〜-〜- Google Chrome","Chrome_WidgetWin_0"),-1,319,263,761,0)
BTN(LEFT,CLICK,176,794,1000)
BTN(LEFT,CLICK,176,794,1000)
BTN(LEFT,CLICK,176,794,1000)
BTN(LEFT,CLICK,176,794,1000)
BTN(LEFT,CLICK,176,794,1000)
BTN(LEFT,CLICK,176,794,1000)
BTN(LEFT,CLICK,176,794,1000)
NEXT

こんな感じのを、A、B、C用それぞれ作ってバッチでスクリプトを同時に実行させてる。
ちなみに、全部で12ウィンドウ分。

399 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/02(金) 21:21:05.08 ID:79OuEhei0]
そりゃ毎回getidしてるからだろ。

400 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/02(金) 21:38:40.01 ID:k1G8oZ+i0]
どうせIDがかぶってるオチじゃねーの

401 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/02(金) 22:02:28.32 ID:nzM92MKJ0]
>>399
その通りだったみたいです。
GETIDの所無くしたら問題なく動きました。
これ、クリックする部分は絶対座標だから対象としてるウィンドウ達はスクリプトで指定してる座標から動かしちゃダメって事ですよね。
とりあえず、これで手動クリックから抜け出せましたw
1時間弱12個のウィンドウの決まった所をひたすらカチカチ作業を6時間おきにやるのがマジキチだったので
助かりました!

402 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/02(金) 22:59:30.81 ID:79OuEhei0]
>>401
なんか勘違いしてるっぽいな?

同じタイトルのウィンドウが複数ある場合1回目のgetidと2回目のgetidで
同じウィンドウを取得できるとは限らんって事だぞ。

一つのウィンドウに対して複数回操作をするなら
getidを1回だけやってIDを変数に取って以降その変数でやる

403 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/02(金) 23:57:44.63 ID:fkbuA7P+0]
どう考えてもまともな使用目的じゃなさそう
ま、その程度ならたいした実害はなさそうだけどな…



404 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/03(土) 00:00:36.60 ID:X9b56wfw0]
マクロのまともな使用目的ってなんだよ

405 名前:403 mailto:sage [2011/12/03(土) 00:19:27.25 ID:/eCiHqMi0]
>>404
だからさ、マクロ目的ならこれよりAHKの方が良いって…w

406 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/03(土) 00:19:31.71 ID:i8U652yV0]
ルールを正規に定めている範囲内でそのルールに違反しないこと

407 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/03(土) 10:57:34.98 ID:mXU25fWD0]
IF (test_flag xor PEEKCOLOR(446,182))=($FFFE or (test_flag xor 1)) then その後の処理
って感じでtest_flagの状態によって切り替えて判定してるんだけどもっとシンプルに書きたい
norが有ればもう少しましに
IF (test_flag xor PEEKCOLOR(446,182))=($FFFE nor test_flag) then その後の処理
って感じで書けるんだろうけどnotすらないようなので・・・
○PEEKCOLORの取りうる値は$FFFFかそれ以外
○test_flagは0か1の値を取る
○検出したいのは$FFFF

やりたいことは
○test_flagが0の時、$FFFF=PEEKCOLOR(446,182)を検出するとthenを実行
○test_flagが1の時、$FFFF=PEEKCOLOR(446,182)を検出出来なければthenを実行
頑張って一回で両方を判定しようとして2,3時間悩んだ結果がこれなんだ
実際にはthread処理してて別のルーチンでtest_flagの状態を変えてるからタイミングが悪い時に
2回判定するとタイミングずれて結果が変わる
両方を同時に判定しないといけないんだけどもっといい方法無いかな

408 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/03(土) 11:25:51.48 ID:mXU25fWD0]
○test_flagが1の時、$FFFF=PEEKCOLOR(446,182)を検出出来なければthenを実行
↑間違えた
○test_flagが1の時、$FFFF=PEEKCOLOR(446,182)を検出するとthenを実行

普通は判定で処理が変わるけど、処理が同じで判定の方が変わる

409 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/03(土) 11:52:21.95 ID:9zFEGBoU0]
それ、test_flag で何も切り替わってない気がするけど
if peekcolor(446,182)=$FFFF then 〜
ではダメな理由は何?
それと、一行にまとめたからって同時に実行されるわけじゃないかと

410 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/03(土) 11:52:50.87 ID:1rpOnUv/0]
this_test_flag = test_flag
this_PEEKCOLOR = PEEKCOLOR(446,182)

共有変数を直接参照し続けなければ良いだろう…とは当然考えてしまうのだが。

411 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/03(土) 12:08:59.69 ID:mXU25fWD0]
>>409
test_flagは別ルーチン(thread処理で別のが切り替えてる)
ダメな理由は
if peekcolor(446,182)=$FFFF and test_flag=0 then 〜
if peekcolor(446,182)<>$FFFF and test_flag=1 then 〜
って書くとifとifの間の実行中に別スレッドがtest_flagの値を切り替える可能性があるから

>>410
これも同じ理由です。そもそも状態を記憶するためにフラグを使ってるのですから
直接参照した上でないと代入や判定の際にタイミングずれて誤作動しました

412 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/03(土) 12:14:18.13 ID:1rpOnUv/0]
>>411
別スレッドで動作させるなら
>IF (test_flag xor PEEKCOLOR(446,182))=($FFFE or (test_flag xor 1))
最初のフラグと最後のフラグが同じ値である保証は無いのだが。

413 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/03(土) 12:17:11.88 ID:1rpOnUv/0]
俺が誤解してるのかなぁ…



414 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/03(土) 12:18:53.23 ID:1rpOnUv/0]
まぁ、そこまで動作を把握してるなら自分で聞いた答えは自分で出してるんだろうな。
もっとシンプルには書けない、で終わりだ。

415 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/03(土) 12:26:58.10 ID:mXU25fWD0]
>>408が間違いです。ほんとすみません
test_flagが1の時、$FFFF=PEEKCOLOR(446,182)を検出出来なければthenを実行であってました
どうも混乱しててごめんなさい

416 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/03(土) 12:34:58.12 ID:mXU25fWD0]
>>413
ほんとうにごめん。>>415です。>>408が間違ってました
気分を害したのならあやまります。ただ、こう言ったロジックの話は
チェスとかパズルとか将棋みたいで知的遊戯な気がするので聞いてみました
詰め将棋やってて解けたと思ったら実は他に逃げ道が有って・・・みたいな感じですね
>>412なんですがその通りなんですよね
完全に回避しようと思ったらuwsc自体にthread処理を一旦止める実装がないと無理だと思います
ただ、
if peekcolor(446,182)=$FFFF and test_flag=0 then 〜
if peekcolor(446,182)<>$FFFF and test_flag=1 then 〜
と書くよりは誤作動する確立が減るので、一回でなるべく高速に判定したいと思った結果なんですよ

417 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/03(土) 12:42:03.86 ID:1rpOnUv/0]
いや、実際の動作的に試したことは無かったので面白いと思いますわ。
で、実際に書いてみた…num=numでfalseが出るよねw
確実性を求めるなら、処理が外部に出る前に必ず別フラグを参照して止める必要性があるねぇ。

----
public num
thread _set()

while 1
 ifb num = num
  print "true"
 else
  print "false"
 endif
 sleep(0.1)
wend

procedure _set()
 while 1
  num = random()
 wend
fend
----

418 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/03(土) 12:45:34.02 ID:9zFEGBoU0]
私が>>409を書いた理由も>>408が原因だぞ。充分に反省するように。

とりあえず、条件式を1行にまとめたからって全てが同時に判定されるわけじゃなく
優先度の順にビット演算されていくだけなので、IFを多重にした方が高速な場合が多い。

そして実はあるシンプルな回答
if peekcolor(446,182)=$FFFF xor test_flag then 〜
たぶんこの1行で行けるんじゃないかな

419 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/03(土) 12:51:03.91 ID:ohnwLlPk0]
スケジュール設定で12:00〜15:00まで3分毎ってどういう式にすればいいんですか?

420 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/03(土) 12:51:56.72 ID:1rpOnUv/0]
>>418
求めるものはそういう回答なのでしょう。

ずれた話しててごめんね。

421 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/03(土) 13:29:11.91 ID:mXU25fWD0]
>>417
わざわざ試して頂いてありがとうございます
ちょっと自分なりに条件を考えてみたのですが
IF (test_flag xor PEEKCOLOR(446,182))=($FFFE or (test_flag xor 1))
のフラグが最初と最後で書き換えられていない場合でPEEKCOLOR(446,182)が$FFFFを返す場合

フラグ1の時
1 xor $FFFF=$FFFE or (1 xor 1)これが判定式に入るので
if $FFFE=$FFFE then〜 の式になる

フラグ0の時
0 xor $FFFF=$FFFE or (0 xor 1)
if $FFFF=$FFFF then〜 の式になる

これは思った通りの動作です

改行が多いと怒られたので

422 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/03(土) 13:29:31.63 ID:mXU25fWD0]
途中で切り替わってしまった場合は
フラグ1の時
1 xor $FFFF=$FFFE or (0 xor 1)これが判定式に入るので(もしくはその逆で0 xor $FFFF=$FFFE or (1 xor 1)かもしれない)
if $FFFE=$FFFF then〜 の式になる

フラグ0の時
0 xor $FFFF=$FFFE or (1 xor 1)同上
if $FFFF=$FFFE then〜 の式になる
IFの判定の瞬間に切り替わっちゃうとどうしようもないけど、頑張って考えたて
安全性を求めるなら、この条件を数回実行するって言うのしか方法はなさそうなんですよね

>>418
はい、ほんとうにごめんなさい。反省してます
自分でも必死に考えて試行錯誤の結果なのできっちり理解できてませんでした
if peekcolor(446,182)=$FFFF xor test_flag then 〜
なんですけど試したらちゃんと動きました。ありがとうございます
ビット演算が実は逆に時間がかかる場合もあると聞いてビックリです
>>420
いえ、ありがとうございます。勉強になりました
>>418で答えていただいたのを理解してました。遅レスですが皆さん本当にありがとうございます

423 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/03(土) 13:33:29.83 ID:mXU25fWD0]
あと、事後報告なんですが、>>418で回答頂いたのをコードに組み込んで
printで確認したら、やっぱり何回かに1回の割合で誤判定してるみたいです
3、4回走らせると、誤作動はしてないみたいなので、本当にthen以降を実行するかはループを回してチェックする事にしました
ありがとうございました



424 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/03(土) 14:55:45.80 ID:9zFEGBoU0]
>>422
>ビット演算が実は逆に時間がかかる場合もあると聞いてビックリです

そういう意味じゃなくて、条件式というのは全てビット演算なのですよ。
マッチしたら1 しなかったら0 という1ビットの値として扱われるものなので
ビット演算子で条件を繋いだりできるわけです。

そしてたとえば
if 超重い関数() and クソ重い関数() and 死ぬほど重い関数() then 〜
このような条件式があった場合、andなので一つが0ならそれで確定するのに
ビット演算を全部終わらせようとして常に関数3つとも実行されてしまうので
一つの長い条件式にするよりは多段IFの方が無難なのです。
でも今回の場合は関係なかったかも。

425 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/03(土) 16:28:49.35 ID:mXU25fWD0]
>>424
そうなんですか
最終的にはif ビットが立ってるか? thenって言う判断なんですね
凄く参考になったので今if文全部見直してます

426 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/03(土) 20:26:44.32 ID:9zFEGBoU0]
ところで、>>407の1行目ってやっぱり
test_flagがどっちであっても同じ動作をするように見えるんだけど・・・
つまり>>409に書いた通り
if peekcolor(446,182)=$FFFF then 〜
これと全く同じ動作になってるような?

427 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/03(土) 21:58:02.73 ID:1rpOnUv/0]
>>426
>>407 の一行目は完全にフラグ無視の動作だねw
動いていたのは彼の勘違いか、コードの別の部分が変にフラグ書き換えてバグってるんだよ。

別の部分の原因を把握してないから>>423 みたいな事を言ってるんだと思うわ。

428 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/04(日) 15:19:27.08 ID:/9Bgp8pL0]
>>426
if peekcolor(446,182)=$FFFF then 〜 だと複数回チェックする時に状態反転してるのに同じ物を検出条件にしてますよね?
その間に状態が変わって反転してるかもしれないのでこれだと誤作動です
フラグが反転すると今度は$FFFFを検出しない状態でthen〜を実行して欲しいんです
フラグの状態を無視してると言うのが力不足で理解出来ません。良ければその理由を指摘いただけませんか?

>>427
画面の更新タイミングがずれる時(他アプリの起動や描画時間がかかるアプリ、windowsの画面更新そのものが止まる状況、画面上に別アプリを起動した時にそのウインドウが(446,182)の座標に被った場合など)
描画が止まったりすると1回の判定だと当然誤作動するんです。誤動作のタイミングがそれ以外にも色々あるので不定です
then〜はエラー復帰と考えていただければ分かりやすいと思います
その判定の為に何回かPEEKCOLOR(446,182)を繰り返してます

429 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/04(日) 15:44:59.59 ID:oaCfJ4/G0]
>>428
いい加減に自分でテストコードぐらい書いて確認しろよ。
以下の4パターンで、この二つの判定式はまったく同じboolを返す
今までこれで正しく動いていたと思うなら、ほかの部分がおかしいままだ。

flag = true; pc = $FFFF; print _a(flag, pc) +":"+ _b(flag, pc)
flag = false; pc = $FFFF; print _a(flag, pc) +":"+ _b(flag, pc)
flag = true; pc = $1111; print _a(flag, pc) +":"+ _b(flag, pc)
flag = false; pc = $1111; print _a(flag, pc) +":"+ _b(flag, pc)

function _a(test_flag, pc)
 ifb (test_flag xor pc)=($FFFE or (test_flag xor 1))
  result = true
 else
  result = false
 endif
fend
function _b(test_flag, pc)
 ifb pc = $FFFF
  result = true
 else
  result = false
 endif
fend


430 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/04(日) 16:37:31.86 ID:/9Bgp8pL0]
>>429
thread処理じゃないのでこのコードが同じになるのは分かります
実際に動かしました。仰るようにthread処理でフラグが変えられた場合のテストコード書いてみます

431 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/04(日) 16:45:45.24 ID:oaCfJ4/G0]
>>430
根本的に勘違いをしてそうだな…

432 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/04(日) 17:12:51.75 ID:NfC3QC8T0]
っていうか>>421に自分で書いてるだろう
色が$FFFFの場合に
>フラグ1の時
>if $FFFE=$FFFE then〜 の式になる
>フラグ0の時
>if $FFFF=$FFFF then〜 の式になる
つまりフラグがどっちでもIF条件を満たして同じ動作をしてる

>IF (test_flag xor PEEKCOLOR(446,182))=($FFFE or (test_flag xor 1)) then その後の処理

>if peekcolor(446,182)=$FFFF then 〜
と全く同じ動作しかしてない。

433 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/04(日) 17:30:39.85 ID:/9Bgp8pL0]
今必死に理解に勤めてます
threadであろうがやっぱり同じになると思います。でも何故そうなるか分かりません
数学の証明問題を解いてる気分です
もうちょっと頑張りたいと思います。皆さん本当にありがとうございます



434 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/04(日) 18:04:04.92 ID:/9Bgp8pL0]
ごめんなさい。やっと理解できました。根本的に間違ってたようです
IF (test_flag xor PEEKCOLOR(446,182))=($FFFE or (test_flag xor 1)) then その後の処理
は単に
IF peekcolor(446,182)=$FFFF then
を分かりにくくしただけで、式そのものが間違いと言う事に気付きました
ちゃんと動いた事があるのはうまい具合に(意図したように)誤作動してたんだと思います
本来チェックしたい条件とは逆の判定をflagによって行ってた
threadだろうが、そうでなかろうが結果が同じになるということがやっと分かりました
IF peekcolor(446,182)=$FFFF thenを因数分解した様な式で分かりにくくなっただけでflagの値が何であれ判定条件は同じ
if peekcolor(446,182)=$FFFF xor test_flag then 〜
じゃないとまともに動かない。何故間違ってるのかに気付くまで時間かかりましたがご指摘、本当にありがとうございました

435 名前:名無しさん@お腹いっぱい。 mailto:sage [2011/12/04(日) 18:17:37.85 ID:/9Bgp8pL0]
連投失礼します
今回、if文は本来チェックしたいものをチェックして、フラグで条件が違うならそれでテストする
if 真xor真 これは偽
if 真xor偽 これは真
と言う事を改めて学ばせていただきました。本当にありがとうございます。上みたいにもっとシンプルに考えればよかったんですね
基本に立ち帰りました
理解に協力していただいた皆様に本当に感謝いたします。ありがとうございます
嬉しい事があると話が長くなるタイプなので長文失礼致しました






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<253KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef