UWSC 掲 示 板
投稿時に「証明書が不正です」と出る場合には、JavaScriptをオンにしてください
動作不具合での質問の場合には環境(OS,IEのバージョン等)の表記もしてください
タイトルは質問内容を表したものにしてください
ネットゲーム関係の質問はご遠慮ください

計算結果がおかしい? / ガンガンいこうぜ
普通に計算すると、a-b は、0.013 となると思うのですが、
UWSCで計算すると、0.0130000000000052 になるのはなぜですか?

a=162.175
b=162.162

print a-b

No.3633 2017/03/17(Fri) 15:40:21

Re: 計算結果がおかしい? / stuncloud
「浮動小数点数 誤差」で検索!
No.3634 2017/03/17(Fri) 15:53:04

Re: 計算結果がおかしい? / MM
>「浮動小数点数 誤差」で検索!
これ以上の回答はITパスポート試験レベルの内容ですね。
実用上どのように数値処理すれば良いかも有効桁数でググってください。
これらをご自分で調べて理解する気がないのでしたら、諦めて誰かに有償でやってもらってください。

No.3636 2017/03/17(Fri) 17:45:22

Re: 計算結果がおかしい? / stuncloud
> どうして UWSCのような優れたソフトが、普通の計算結果にまで処理してくれないんですか?
> ウィンドウズの計算機では、普通に答え出してくれるのに・・・


UWSCだけじゃないんですよね、例えばPowerShellでも

PS> 162.175 - 162.162
0.0130000000000052

人間にとっては普通でもコンピューターにとっては普通ではないということもまぁ、あるんですよ
欲しい桁数が事前にわかっているのであれば念のためround()で丸めとくとか、そういったことをしとくと良いでしょう

print round(a-b, -3) // 0.013

// ちなみにちゃんと説明出来る気がしないのでその点は放棄してます、ごめんなさいね

No.3637 2017/03/17(Fri) 18:01:49

Re: 計算結果がおかしい? / 俄プログラマー
>UWSCの作者様に、一般的な計算結果を出した方が良くないですか?
>という要望でした。

一般的な計算結果を出すとは人によって基準が違いますね。
皆が満足する答えはありませんよ。

1を3で割った答えを書いてください。
と言って出てくる答えは人によって同じではないですから。

出てきた問題はプログラムを組む人が都合の良い様に解決すれば良いでしょう?
今回の件も適当に丸め込めば良いだけです。

No.3640 2017/03/17(Fri) 20:30:59

Re: 計算結果がおかしい? / 雅
浮動小数点数の誤差について理解されたのでしょうか?
意見を言うだけですか?

計算結果が0.0130000000000052
となるのは人間には不正解でも2進数のパソコン的には正解です。
計算のたびに
0.0130000000000052
0.0130000000000053
0.0130000000000051
などと答えが違うのならそれは問題ですね。
あなたに何を言っても無駄な気がしますがね(笑)

No.3643 2017/03/18(Sat) 10:24:05

Re: 計算結果がおかしい? / 俄プログラマー

>今回言っているのは、小数点2・3ケタの、引き算ですよ

162.175は
コンピューター内部では
1010 0010 . 0010 1100 1100 1100・・・です。
元に戻すと
162.17498779296875・・・となります。
小数点2・3桁のお話ではないです。

162.175-162.162=0.013
とウインドウズの計算機が表示しているのも
コンピューターが出す実際の計算結果は0.0130000000000052でしょう。

なぜUWSCも一般的な答えの0.013としないのか
既に答えは出ています。
stuncloudさんがおっしゃっている最初の返信で話は終わってますね。
「浮動小数点数 誤差」で検索 これです。

No.3645 2017/03/18(Sat) 18:04:43

Re: 計算結果がおかしい? / Windows好き
Windowsの電卓の内部処理についてMicrosoftの人が触れた記事があります。
https://blogs.msdn.microsoft.com/oldnewthing/20040525-00/?p=39193
実はWindowsの電卓の演算ライブラリは独自のものになっており、ただ有効数字が大きいだけではなく結構特殊なことをしています。
1/3=0.3333333333333333
*3=1

0.3333333333333333*3=0.9999999999999999
のように表示が同じでも実は内部処理が違うのです。

