[ 掲示板に戻る ]

過去ログ閲覧モード

morg direct時のctrlの挙動について / ctrl
BTNやKBDが正常に機能していますが、ctrldown時の挙動について、ほかのウインドウに影響が出てきます。
同じようなかたいませんでしょうか?

No.4522 2017/10/06(Fri) 23:53:30
イラスト画像表示させて吹き出しコメントを付けるには / もみもみ
素人ですいません。
キャラクタ画像を表示させて 表示させたキャラクタがしゃべっているような吹き出しコメントを付けるには
どうすればよいでしょうか?参考のスクリプトがあれば教えていただきたいです。
宜しくお願いします。

No.4498 2017/10/02(Mon) 22:35:54

Re: イラスト画像表示させて吹き出しコメントを付けるには / しゅん
結構難儀なことを書かれています。
また、詳細な仕様がわからないため、回答も難しいです。
何か書いたところで、そうではない、とあっさり言われそうで答え難いです。
(回答を書くのも労力がいるのですが、見当違いで無駄になるととても悲しいです)
また本来なら、自分で書かれたスクリプトのない質問には答えない主義ですが、なんとなく参考までに書いてみました。
http://d.hatena.ne.jp/junjun777/20171004/uwsc_powershell_bmp_balloon

なお、素人かどうかは私の興味の範囲外です。

No.4513 2017/10/04(Wed) 19:11:01

Re: イラスト画像表示させて吹き出しコメントを付けるには / もみもみ
回答ありがとうございます。
素人にはどうにもできなかったので助かりました。

No.4520 2017/10/06(Fri) 19:53:21
uwsc初心者です^^ / かわうそくん
UWSCで初めてプログラムをつくってみたのですがエラーが出てしまいます。


つくりたいプログラムは、
無限ループで、


@ Aという画像が出たらBをクリックする

※ 本当は、Aという画像が出たらB、C、Dのどれかがあればクリックするというプログラムにしたかったので、


複数の画像のうちどれかがあれば…の場合も教えていただけるととてもとても嬉しいです。



While Trueと、Wendの間にこの命令を入れて走らせようとするとエラーが出てしまいます。

それがどうしてなのかがわかりませんでした。



つくりたいプログラムは、


While True


  If ChkImg("画像X") Then Btn(Left,Click,G_IMG_X,G_IMG_Y)
    EndIf
  Sleep(1)


※ 最初に、Xという画像の時にクリック この処理は1回のみ。



その次にしたい処理が、

Aという画像の時にBをクリックする です。



  Ifb ChkImg("画像A")
    Sleep(1)
    Ifb ChkImg("画像B")
      Btn(Left,Click,G_IMG_X,G_IMG_Y)

    EndIf



その次に、最初のXの時と同じ画像が出たらそれをクリックです。


  If ChkImg("画像E") Then Btn(Left,Click,G_IMG_X,G_IMG_Y)
    EndIf
  Sleep(1)


  If ChkImg("画像F") Then Btn(Left,Click,G_IMG_X,G_IMG_Y)
    EndIf
  Sleep(1)


  If ChkImg("画像G") Then Btn(Left,Click,G_IMG_X,G_IMG_Y)
    EndIf
  Sleep(1)


※ これはオンマウスでテキストリンクの色が変わるHTMLタグをクリックしたいので、EまたはFの時にクリックという命令のやりかたがわかるととてもとても嬉しいです。



Wend


※ このプログラムはループするまでにどれも1回処理(成功)したら、次のループまで命令をくり返し動かす必要がないので、処理したら次のループまで休けいさせるという命令がわかればそれを入れたいと思っています。


教えて、おしえてばかりで本当にすみません。


私なりに色々しらべてつくってみたのですがどうしてもわからないことばかりで、教えていただけると幸いです。


よろしくお願い致します。

No.4514 2017/10/05(Thu) 08:39:44

Re: uwsc初心者です^^ / stuncloud
今まで同様の質問を何度も見かけたので過去ログにあるんじゃないかと思います
普段なら答えの(あるいは答えに近いと予想される)スクリプトを提示して終わりなんですけどちょっと思うとこあったのでやめますね
というか多分これゲームの話ですよね、だとしたらほんとは門前払いなんだよ

> @ Aという画像が出たらBをクリックする
> ※ 本当は、Aという画像が出たらB、C、Dのどれかがあればクリックするというプログラムにしたかったので、
> 複数の画像のうちどれかがあれば…の場合も教えていただけるととてもとても嬉しいです。


まずは「Aという画像が出たらBをクリック」だけに焦点を当ててそれだけをやってみましょう
if(ifb)の書き方はわかっているようなので、ここはすぐできるようになると思います

次に、「B、C、Dのどれかがあればクリック」だけをやってみましょう
これも単純にifを3つ並べればいいような気もします
B、C、Dのうち複数が存在し一つだけクリックしたい場合を考慮しなければならないとなるとちょっとむずかしくなるかも
# それはそれとしてなんとなく
# OPTION SHORTCIRCUIT
# if chkimg("B") or chkimg("C") or chkimg("D") then
# というのが思い浮かんだけどこれならG_IMG_*にいい感じに収まりませんかね

