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

時間計算さんについて / はる
ゲームの中の時間を表示させてみたくて、以下のように真似てみたんですが
どうにも動きません、

http://www.ginshali.info/2014/07/blog-post.html

わかる方いませんか?



while TRUE
if getkeystate(VK_ESC) then break
lt = GETTIME()
LtHour = G_TIME_HH
LtMinute = G_TIME_NN
LtSecond = G_TIME_SS
if LENGTH(G_TIME_HH) = 1 then LtHour = "0" + G_TIME_HH
if LENGTH(G_TIME_NN) = 1 then LtMinute = "0" + G_TIME_NN
if LENGTH(G_TIME_SS) = 1 then LtSecond = "0" + G_TIME_SS
//
et = lt * (1440 / 70)
EtSecond = int(et) mod 60
EtMinute = int(et / (60)) mod 60
EtHour = (int(et / (60 * 60)) mod 24)
if LENGTH(EtHour) = 1 then EtHour = "0" + EtHour
if LENGTH(EtMinute) = 1 then EtMinute = "0" + EtMinute
if LENGTH(EtSecond) = 1 then EtSecond = "0" + EtSecond
//
BALLOON(EtHour + ":" + EtMinute + ":" + EtSecond + "<#CR>" + lt + "<#CR>" + LtHour + ":" + LtMinute + ":" + LtSecond , G_MOUSE_X+8, G_MOUSE_Y, 3)
wend

No.4481 2017/09/30(Sat) 21:36:00

Re: 時間計算さんについて / Liners
当方では、問題なく動きます。現状では約20秒単位の表示ですが…

UWSCの時間計算は、基準日からの経過日数をセットします。
よって、より細かい時間単位でUWSC風に書くならこんな感じかなぁ。


基準時間 = gettime() + (G_TIME_ZZ / 1000)

while !getkeystate(VK_ESC)
  gettime(((gettime() + (G_TIME_ZZ / 1000) - 基準時間) * (1440 / 70)) / 86400)
  BALLOON(G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2 , G_MOUSE_X+8, G_MOUSE_Y, 3)
  sleep(0.02)
wend

No.4482 2017/09/30(Sat) 23:49:17

Re: 時間計算さんについて / はる
ご回答いただきありがとうございます。
頂いたサンプルもそうなんですが、時間がズレているんですね。
添付のHPに表示される時間と大きく乖離してしまいます。

ゲームはFF14というゲームなんですが、HPの時間が求めたい時間なんです。
他にも同じようなHPを見てみると、同様の計算をしているのですが
http://blog.livedoor.jp/eomap/archives/1005236796.html
HPで表示されている時間はゲームと同じなんですが、
UWSCで同じ計算をしていても乖離してしまいます。

何が原因なのか途方にくれている状態です。

No.4483 2017/10/01(Sun) 05:45:33

Re: 時間計算さんについて / はる
まさかと思いましたが、ズレてしまうのは私の環境の"せい"で
Linersさんはズレていないとか・・・

No.4484 2017/10/01(Sun) 05:49:40

Re: 時間計算さんについて / Liners
>どうにも動きません、
ではないのですか? 時間がズレしまうのは別問題ですよ。

それに「ネットゲーム関係の質問はご遠慮ください」なので、打ち切ってもいいのですが、
基本的な時間計算の内容が含まれるので、HPとほぼ同じ表示ができるところまでとします。

>何が原因なのか途方にくれている状態です。
計算方法[時間の起点]が違うからです。

JavaScriptのDate.getTime()では世界協定時(UTC)1970年01月01日 00:00:00からの経過ミリ秒(UNIX時間)。

UWSCのGETTIMEは「2000年1月1日からの秒数を返す」(日本標準時)

ですので、この差を埋める必要があります。
基準日を"1970/01/01 00:00:00"とした上で、日本標準時との誤差9時間[32400秒]を加味すると、
UWSCのGETTIMEから見たUTCの起点は、utc = gettime(0,"1970/01/01 00:00:00") + 32400 となります。