>ウィンドウズの計算機が出す答えは、皆が満足する答えではないのですか?
https://blogs.msdn.microsoft.com/oldnewthing/20160628-00/?p=93765
√4-2=-1.068281969439142e-19
こちらでは表示では2-2なのに結果がずれてしまいます。


ちなみに、浮動小数点演算では、小数点2・3桁でも整数部が異なると精度が変わってきます。
a=99999162.175
b=99999162.162
print a-b //=>0.0129999965429306
a=9999999999162.175
b=9999999999162.162
print a-b //=>0.01953125

コンピュータも人間も小数を完全に表せないという性質上、どうやってもどこかで誤差が出ます。結局、IEEE 754に従っておくのが一番妥当なのかなと思います。

No.3646 2017/03/19(Sun) 02:25:02

Re: 計算結果がおかしい? / めいれいさせろ
皆様へ

よく分かりました
ありがとうございました

No.3647 2017/03/19(Sun) 08:51:47
STOPFORM関数で表示位置が戻ってしまう / okbot
stopform(TRUE, 100, 200)

while TRUE
  sleep(1)
wend

これを再生し、
[Alt]+[F1] で一時停止した時点で、STOPボタンウィンドウがデフォルトの位置に戻り、
再度再生しても、デフォルトの位置のままとなっています。

Windows 7
UWSC Ver. 5.2.3.0

No.3631 2017/03/16(Thu) 19:34:42

Re: STOPFORM関数で表示位置が戻ってしまう / miles
>再度再生しても、デフォルトの位置のままとなっています。
再設定するしかない。
もっといい方法があるかもしれない。。。

while TRUE
  stopform(TRUE, 100, 200)
  sleep(1)
wend

No.3632 2017/03/17(Fri) 12:02:05
THREADをPUBLIC変数経由で即座に終了させる方法 / ギン
PUBLIC A
A=0

THREAD 1

Sleep(10000)

PROCEDURE 1
FOR A = 1 to 100
THREAD 1a
処理
IFB A=1
BREAK
ENDIF
処理
IFB A=1
BREAK
ENDIF
処理
IFB A=1
BREAK
ENDIF



処理
IFB A=1
BREAK
ENDIF
NEXT
FEND

PROCEDURE 1a
FOR A = 1 to 100
Sleep(5)
IFB CHKIMG(”Gazou”)
BREAK
ENDIF
NEXT
IFB CHKIMG(”Gazou”)
ELSE
A=1
ENDIF
FEND

THREAD 1が正常に実行されている場合500秒以内にGazouが表示されます。
されない場合は異常が発生しているのでTHREAD 1aでPUBLIC変数Aを1とし、THREAD 1はPUBLIC変数Aが1になっているのを確認するとBREAKし終了します。

質問の内容ですが、THREAD 1aでは上記のように
IFB A=1
BREAK
ENDIF
を張り巡らせているのですが、Aが1になった瞬間にTHREAD 1が終了(BREAKを実行)するように組むことはできないでしょうか?
今の状態ではスクリプト文が膨大になってしまっていますし、これでもAが1になった瞬間にBREAK、というのはできない場合があります。

何かいい方法があればご教授して頂けると幸いです。
よろしくお願い致します。

No.3623 2017/03/15(Wed) 07:46:16

Re: THREADをPUBLIC変数経由で即座に終了させる方法 / stuncloud
1a()でA=1するかわりにexitexitすればよろしい
スクリプト自体を強制終了してしまっても構わんようなスクリプトに見えます

あと余計なお世話ですが

>THREAD 1
>
>Sleep(10000)


とするくらいなら1()はthreadで呼ぶ必要ないですよね
あと1a()って1()の中で最大100回threadで呼び出しますよね
1a()は処理が終わるまで500秒以上必要そうですけどこれ1()の中の1ループ内で収まるんでしょうか
同時に実行できるthread数は64個までなんだけど大丈夫ですかねこれ
A=1で異常終了するのが前提だとすれば平気なのかな、異常が前提ってわけわかんないけど

No.3624 2017/03/15(Wed) 10:11:37

Re: THREADをPUBLIC変数経由で即座に終了させる方法 / ギン
stuncloudさん、返信ありがとうございます。