> While Trueと、Wendの間にこの命令を入れて走らせようとするとエラーが出てしまいます。
> それがどうしてなのかがわかりませんでした。


どんなエラーが出たか書いてもらわないと僕らもわかりません

> ※ これはオンマウスでテキストリンクの色が変わるHTMLタグをクリックしたいので、EまたはFの時にクリックという命令のやりかたがわかるととてもとても嬉しいです。
こういう唐突に要求を上げてくる感じが素敵ですね
色が変わったHTMLタグの画像を用意しておいてchkimgでいいんじゃないでしょうか
「EまたはFの時にクリック」は「Aという画像が出たらBをクリック」の応用なのでちょっと考えてみてください

> ※ このプログラムはループするまでにどれも1回処理(成功)したら、次のループまで命令をくり返し動かす必要がないので、処理したら次のループまで休けいさせるという命令がわかればそれを入れたいと思っています。
次のループまでもう一個ループを挟めば良いです
次のループの開始が画像Xを探すところという話なら、画像Xが見つかるまでループさせます
repeat-untilが良いでしょう

> 私なりに色々しらべてつくってみたのですがどうしてもわからないことばかりで、教えていただけると幸いです。
そういう場合は調べた内容とわからなかったことについて質問されると良いです
全体の流れはこうですが、自分では書き方がわかりませんでしたどうしたらいいですか、という質問は要件を元にコード全部書いてくださいと言ってるようなものです
それは質問ではなくコード作成依頼です

> 教えて、おしえてばかりで本当にすみません。
まったくです
とりあえず質問に回答する体でこちらもなんとかがんばってみたので、かわうそくんさんもがんばってコードを書いてみてください
とにかく先ずは書いて書いて書いて試行錯誤を繰り返しましょう
あと過去ログ見ましょう、ヒントがいっぱいありますよ

No.4516 2017/10/05(Thu) 11:54:46

Re: uwsc初心者です^^ / かわうそくん
stuncloudさん回答ありがとうございます。


ヒントに、この命令はどこかでみたことが、おおう、おおうと思いました。


検索だとヤフー知恵袋などにとばされてしまうばかりだったのですが、そうかと過去ログのほうこれから読んで勉強してみたいみたいと思います。

イメージしていたプログラムが書けるよう頑張ります。

最初に質問したところでは放置され5日…回答をつけていただけてとてもとても嬉しかったです。

本当にありがとうございます。

No.4518 2017/10/05(Thu) 16:16:28
IEで特定タブ以外のタブを閉じたい / にゃんこ
IEは複数のウィンドウが開かれており、またその中で複数のタブが開かれているとします。
このなかで、特定タブを一つだけ残して閉じたいと思います。
このタブの名称がABCDEとします。
下記のプログラムまで作ってみたのですが、一つだけタブを閉じる処理の書き方を教えてください。
よろしくお願いいたします。

sh=CREATEOLEOBJ("Shell.Application")
FOR k=0 TO sh.Windows.Count-1
IFb pos("ABCDE",sh.Windows.Item[k].document.title) <= 0 then
一つだけタブを閉じる処理
ENDIF
NEXT

No.4504 2017/10/04(Wed) 13:29:06

Re: IEで特定タブ以外のタブを閉じたい / にゃんこ
すみません
意図せず文字色変えてしまいました

No.4505 2017/10/04(Wed) 13:31:28

Re: IEで特定タブ以外のタブを閉じたい / しろまさ
// 最近似たような質問が・・ http://www3.rocketbbs.com/13/bbs.cgi?id=umiumi&mode=pickup&no=4442

// エラー処理入れた方が良いですよ。
Dim i, sh = CREATEOLEOBJ("Shell.Application"), wi = sh.Windows, IE
For i = 0  To wi.Count - 1
  Ifb wi.Item[i] > 0
    Ifb wi.Item[i].Name = "Internet Explorer"
      IE  = wi.Item[i]
      Ifb pos("ABCDE",IE.document.title) <= 0 then
        IE.ExecWB(45, 0)
      EndIf
    EndIf
  EndIf
Next

No.4508 2017/10/04(Wed) 17:31:21

Re: IEで特定タブ以外のタブを閉じたい / にゃんこ
回答ありがとうございます。
下記の動作が発生しますがなぜでしょう?

@4つ以上タブを作ると、閉じ忘れが必ず出る

Aたまにエラーが出る
COM ERROR ACCESS VALATION AT ADRESS 006AFD5 IN MODULE "UWSC.EXE",READ OF ADDRESS 00000000
6行目 Ifb pos("ABCDE",IE.document.title) <= 0 then

No.4512 2017/10/04(Wed) 18:45:47

Re: IEで特定タブ以外のタブを閉じたい / しろまさ
// @ 消すと減るようなので逆順で回避
// A IE.documentでアドレスエラー? 原因不明なのでTryで回避
// 以下、修正版