更にミリ秒の考慮と、値がマイナス値あることに注意してください。
これらを基にしたサンプルは、こんな風になるでしょう。


utc = gettime(0,"1970/01/01 00:00:00") + 32400

while !getkeystate(VK_ESC)
  lt = (GETTIME() + (G_TIME_ZZ / 1000) - utc) * (1440 / 70)
  LtSS2 = format(int(lt) mod 60, 2)
  LtNN2 = format(int(lt / 60) mod 60, 2)
  LtHH2 = format(int(lt / (60 * 60)) mod 24, 2)
  BALLOON(replace(LtHH2 + ":" + LtNN2 + ":" + LtSS2, " ", "0"), G_MOUSE_X+8, G_MOUSE_Y, 3)
  sleep(0.05)
wend

No.4487 2017/10/01(Sun) 15:58:57

Re: 時間計算さんについて / miles
(記事を削除しました。あしからず...)
回答はLinersさんの通りです。

毎回、当日を基準日として

lt = G_TIME_HH*(60*60) + G_TIME_NN*60 + G_TIME_SS + G_TIME_ZZ/1000
et = lt * (1440 / 70)

で計算したら、うまく行きましたが、正しい計算方法ではありません。

No.4488 2017/10/01(Sun) 18:28:12

Re: 時間計算さんについて / はる
ありがとうございます。
質問の仕方が悪かったこと申し訳ありませんでした。
時間計算ですが、もしやとは思っていましたがUTCが関係あったんですね。
UTCについては実はYahoo知恵袋に質問していました。
勉強になりました。
色々とありがとうございました。

No.4489 2017/10/01(Sun) 20:40:36

Re: 時間計算さんについて / はる
引き続きですが、BALLOONで詰まってしまいました。
以下のような式でBALLOON関数に式or型が合ってない”のようなエラーがでます。
自分では合っているつもりなのですが、教えていただけないでしょうか。
よろしくお願い致します。


背景を透明に、文字だけを表示するのが、目的です。

Clock(100, 5, 16, "MS ゴシック", "$FFFFF0")

PROCEDURE Clock(pointX, pointY, nFontSize, cFontName, cFontColor)
while TRUE
BALLOON("時計", pointX, pointY, 0, nFontSize, cFontName, cFontColor, $0, -2))
wend
FEND

No.4497 2017/10/02(Mon) 22:31:23

Re: 時間計算さんについて / はる
解決いたしました。
ありがとうございました。

No.4499 2017/10/02(Mon) 22:40:18
バックグラウンドの起動方法について / R
初歩的な質問かもしれませんがお許し下さい。
アクティブ時の画像認証等はうまく動作してくれますが、mouseorg関数がどうやってもうまく行かず困っております。
メモ帳の非アクティブの状態で入力は出来たのですがNOX(Android仮想シュミレーター)での動作が画像認証は疎かクリックすらうまくいきません。
UWSCの設定内にあるバックグラウンドで実行出来る形で記録、を用いてもうまく行きませんでした。
どなたかご教授頂けましたら幸いです。

No.4494 2017/10/02(Mon) 18:42:30

Re: バックグラウンドの起動方法について / R
記載し忘れましたのでスクリプトに誤りがあればご指摘下さいm(_ _)m

id = GetID("Nox1 ライン有")
id = GetCtlHnd(id,"Qt5QWindowIcon")

MOUSEORG(id,2)


//クエストクリック
IFB CHKIMG("WS000000.bmp") //D:\Users\R.ishikawa\Desktop\UWSC モンスト\絆マクロ\WS000000.BMP//
BTN(LEFT,CLICK, G_IMG_X, G_IMG_Y)
ELSE //
MSGBOX("画像認識に失敗しました。")
ENDIF

No.4495 2017/10/02(Mon) 18:43:50
アプリの指定ITEMが出るまで待ち、無い場合は終了したい / たんと
アプリに表示されているA.iniを選択し、TESTボタンを押す
アプリに表示されているB.iniを選択し、TESTボタンを押すという動作がしたいと思って作りました。
(今回はA.iniを選択しTESTボタンを押す部分のみ抜粋。Whileの部分をコピペするだけです)