質問に当たってスクリプトを簡略化して記載したのですが(そのまま載せるとかなりの長さになります)THREAD自体も実際は10個以上同時に実行しています。
それらもスクリプトごと終了してしまうのはまずいのでExitExitでは駄目そうです。

1aは例えば450秒目で画像認識をするとそのまま終了するのでTHREADの同時実行に関しては問題ないです。

No.3626 2017/03/15(Wed) 11:23:20

Re: THREADをPUBLIC変数経由で即座に終了させる方法 / miles
// 終了させたい部分(THREAD 1)を別プロセスで実行したらどうですか?
exec("uwsc.exe xxxx.uws") // PROCEDURE 1 以下の内容を xxxx.uwsにして実行する

// それなら、exitexitでそのスクリプトのみ終了します。

No.3627 2017/03/15(Wed) 14:46:14

Re: THREADをPUBLIC変数経由で即座に終了させる方法 / しろまさ
目線を切り替えてこんな方法は?

@ PROCEDURE 1 以下を別ファイルAにする。
A メインプロセスからAをExecやDosCmd等で別プロセス起動。
B A=1 のタイミングでExitExit(別プロセス側のみ落ちる)

ExecでID取っておけばメイン側から終了させることも可能ですね!

追記)被り負けた orz。。

No.3628 2017/03/15(Wed) 14:51:09

Re: THREADをPUBLIC変数経由で即座に終了させる方法 / しゅん
// こういう方法もあります

PUBLIC _main_loop_flg = TRUE
PUBLIC _thread_loop_flg = TRUE

TEXTBLOCK _THREAD_SCRIPT
//:= "スレッド処理"
//:= "なお、コメントは書けないので適当な代入文にする"
//:= "これ、//という変数への代入文です"
sleepTime := 1
msg := "まあそのなんだ"
FUKIDASI(msg)
SLEEP(sleepTime)
msg := "どうしてもと言うならそのだな"
FUKIDASI(msg)
SLEEP(sleepTime)
msg := "こういうこともできる、という話だ"
sleepTime := 2
FUKIDASI(msg)
SLEEP(sleepTime)
msg := "推奨行為ではないな"
sleepTime := 1
FUKIDASI(msg)
SLEEP(sleepTime)
msg := "全体的にスクリプトを見直すべきに思う"
FUKIDASI(msg)
SLEEP(sleepTime)
msg := "だいたい100行を超えた関数は何かが間違っていると思ってよい"
FUKIDASI(msg)
SLEEP(sleepTime)
ENDTEXTBLOCK


THREAD 1()
WHILE _main_loop_flg
  // とりあえずESC押したら終了するよう実装。実際はCHKIMGか
  IF GETKEYSTATE(VK_ESC) THEN _thread_loop_flg = FALSE
  SLEEP(0.1)
WEND


PROCEDURE 1()
  DIM i, scripts = SPLIT(_THREAD_SCRIPT, "<#CR>")
  FOR i = 0 TO RESIZE(scripts)
    EVAL(scripts[i])
    IF !_thread_loop_flg THEN BREAK
  NEXT
  _main_loop_flg = FALSE
FEND


// ネイティブスレッドを止めることもできますが、ま、普通の人にはおすすめしません

No.3629 2017/03/15(Wed) 18:06:10

Re: THREADをPUBLIC変数経由で即座に終了させる方法 / ギン
milesさん、しろまささん、しゅんさん
Execで別プロセス起動するやり方で一度試してみようと思います。
ご教授して頂きありがとうございました。

No.3630 2017/03/16(Thu) 00:21:17
UWSC.exe フリー版 録画出来ない / かずき
はじめまして。
UWSC5.2.3 フリー版をダウンロードしましたが、録画や再生が上手く出来ません。
数名で何が問題があるのか検証しましたが、わからない状況です。
もともとあるサンプルは再生可能なんですが、自分では録画や再生は出来ません。
ちなみに録画ボタンは動いておりますが、機能としては作動してないようです。
この場合はどのような対処法がありますか?

No.3622 2017/03/14(Tue) 23:31:52

Re: UWSC.exe フリー版 録画出来ない / stuncloud
FAQに該当するものがないか見てみましょう
http://www.uwsc.info/faq.html

解決しないようなら録画して保存したスクリプトにどの程度の記述があるかとか、そういった情報も添えてください
全く操作できないものってのもありえます(ゲームとか)、その場合は諦める