Dim i, sh = CreateOleObj("Shell.Application"), wi = sh.Windows, IE
For i = wi.Count - 1  To 0  Step -1
  Try
    IE  = wi.Item[i]
    Ifb pos("ABCDE", IE.document.title) <= 0 then
      IE.ExecWB(45, 0)
    EndIf
  Except
  EndTry
Next

No.4515 2017/10/05(Thu) 08:58:56

Re: IEで特定タブ以外のタブを閉じたい / にゃんこ
完璧に動作できました。

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

No.4517 2017/10/05(Thu) 15:29:11
CALLの使用方法 / はる
CALLを使ってよく使うような関数を分けたいのですが、使用方法が良くわかってなく
以下のようなエラーが出ています。

何が悪いのか、どのような方法で使用すれば良いのか教えていただけますでしょうか。
CLASSを使用しないで1つのファイルに書き直せば動いています。
よろしくお願い致します。

○エラーの内容
SyntaxError(FReLoad):Duplicates not allowed EXCEPT

○プログラム

CALL "RegExpProc.uws"

if (RegExpProc.regvb_Length("ABCDEFG","^ABC") > 0) then MSGBOX ("OK")


○CALLのファイル "RegExpProc.uws"

//正規表現
CLASS RegExpProc
//正規表現の実行にエラーがでてしまうためTRYで例外処理しています

Function regvb_Length(str, Pattern)
Dim regvb = CreateOLEObj("VBScript.RegExp")
Dim cRegPtn
Dim Matches
regvb.IgnoreCase = FALSE
regvb.Global = FALSE
regvb.Pattern = Pattern
Matches = regvb.Execute(str)
TRY
Result = Matches.Item(0).Length
EXCEPT
ENDTRY
Fend

//Matches.Value
Function regvb_Value(str, Pattern)
Dim regvb = CreateOLEObj("VBScript.RegExp")
Dim cRegPtn
Dim Matches
regvb.IgnoreCase = FALSE
regvb.Global = FALSE
regvb.Pattern = Pattern
Matches = regvb.Execute(str)
TRY
Result = Matches.Item(0).Value
EXCEPT
ENDTRY
Fend

//FirstIndex
Function regvb_FirstIndex(str, Pattern)
Dim regvb = CreateOLEObj("VBScript.RegExp")
Dim cRegPtn
Dim Matches
regvb.IgnoreCase = FALSE
regvb.Global = FALSE
regvb.Pattern = Pattern
Matches = regvb.Execute(str)
TRY
Result = Matches.Item(0).FirstIndex
EXCEPT
ENDTRY
Fend

//TEST
Function regvb_TEST(str, Pattern)
Dim regvb = CreateOLEObj("VBScript.RegExp")
Dim cRegPtn
Dim Matches
regvb.IgnoreCase = FALSE
regvb.Global = FALSE
regvb.Pattern = Pattern
TRY
Result = regvb.TEST(str)
EXCEPT
EBDTRY
Fend

ENDCLASS

No.4506 2017/10/04(Wed) 16:03:26

Re: CALLの使用方法 / しろまさ
最後のほうの EBDTRY はとりあえずダメそう。
No.4507 2017/10/04(Wed) 17:26:49

Re: CALLの使用方法 / stuncloud
最後のENDTRYがEBDTRYになってる以外問題なさそうですが、そこを直せば正常に動作しますね
> SyntaxError(FReLoad):Duplicates not allowed EXCEPT
も再現できないです

No.4509 2017/10/04(Wed) 17:37:18

Re: CALLの使用方法 / stuncloud
いろいろ書きなぐってるうちに見つけたんですが

try
 // 1
 try
  // 2
 except
  // 2のエラーはここに来る
except
 // 1のエラーはここ
 endtry // 1のエラーのときは無視される?
 // 1の続き
endtry

こう書いた場合、正しく入れ子になっていないけどシンタックスエラーにはなりませんね

No.4510 2017/10/04(Wed) 17:52:49

Re: CALLの使用方法 / はる
ありがとうございます。
お恥ずかしいw
とりあえずエラーは消えたのでこのまま行きます。
助かりました。ありがとうございました。

No.4511 2017/10/04(Wed) 18:02:31
ダイアログが閉じない / Bone
スケジュール設定のタイマー設定に"指定Windowsが現れた時"を選択し、Titleに"警告"を指定、スクリプトにはOK.uwsとして、OK.uwsは以下のように記述してます。

Print "警告検知"
ifb CLKITEM( GETID("警告"), "OK", CLK_BTN )
Print "成功"
else
Print "失敗"
endif

目的のソフトが警告ダイアログを表示すると動作し、

警告検知
成功

と表示はされるのですが、そのダイアログが閉じません。本来"OK"ボタンが押されてダイアログが閉じる筈なのですが、何が悪いのでしょうか?

No.4501 2017/10/03(Tue) 17:24:08

Re: ダイアログが閉じない / Bone
FAQを眺めていて気になって実行レベル(UAC)を合わせたら無事に動きました。
No.4502 2017/10/03(Tue) 19:06:12
時間計算さんについて / はる
ゲームの中の時間を表示させてみたくて、以下のように真似てみたんですが
どうにも動きません、

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
全1137件 [ ページ : << 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 114 >> ]