A.iniが無い場合や、それより前のTESTフォルダ自体が無い場合もあります。

対象ファイルが無い場合は処理を飛ばしたいWhileを使っていますが
飛ばされることはありません。CLK_BTNまで実行してしまいます。
また、アプリが起動していてもリストビューが出るのにタイムラグがあることがあり
処理だけドンドンすすんでしまい、リストビューを開けていないのに
CLK_BTNを押してしまうことがあります。

Q1.リストビューに表示されるまで待つにはどうしたら良いでしょうか
Q2.BUSYでは判定できなかったため、3秒待ち無ければ処理を飛ばすにはどうしたらいいか
上記2点、分かりましたら教えて頂けないでしょうか。

id=GETID("テストアプリ","#32770",-1)
Sleep(1)

While HANTEI=TRUE
 KEYWORD=ITEMWAIT(id,CLK_LSTVIEW,"C:\",2)
  HANTEI=DATA_CLICK(id,KEYWORD)

  KEYWORD=ITEMWAIT(id,CLK_LSTVIEW,"Program Files",2)
  If KEYWORD="NODATA" then
   KEYWORD=ITEMWAIT(id,CLK_LSTVIEW,"Program Files(x86)",2)
  Endif
  HANTEI=DATA_CLICK(id,KEYWORD)

  KEYWORD=ITEMWAIT(id,CLK_LSTVIEW,"TEST",2)
  HANTEI=DATA_CLICK(id,KEYWORD)

  KEYWORD=ITEMWAIT(id,CLK_LSTVIEW,"A.ini",2)
  HANTEI=DATA_CLICK(id,KEYWORD)

  CLKITEM(id,"TEST",CLKBTN)
  break
WEND


FUNCTION DATA_CLICK(id,item)
RESULT=FALSE
  If item<> FALSE and item<>"NODATA" then
    CLKITEM(id,item,CLK_LSTVIEW,True)
    CLKITEM(id,item,CLK_LEFTCLK,True)
    CLKITEM(id,item,CLK_DBLCLK,True)
    RESULT=TRUE
  Endif
FEND

FUNCTION ITEMWAIT(id,kind,item,num)
  count=0
  While True
    Sleep(0.5)
    for n in GETITEM(id,kind,num)
       if n=item then
          RESULT=item
          exit
       Endif
       
       If count=3 then
         RESULT="NODATA"
         exit
       End if
    Next
    count=count+1
  Wend
FEND

No.4458 2017/09/22(Fri) 17:50:16

Re: アプリの指定ITEMが出るまで待ち、無い場合は終了したい / たんと
説明が分かりづらいでしょうか……
No.4468 2017/09/25(Mon) 10:12:17

Re: アプリの指定ITEMが出るまで待ち、無い場合は終了したい / stuncloud
> Q1.リストビューに表示されるまで待つにはどうしたら良いでしょうか
> Q2.BUSYでは判定できなかったため、3秒待ち無ければ処理を飛ばすにはどうしたらいいか


僕ならITEMWAITを以下のようにして

function ITEMWAIT(id, kind, item, num, wait = 3)
 limit = gettime() + wait // wait秒間見つからなかったらFALSE
 repeat
  // itemがクリック可能ならTRUE(クリック自体はしない)
  result = clkitem(id, item, kind, FALSE, num)
 until gettime() >= limit or result
fend

ITEMWAIT()を呼んでTRUEが返った場合は必要な処理を行いFALSEが返ったら処理をスキップ、とします

スキップに関してはどうスキップしたいのかが元のコードから読み取れないのでちょっとアドバイスできないです、すいません
HANTEIがFALSEになったらループをやめたい?みたいな感じだったのなら単にその都度
if ! HANTEI then break
すればOKです

ちなみにもともとのITEMWAIT関数でkindにCLK_*定数を渡してますけど、それを受けてるのがgetitem()なのがよくなかったんじゃないでしょうか…と思ったけどCLK_LSTVEWとITM_LSTVEWはたまたま値が一致するんですね
# ほんとは別の関数用の定数を使うのはぜったいダメ

No.4471 2017/09/26(Tue) 12:29:43

Re: アプリの指定ITEMが出るまで待ち、無い場合は終了したい / たんと
回答ありがとうございます。

HANTEIがFALSEになったらループから抜けたいのですが、
上手く行かなくて困ってました。
FALSEになったら抜けるために、WHILEループにしたのですが上手くいかず…。
書き方が悪いのかもしれません。

if ! HANTEI then break のようにすると
毎行書く必要が出て、ソースを読むのに苦労しそうだと思い
このような形になっています。現状でも読みづらいソースですけれど…。

>ちなみにもともとのITEMWAIT関数でkindにCLK_*定数を渡してますけど、それを受けてるのが>getitem()なのがよくなかったんじゃないでしょうか…と思ったけどCLK_LSTVEWとITM_LSTVEWはたま>たま値が一致するんですね
># ほんとは別の関数用の定数を使うのはぜったいダメ

ありがとうございます!
どうしようか迷った挙句、そのまま使ってしまいました。
他の適当な言葉?をあてるのがベストですよね!修正します!


頂いたソースを試してみましたが、
CLKITEMがされることもなく、単にBUTTUN?がカチカチカチカチ異常動作を繰り返すだけでした。
他の方法検討してみます。

No.4474 2017/09/27(Wed) 15:43:05

Re: アプリの指定ITEMが出るまで待ち、無い場合は終了したい / stuncloud
> if ! HANTEI then break のようにすると
> 毎行書く必要が出て、ソースを読むのに苦労しそうだと思い
> このような形になっています。現状でも読みづらいソースですけれど…。

毎回書かないと失敗したところで抜けられないのでめんどくさいですけど毎回書きましょう
さすがにこの状況だとあまりシュッとしたのは書けないので泥臭くやるしかないですね

あるいは、while内で似たような作業が多いので "Program Files" とか "A.ini" とかを処理する順番に配列に入れてforで回すというように書き直せば、毎回のHANTEIチェックもfor文内に1度書くだけで済みます

例:
if kindofos(TRUE) then
 // 64bitOS
 ProgramFiles = "Program Files(x86)"
else
 // 32bitOS
 ProgramFiles = "Program Files"
endif
dim items[] = "C:\", ProgramFiles, "TEST", "A.ini"

for item in items
 KEYWORD=ITEMWAIT(id,ITM_LSTVEW,item,2)
 HANTEI=DATA_CLICK(id,KEYWORD)
 if ! HANTEI then break
next
CLKITEM(id,"TEST",CLKBTN)

※ アイテム名がx86かどうかはkindofos(TRUE)で決め打ちにしてみましたが、対象の実装がわからないので適当です

> 頂いたソースを試してみましたが、
> CLKITEMがされることもなく、単にBUTTUN?がカチカチカチカチ異常動作を繰り返すだけでした。

ああ、だめでしたかごめんなさい
clkitemは第四引数をFALSE指定しているのでクリック動作しないのはいいのですが、異常動作についてはちょっと想定外ですね…
(まぁおおよそこんな感じなら動くだろうというコードだったので、対象アプリによってはうまくいかない可能性はありました)
ちなみに対象があるかどうか探す場合はgetitemで探すのが常套手段ではあるんですが、クリッカブルな場合はclkitemのほうが速いしコードも短いという理由でclkitemを採用しています
なのでclkitem部分はgetitemから探すように書き換えてもOKです
# キモは3秒過ぎてもダメならFALSEを返すという部分なので

No.4475 2017/09/27(Wed) 16:24:01

Re: アプリの指定ITEMが出るまで待ち、無い場合は終了したい / たんと
stuncloud様

再度回答頂きありがとうございました。
頂いたソースをもとに、自分のソースを変更したところ
上手く動くようになりました!

教えて頂いたソースをみたら、CLKITEMの戻り値を利用していることに気づき(今更ですが)
戻り値になるように設定したら上手く動きました。初歩的なことで申し訳ありませんでした。

また、clkitem様の言うようにCLKITEMで確認したほうがソースも短くなるし
読みやすくなるし…良いことばかりのような気がするので、CLKITEMだけに統一します!

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

No.4493 2017/10/02(Mon) 14:35:41
ログファイルを分けて保存したい / kuma
AのデータはログファイルAに
BのデータはログファイルBに
というふうに分けてログを保存したいです
方法ありますでしょうか

No.4490 2017/10/02(Mon) 09:01:01

Re: ログファイルを分けて保存したい / 森
以前私が同じような質問をしていますので、過去ログ No.4242 が参考になると思います。
No.4492 2017/10/02(Mon) 12:10:26
マウスクリックの制動について / ぬかみそ
マウスの動作についてお聞きしたい事があります
ランダムに指定した位置をクリックをする、そのクリック間の時間をランダムにしたいのですが上手く出来ません。

BTN(LEFT,CLICK,X + random(10),Y + random(10)、100)

これだと位置はランダムにクリックしてくれるのですがクリックの間の動作をいじれませんよね?

BTN(LEFT,DOWN,X + random(10),Y + random(10)、100+random(100))
BTN(LEFT,UP,X + random(10),Y + random(10)、100+random(100))

しかしこれでは、UPとDOWNでカーソル位置がずれてしまいます。
DOWNした時の位置にUPを追従させる方法
または改善策がありましたら宜しくお願い致します。

No.4477 2017/09/29(Fri) 20:24:39

Re: マウスクリックの制動について / 森
質問本文からは、クリック間の時間=クリックとクリックの間隔と読み取れ、
スクリプトからは、クリックしている時間の長さのように読み取れますが、
実際にやりたいことはどちらでしょうか。

// ランダムな座標をランダムな間隔で10回クリック
for i = 1 to 10
 btn(left , click , random(100) , random(100))
 sleep(random(10))
next

// ランダムな座標をランダムな長さで10回クリック
for i = 1 to 10
 btn(left , down , random(100) , random(100))
 sleep(random(10))
 btn(left , up )
next

No.4491 2017/10/02(Mon) 11:59:02
BTNコマンド実行後、画面がオフになる / Haze
DELLのvostro14、Windows10ProでUSWSを使っているのですが、
BTNコマンドで、左クリックを実行するたびに、
画面がオフになり、画面が付いたり消えたりしてしまいます。
何とか解決できないでしょうか?

No.4480 2017/09/30(Sat) 15:37:02
外部DLLがポインタ指定になっている / K-1
Memory.DLLというメモリを直接読むDLLを使って、他プロセス上のメモリを読みたいと思いますがうまくいきません。

DEF_DLL DReadMemory64(HWND, dword, longlong var, dword):int:Memory.dll
のような宣言で第3パラメータの示すアドレスに返り値が入ってくるので、

Dim aaaa
win_id = GETID("たいとる")
ret = DReadMemory(win_id, $10000000, aaaa, 4)
としました。
aaaaに4バイトの値が入っているのを期待したのですが、どうもそれらしい値が入っていません。

アドレスが合っているとかは確認しますが、Memory.DLLに与えるポインタ返しの書き方はこれで問題ないでしょうか?

No.4479 2017/09/30(Sat) 09:22:35
ボタン類での条件分岐 / 金ちゃん
Firefoxでサイトを読み込んで、ITM_LINKやITM_BTNで条件分岐をしたいのですが、どのような方法がありますか?
(画像を読み込むのが非常に遅い為、リンクで条件分岐したい)
画像の場合は下記の様に出来ますが、ボタン類はどうやるのでしょうか?
IFB CHKIMG("000.bmp")
ELSE
ENDIF

CHKBTN関数ではリンクボタン等は上手く動作しませんでした。

よろしくお願いします。

No.4478 2017/09/29(Fri) 22:43:47
recIEでyahooトップページが崩れる / ほえほえ
お世話になります。
RecIeでyahooJapanのトップページ(https://www.yahoo.co.jp/)を開くと崩れます。
本来あるはずの押したいリンクも表示されません。
設定によって直るのであればアドバイス頂けると助かります。
よろしくお願い致します。
RecIe Ver 2.3.0.0

No.4459 2017/09/22(Fri) 19:28:21

Re: recIEでyahooトップページが崩れる / umiumi
「設定」->「レンダリング・モード」にて "IE11" を選択してください。
No.4464 2017/09/23(Sat) 22:39:34

Re: recIEでyahooトップページが崩れる / ほえほえ
直りました^^
お忙しいところありがとうございました。

No.4476 2017/09/29(Fri) 18:31:06
XLCLOSEの後だと、配列の内容が読み取れない / sen
いつもお世話になっております。
XLCLOSEの後だと、配列の内容が読み取れないのです。
実際には、もう一つエクセルファイルを開いて、そこに転記したいので、
このファイルは一度、綴じたいのです。
ご教授願いませんでしょうか。


dim 担当別累計注残[1][20]
Excel = GETACTIVEOLEOBJ("Excel.Application")

With Excel.ActiveSheet
  FOR t = 1 to 50
   if copy(.Cells(4,t).value,6,3) = "/02" then break
  next
  ifb t > 0 then
   for p = t to 100
    .Columns(t).Delete
   next
  endif

  For i = 0 To 11
   .cells(1,i+1).ColumnWidth = 10
   .Rows(7 + i * 3).Insert
   .Rows(7 + i * 3).NumberFormatLocal = "#,###"
   .Cells(7 + i * 3, 2) = "累計"
   .Cells(7 + i * 3, 3) = .Cells(5 + i * 3, 3) + .Cells(6 + i * 3, 3)
   .Cells(7 + i * 3, 2).Interior.Color = 13434879
   .Cells(7 + i * 3, 3).Interior.Color = 13434879
    For p = 0 To t-1-4
      .Cells(7 + i * 3, 4 + p) = .Cells(5 + i * 3, 4 + p) + .Cells(6 + i * 3, 4 + p) + .Cells(7 + i * 3, 3 + p)
      .Cells(7 + i * 3, 4 + p).Interior.Color = 13434879
    Next
   担当別累計注残[1][i] = .Cells(7 + i * 3, t-1)
   担当別累計注残[0][i] = .Cells(5 + i * 3, 1)
   .Range(.Cells(5 + i * 3, 1), .Cells(7 + i * 3, 1)).Merge
   print "i="+i+ 担当別累計注残[0][i] +"="+ 担当別累計注残[1][i]
  Next
EndWith

print "◎"+ 担当別累計注残[0][2]+担当別累計注残[1][2]

XLCLOSE(Excel,TRUE)

print "×"+ 担当別累計注残[0][2]+担当別累計注残[1][2]

No.4470 2017/09/25(Mon) 21:16:51

Re: XLCLOSEの後だと、配列の内容が読み取れない / stuncloud
> 担当別累計注残[1][i] = .Cells(7 + i * 3, t-1)
> 担当別累計注残[0][i] = .Cells(5 + i * 3, 1)

変数にオブジェクト入れちゃってるからじゃないでしょうか
値だけほしいなら確かvalueプロパティかなんかがあったはずなので

担当別累計注残[1][i] = .Cells(7 + i * 3, t-1).value

とすれば大丈夫じゃないかと思います
# もしかしたらvalueじゃないかもしれないけど、値だけ取り出す方法はあるのでそれでやってみてください

No.4472 2017/09/26(Tue) 13:42:11

Re: XLCLOSEの後だと、配列の内容が読み取れない / sen
うまく動きました。
XLCLOSEの前だとうまく読み出せるので、思いもよりませんでした。

気を付けたいと思います。
ありがとうございました。

No.4473 2017/09/26(Tue) 21:56:44


 過去ログ(〜2017/08/24)・検索ツール


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