No.3625 2017/03/15(Wed) 10:18:40
Accessを開く / hatonomark
下記を実行した場合、Accessはオープン後に終了してしまいます
ExcelはUWSCスクリプトの実行が終わっても終了しません。
Accessを終了させたくないのですがどうしたら良いでしょうか


Access = CreateOLEObj("Access.Application")
Access.Visible = True
Access.OpenCurrentDatabase("C:\test.accdb")


Excel = CreateOLEObj("Excel.Application")
Excel.Visible = True
Excel.WorkBooks.Open(FileName:="C:\test.xlsm")

No.3614 2017/03/09(Thu) 00:22:47

Re: Accessを開く / しろまさ
最近リカバリーしてAccess入ってないんで検証できませんが、
UWSCのプロセス終了に巻き込まれる感じですか?

であれば DosCmd("C:\test.accdb") などで起動して
操作したいなら GetActiveOleObjでオブジェクト取れば良さそうですがいかがでしょう?

No.3616 2017/03/09(Thu) 09:40:15

Re: Accessを開く / hatonomark
しろまささん こんにちは
UWSCのプロセス終了に巻き込まれてました。

ヒントもらい解決できました
Exec("C:\MSACCESS.EXE")
Access = GETACTIVEOLEOBJ("Access.Application")
Access.OpenCurrentDatabase("C:\test.accdb",false,"pass")

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

No.3619 2017/03/10(Fri) 18:15:15
SlctBox関数の不具合 / ミリアム
これと
SlctBox(SLCT_BTN, 0, 100+100, 500, "", "選択肢A", "選択肢B", "選択肢C")

これが
SlctBox(SLCT_BTN, 0, 200, 500, "", "選択肢A", "選択肢B", "選択肢C")

違う結果になります。選択肢だけで良い時がよくあるので不便です。


SlctBox(SLCT_BTN, 0, 100+100, 500, " ", "選択肢A", "選択肢B", "選択肢C")

こうするとまあ一応意図した風な感じにはなるのですが、一行分無駄に縦に伸びて邪魔です。


ついでに要望なのですが、
・SLCTBOX関数のタイムアウト時の返り値についてもヘルプに書いてあるといいと思います。
・予約語の定義済み仮想キーのページですが、他の仮想キーと同様にVK_OEM_***系についても解説があるといいと思います。セミコロンとかコロンとか。
・VK_OEM_102(キーボード右下の\のキー)が仮想キー一覧にありません。
・Breakキーの記録が変です。仮想キーに変換されずに数値のままです。

No.3601 2017/03/06(Mon) 11:56:50

Re: SlctBox関数の不具合 / MM
本当になりますね不思議
上は選択肢Aがメッセージとして解釈されてます

No.3602 2017/03/06(Mon) 13:00:18

Re: SlctBox関数の不具合 / stuncloud
SlctBox(SLCT_BTN, 0, 100+100, 500, chr(0), "選択肢A", "選択肢B", "選択肢C")

いくつか試しましたが代替案としてはこれで良さそう?

No.3603 2017/03/06(Mon) 13:56:13

Re: SlctBox関数の不具合 / ミリアム
第3引数と第4引数が数値であれば X位置,Y位置指定と判断

の処理がアレしてるんじゃないでしょうか。
座標指定が変数名だったりすると同じような感じになるんじゃないかと思います。


chr(0)指定で回避できるんですね?ありがとうございます。

No.3608 2017/03/07(Tue) 19:10:19
Web上の数値増減に反応押してUWSCを起動したい / takelees
Webサイトで放射能測定サイトがありまして、そこに表示されております数値の増減に反応して
UWSCを起動、動作させるにはどうすればよいでしょうか?

No.3594 2017/03/04(Sat) 13:06:56

Re: Web上の数値増減に反応押してUWSCを起動したい / stuncloud
増減に反応して起動はやりようがないので監視のために起動しっぱなしにする必要があります
定期的に数値を取得、保存するようにしておき前回との差があればそれに応じた処理を行います

recent = 数値を取得()
while TRUE
 current = 数値を取得()
 select TRUE
  case current > recent
   増えたときの処理()
   recent = current
  case current < recent
   減ったときの処理()
   recent = current
 selend
 sleep(0.1)
wend

No.3600 2017/03/06(Mon) 10:18:40

Re: Web上の数値増減に反応押してUWSCを起動したい / takelees
stuncloudさんご回答ありがとうございます。
当初はWeb上の数値枠を画像として捉えて、その画像が変化した場合に、
動作させようと思っておりました。画像認識が難しく、悩んでいた次第です。
ご回答いただいた内容に基づき、試してみます。

No.3607 2017/03/07(Tue) 14:47:17
JavaScriptを用いたhtmlページのonclickボタンの押下に対応する方法 / Neru
お世話になります。
現在フリー版UWSCを利用しております。

この度、あるチケットサイト(プレイガイド)において、チケットを確保する「申込み」ボタンの押下を自動化させたいのですが、どのような処理方法を用いるのがベストでしょうか。

なお、サイトはjavascriptによって制御されており、IEを複数個立ち上げた状態(「申込み」ボタンが表示されているページ)でワンクリックで一斉に押下がされるような仕様を望んでおります。

また、「申込み」ボタンの要素ソースは、

<div class="bt-area">
<span class="enter-bt">
<a href="#" onclick="return
sChangeURL('MOUSHIKOMI','https://############.jsp')">申込み</a>
</span>
</div>


となっておりました。

とりあえず、
IE = GETACTIVEOLEOBJ("InternetExplorer.Application")
ie.visible=true
から始めたものの、JSが邪魔しているのか、ie.document.allやIESetDataでは通じなかったのですが、IEGETSRCで解決できるソースなのでしょうか。

複数ウィンドウ開いておりますので、座標指定は出来ないものとお考えいただければ幸いです。

このソースの場合は、どのような関数/制御文を用いるのが適切か、宜しければご教授お願い致します。

No.3605 2017/03/07(Tue) 08:13:33

Re: JavaScriptを用いたhtmlページのonclickボタンの押下に対応する方法 / 雅
.1秒を争うチケットですか?
正規に申し込みする人がかわいそうですね。
自分さえ良ければいい考えは良心が痛みませんか?
このような内容であればゲームで有利に進める場合と変わりが無い気がします。
チケット取得の規約又はルールには問題ないのでしょうか?
マクロは便利だからといってやって良いこと悪いことありますよね?

No.3606 2017/03/07(Tue) 11:28:39
ホットキーを使った引数変更 / FEY
ホットキーを使い、任意のタイミングで引数を書き換える処理を行いたいです、

「test(AA,BB,CC)//関数「test」で引数を設定」
の行では引数を書き換えられるのですが、

「sleep(5)//割り込ませる猶予時間」
の行などでホットキーで割り込んだ場合、
引数を変更することが出来ません、
お手数ですが助言をいただけないでしょうか。


//////////////////////////////////////

sethotkey(VK_z,, "test")//ホットキーをZで設定

AA=0//引数設定
BB=0//引数設定
CC=0//引数設定

test(AA,BB,CC)//関数「test」で引数を設定
print AA//引数を確認
print BB//引数を確認
print CC//引数を確認

sleep(5)//割り込ませる猶予時間
////ここでホットキーで割り込ませる

print AA//引数が変更されたか確認
print BB//引数が変更されたか確認
print CC//引数が変更されたか確認


////引数設定用の関数「test」の設定
procedure test(Var AA ,var BB,var CC)//引数AA,BB,CCの変更を許可
AA = INPUT("入力1", 1)//引数を入力
BB = INPUT("入力2", 2)//引数を入力
CC = INPUT("入力3", 3)//引数を入力
fend

//////////////////////////////////////

No.3598 2017/03/06(Mon) 07:27:48

Re: ホットキーを使った引数変更 / stuncloud
先ず解決策
AA、BB、CCはそれぞれpublicにしておく

続いて解説…なんですがちょっと説明難しいな…わからなかったらごめんなさい
sethotkeyで呼び出される関数は引数を渡さないで実行されます、なので
> Var AA ,var BB,var CC
はなんというか、なかったことになってます
実行時に参照渡しするための変数が指定されてない(できない)のでvarにしても値を外に出せないんですね

関数の外と中で同じ変数名を使うからちょっとややこしくなるのかな
関数定義だけ

procedure test(Var A ,var B,var C)
A = INPUT("入力1", 1)//引数を入力
B = INPUT("入力2", 2)//引数を入力
C = INPUT("入力3", 3)//引数を入力
fend

と書き換えても動作は一切変わりませんが、これだとよりAA、BB、CCの値が変更されないことの意味がわかりやすくなるかと思います

※関数の中(引数含む)と外で同じ名前の変数を使うとミスの元になるのでなるべく止めましょう
 変数をpublicにする場合は別ですが

No.3599 2017/03/06(Mon) 10:06:04

Re: ホットキーを使った引数変更 / FEY
迅速で丁寧なご返答ありがとうございます、

>>sethotkeyで呼び出される関数は引数を渡さないで実行されます、なので
事前に引数設定をしていないとエラーが出るので、嫌な予感がしてましたが、
引数を渡さない、procedureは外の関数と言われてその原因がよくわかりました、
別個の場所に書かれたプログラムの引数が、特別な処理なしに共有されるわけないですものね。

>>と書き換えても動作は一切変わりませんが、これだとよりAA、BB、CCの値が変更されないことの意味がわかりやすくなるかと思います
関数定義だけ変えても同じ動作することを確認しました、
引数が違うのに何故動作するのか不思議でしたが、
procedureで対応した引数が変更されたのではなく、
単に関数に対応した位置が変更されただけだったということですね・・・

ホットキーを使った引数変更は難しそうなので、
別の手段を考えることにします、ご指導ありがとうございました!

No.3604 2017/03/06(Mon) 16:29:27
特定のウィンドウが現れるまでの待ち処理 / ランナ
("","#32770")というウィンドウが現れるまでスリープ処理したいと考えています。

--------------------------------------
a_id=GetID("","#32770")

REPEAT
sleep(0.1)
UNTIL a_id=true
--------------------------------------

とやってみたのですがスリープしてくれません。
条件式が間違っているのでしょうか。
どうしたらよいのか教えてください。
よろしくお願いします。

No.3566 2017/02/26(Sun) 18:56:46

Re: 特定のウィンドウが現れるまでの待ち処理 / しろまさ
GetIDの戻り値 と UNTIL a_id=true の評価式を見直しましょう。
No.3569 2017/02/26(Sun) 20:50:18

Re: 特定のウィンドウが現れるまでの待ち処理 / ランナ
ご回答いただきありがとうございます。

----------------------------------------------
REPEAT
sleep(0.1)
UNTIL GetID(,"#32770",-1)>0
----------------------------------------------

さまざま試してみて、最終的にこのようにしてみたのですが、やはりスリープしてくれません。
getidの戻り値のタイトルが空であることに、問題があるのでしょうか。
取得してもタイトル名がありません。

再度ご回答いただければ幸いです。よろしくお願いします。

No.3575 2017/02/27(Mon) 09:03:31

Re: 特定のウィンドウが現れるまでの待ち処理 / しろまさ
// 複数起動していませんか?
Dim i, id, t
For i = 0  To GetAllWin() - 1
  id = ALL_WIN_ID[i]
  If Status(id, ST_CLASS) = "#32770" Then t = t + "t=" + Status(id, ST_TITLE) + " c=" + Status(id, ST_CLASS) + "<#CR>"
Next
MsgBox( t )

No.3576 2017/02/27(Mon) 09:15:13

Re: 特定のウィンドウが現れるまでの待ち処理 / ランナ
しろまさ様 再度のご回答とスクリプトいただきまして誠にありがとうございました。大変恐縮です。
スクリプトを掛けましたところ、

t=Firm Update c=#32770
t= c=#32770
t=受信しました c=#32770

と出てきました。
一段目、三段目は何かわからないのですが、このソフトには無関係のように思えます。
二段目が該当のダイアログのように思えます。
よろしくお願いします。

No.3578 2017/02/27(Mon) 15:56:07

Re: 特定のウィンドウが現れるまでの待ち処理 / しろまさ
答えのつもりだったんですが。。

UNTIL GetID(,"#32770",-1)>0

「出現するまで待機」のこの条件では、複数存在してれば一瞬で抜けるので当然スリープできないですよね?

条件式を変更して下さい。

No.3581 2017/02/28(Tue) 08:28:52

Re: 特定のウィンドウが現れるまでの待ち処理 / ランナ
ご回答ありがとうございます。また真意を分からなかったことお詫び申し上げます。

UNTIL GetID(,"#32770")>0

という形にしてみましたが、スリープはしませんでした。

No.3582 2017/02/28(Tue) 09:25:06

Re: 特定のウィンドウが現れるまでの待ち処理 / まーく
そもそもそのウインドウはGETIDでIDが取得できているのでしょうか?

私なら出てくるウインドウ("#32770"からダイアログだと思いますが)が決まっているならば
スクリーンショットを取った後にウインドウのメッセージの一部などを使ってCHKIMGで判断させます。

スキルがあればきっともっとスマートな行いができるのでしょうが…。

No.3583 2017/02/28(Tue) 09:42:12

Re: 特定のウィンドウが現れるまでの待ち処理 / しろまさ
UNTIL GetID(,"#32770")>0
も一緒です。「出現するまで待機」してます。

答えを言えば、複数存在時は GetIDを使用しても「出現するまで待機」は出来ないのです。(既に存在してるから)
経験上 #32770はいろんなところで使われていますのでClass名判断では物足りません。
基本GetAllWinを使用し、ステータス判断ですね。
タイトルで判断できればそれ。出来なければ親ウィンドウIDやプロセスIDなどで判断します。
GetItemを絡めてアイテムの個数なんかでも判断できます。

#32768なんかは同プロセスが複数発生させるので個数で判断したりしてます。

No.3585 2017/02/28(Tue) 12:12:05

Re: 特定のウィンドウが現れるまでの待ち処理 / ランナ
しろまさ様

>基本GetAllWinを使用し、ステータス判断ですね。

ステータス関連を知らないので、勉強してみます。
何度もありがとうございました。



まーく様

>ウインドウのメッセージの一部などを使ってCHKIMGで判断させます。

これも未経験なので調べてみます。
ありがとうございました。

No.3586 2017/02/28(Tue) 12:43:37

Re: 特定のウィンドウが現れるまでの待ち処理 / しゅん
しろまささんの回答で充分な気がしますが、
もしかすると見えてることが違う気がするので少しだけ

GETIDのヘルプ、読んでますか?
タイトルは部分一致なのです。
そして、長さ0の文字列は、全ての文字列に部分一致します。
ここが理解できているか気になるところです。

あと、
> 一段目、三段目は何かわからないのですが、このソフトには無関係のように思えます。
が、とても、、、なんというか、素晴らしい、、、。
気持ちはわかりますが、今のコンピューターは0/1しかわからないアホなので、
無関係には思えないのです。


// でまあ、もはや諦めてるかもしれませんが、回答を。(未試験だけど)
REPEAT
  sleep(0.1)
  a_id = GetID("", "#32770")
  IF LENGTH(STATUS(a_id, ST_TITLE)) > 0 THEN a_id = -1
UNTIL a_id >= 0

// でもこれ、いろいろ罠があると思うけど。

No.3591 2017/03/03(Fri) 12:43:10

Re: 特定のウィンドウが現れるまでの待ち処理 / ランナ
しゅん様

回答いただきまして誠にありがとうございました。
さっそく試してみましたところうまくいきました。
IF文の意味を調べてみます。

的外れな質問を繰り返してしまい、皆様にご迷惑をおかけしたようです。
初心者は来るべきではなかったかもしれませんが、
最後まで対応していただき誠にありがとうございました。

No.3596 2017/03/04(Sat) 17:48:00

Re: 特定のウィンドウが現れるまでの待ち処理 / しろまさ
> 初心者は来るべきではなかったかもしれませんが、

この考え方は嫌いですね。じゃあ初心者は質問するところがないと言いたいのですか?

私は相手が努力し結果のコードを貼り質問する限り、決して諦めずに答えます。

代わりに、ただ答えを与えることだけは決してしません。悩んだ時間と努力を尊重します。

自分が諦めたことを他人のせいにするのは学ぶ姿勢として間違ってますよ。

No.3597 2017/03/04(Sat) 22:31:18


 過去ログ(〜2016/10/02)・検索ツール


以下のフォームに記事No.と投稿時のパスワードを入力すれば
投稿後に記事の編集や削除が行えます。
200/200件 [ ページ : << 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 20 >> | 過去ログ ]