12/11/06 23:23:16.06 qBMVUonl0
ERRなのですか・・・
プログラム中でその様な値となるので、画像の検索用のプログラムで複数回調べるときちんと値は入っていました
ERR_VALUEとFALSEは一緒の事ですよね?
147:名無しさん@お腹いっぱい。
12/11/07 01:14:16.44 LH3dgIzB0
chkimg()の返値がFalse
だから、座標に-99999が格納される仕様なんじゃないの?
148:名無しさん@お腹いっぱい。
12/11/07 01:22:00.92 yDDBvlpr0
>>146
検索用とやらで座標取得できてるなら本スクリプトに何か問題があるんでしょ
情報が少なすぎるし晒してみなよ
149:名無しさん@お腹いっぱい。
12/11/07 11:24:00.24 geuBrNDN0
関数内でchkimgして呼び出し元でG_IMG_X/Y使おうとしてるとか
150:名無しさん@お腹いっぱい。
12/11/07 12:32:38.75 HPKwSu8nP
原始的だけど、カーソル移動やクリックの動作の直前に
fukidasiやprintで座標出してみるといいかも。
どこで躓いてるかすぐわかる。
151:名無しさん@お腹いっぱい。
12/11/10 13:38:19.95 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
152:名無しさん@お腹いっぱい。
12/11/10 14:14:57.93 U37qm/mfP
どこから突っ込んでいいのかわからない・・・
とりあえずIFB ○○ = ○ = ○なんて判定の仕方はない
IFB ○○ = ○ and ○○ = ○ なら使える
判定が鶴亀とかいうツールがアクティブの時のみだけどそれ以外の時に変化があるのでは?
WHILE TRUEに対してのWENDがないけどスクリプトの一部?というか無限ループの中に無限ループ?
BTN(LEFT,CLICK) ってどこクリックさせてるの?
G_MOUSE_X y1 いきなり知らない変数出てきてるけどこれ何w
Open(FileName :="C:\turukame\turukame.exe")ってすでにアクティブウィンドウの時の判定なんだから開いてるんじゃないの?
153:名無しさん@お腹いっぱい。
12/11/10 15:18:06.98 sJ45IC2r0
>>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 なのかを判断すべきなんじゃ・・・
154:名無しさん@お腹いっぱい。
12/11/10 15:29:11.11 U37qm/mfP
そもそもマウスカーソルの位置を監視する意味っていうのがわからないなぁ
画像のチェックで変化を監視するなら画像のチェック>変化があったらその場所をクリック(ツールを開く?)だけでいいと思うし
155:名無しさん@お腹いっぱい。
12/11/10 15:37:26.78 3rzXavYu0
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で保存
156:名無しさん@お腹いっぱい。
12/11/10 17:00:59.72 4gaPkaDwP
>>151
試しに同じ動作のものを書いてみようとしたが、意外にいい線いってるかもしれん。
常駐時の通常アイコンが画面内になく、なおかつアクティブウインドウが秀丸でなければ
秀丸メールを実行したいんだよね?
その考え方を生かすなら、ヒントとしては
>GETID("turukame.exe")
そこはプログラムの実行ファイル名じゃなくて、ウインドウのタイトル(一部でもOK)。
ちゃんとバージョンアップしてるなら GETID("秀丸メール")
あと、秀丸は確かに、既に起動していて常駐の状態でも実行ファイルを再度実行することアクティブになる。
exeファイルの実行はこちらの関数。
EXEC("C:\turukame\turukame.exe")
あと、ifbじゃなくてIF
while trueじゃなくて、while chkimg~ですっきりするかも
whileの中にIFを使って、IFの条件に合う場合はまたwhileのループに戻る方法はこちら
URLリンク(canal22.org)
IFの処理内容にCONTINUE。
157:名無しさん@お腹いっぱい。
12/11/10 19:48:54.06 sJ45IC2r0
>>156
while chkimg~ だとsleep入らないからマズイよ
それと、ifbは旧バージョンからのなごり。(ブロック形式のIF文) 現在ではifでもよい
158:名無しさん@お腹いっぱい。
12/11/10 21:02:21.69 U37qm/mfP
ブロックIF文の時のENDIF忘れの防止にもなるからいまだにIFB使ってるわ
159:名無しさん@お腹いっぱい。
12/11/10 23:12:16.03 e71uMGpA0
ifb=ifになったんだっけ
既存のものの書き換えで済むものしかいじってないから未だにifb使ってるけど
160:名無しさん@お腹いっぱい。
12/11/11 00:16:42.86 cbDQkjay0
>>157
一行じゃなくブロックの場合はIFBって認識だったけど
いつの間にか変わったんだねw
質問主がやろうとしたのは恐らく
while chkimg~
sleep(1)
IF アクティブういんどーID = 秀丸エディタID こんてぃにゅー
wend
EXEC 秀丸メール
的な。
このままじゃ一度新着メールが来てループを抜けると終わってしまうから
さらにこれを囲って、何らかの条件でループさせる必要があるけど。
161:名無しさん@お腹いっぱい。
12/11/11 01:13:09.68 PeXm1Xpu0
一行の時はif、複数行の時はifbって使い分けてる
162:名無しさん@お腹いっぱい。
12/11/11 12:27:22.49 EIVMwjIa0
call文で戻り値を取得したり、引数を参照渡しにしたりすることはできますかね
関数に収めるにはずいぶんと長くなってきたのでcallで呼び出そうと思ったら関数と同じようにはいかなかったよ・・・orz
値をいったんcsvとかに保存する案を思いついたんですが、もっとスマートにいかないでしょうか
あと上記について調べていると、
「関数はFUNCTIONS.UWSにまとめ、Call関数で呼び出すとスッキリ」
というのを某サイトで見たんですが、どういう使い方をすれば関数をまとめれるんでしょうか
PARAM_STRに数字を入れて、select文ぐらいしか思いつかなかった・・・
163:名無しさん@お腹いっぱい。
12/11/11 12:39:21.73 W2O3Etlh0
functions.uwsに関数定義しておいて
callしたあとに呼び出すだけでおk
164:名無しさん@お腹いっぱい。
12/11/11 12:47:21.71 EIVMwjIa0
こ、こいつはすげえ
スマートでスッキリしました 早い返答ありがとうございました
165:名無しさん@お腹いっぱい。
12/11/11 12:49:23.73 W2O3Etlh0
言葉が不足
callしたあとに通常の関数と同じように呼び出せばいい
で、今試したら関数呼び出すところより後ろでcallしても問題なかった
個人的には気分的に関数集は頭で呼び出すけど
166:名無しさん@お腹いっぱい。
12/11/11 14:49:39.77 yiBbj4pQ0
俺の場合、関数も多くなりすぎたので、
C言語に倣って、ヘッダファイル的なものを導入した。
・メイン.uwsがヘッダ.uwsをcall
・ヘッダ.wsが複数のライブラリ.uwsをcall
これで、メインからライブラリの関数を使用出来る。
167:名無しさん@お腹いっぱい。
12/11/11 21:15:28.00 EIVMwjIa0
またまた質問ですorz とあるファイルを初期化する処理を、
ID=FOPEN("a.csv",F_WRITE)
FCLOSE(ID)
ID=FOPEN("a.csv",F_READ or F_WRITE)
と行っていたんですが、何度も行うと開けるファイルの最大数エラーで落ちてしまいます
代替策としてFPUT(ID,"")を考えたのですが、処理が違うのか、同じように動いてくれません
別の方法や上記二つの違いなどがわかる方がいればお願いします
168:名無しさん@お腹いっぱい。
12/11/11 21:47:09.88 pqupsn940
>>167
>ID=FOPEN("a.csv",F_READ or F_WRITE)
に対する fclose() が無いだけとか?
169:名無しさん@お腹いっぱい。
12/11/11 21:47:25.87 nEYrXvAJ0
FPUT(ID,"",F_ALLTEXT)
170:名無しさん@お腹いっぱい。
12/11/11 22:23:30.37 EIVMwjIa0
>>168
そういえばそうだ・・・ 最初の2行で閉じる処理含めてると思ってた
が、全然そんなことはなかった よくよく考えるとただの凡ミスでしたorz
>>169
こんな便利なものもあるんですね お手軽そうなのでこちらと入れ替えてみます
お二人とも助言ありがとうございました
171:名無しさん@お腹いっぱい。
12/11/11 22:31:23.36 ZZM82fps0
FPUT(ID,"")だと、文字列""をファイルの最後に追記
FPUT(ID,"",F_ALLTEXT)だと、ファイル内容全体を文字列""に置き換え
172:名無しさん@お腹いっぱい。
12/11/12 02:54:41.06 OlDOm8Fh0
2012/11/12 UWSC Ver4.8c、 Pro版と Free版をリリースしました。
173:名無しさん@お腹いっぱい。
12/11/12 06:39:25.63 wpgyrI0S0
DOSCMD関数にてマルチ行の実行を出来るようにした
他はバグの修正っぽい感じだがこれかなり使いやすくなるな
174:名無しさん@お腹いっぱい。
12/11/13 09:14:04.79 /2/KNnBu0
新バージョン出たようだな
URLリンク(www.uwsc.info)
[Ver4.8c]
uwsc.exeに引数で UNICODE文字を渡せなかったのを修正
ループの中で DIM宣言の配列サイズを増やした時にエラーになるのを修正
SENDSTR関数の追加モードにてサイズが大きいと遅いのを修正
FUKIDASI関数にて ちらつくパターンがあるのを修正
LockHard(True)実行中にコンテキストメニュのクリックが出来なかったのを修正
IESETDATA関数にてSELECTの変更でダイアログが出た時にスレッドでの処理が出来なかったのを修正
CLKITEM関数にて種別を省略したデフォルト処理で ClK_ACCも処理するようにした
DOSCMD関数にて出力が ANSIだったのを UNICODEでの出力も出来るようにした
DOSCMD関数にてマルチ行の実行を出来るようにした
Pro版:
CREATEFORM関数を使用すると桁数の大きい小数点演算で値が変になるパターンがあるのを修正
Debugger: フォントのサイズ変更後にペースト処理にて表示が崩れる事があるのを修正
Uws2Exe: バージョン情報の書き込みを出来るようにした
175:名無しさん@お腹いっぱい。
12/11/17 09:31:48.50 02OswU310
すいません
gettimeで出力する時間を
35分とか40分みたいに現在から一番近い時間に設定することは可能ですか?
今から31分だから35分 みたいな感じで出来ると便利ですが
176:名無しさん@お腹いっぱい。
12/11/17 09:57:30.32 02OswU310
5分毎の時間って意味です
177:名無しさん@お腹いっぱい。
12/11/17 10:08:33.80 DD725hiA0
算数の知識を試してるのか
178:名無しさん@お腹いっぱい。
12/11/17 10:18:44.44 yBBowb8E0
取得した分を5で割って余りが0以外ならその値に1プラスして5をかける
179:名無しさん@お腹いっぱい。
12/11/17 10:21:48.88 yBBowb8E0
なんか分かりにくい日本語になってしまった気がしないでもないけど気にしない
180:名無しさん@お腹いっぱい。
12/11/17 10:37:18.66 fccdun/F0
>>175-176
何がやりたいのか自分でもわかってない
やりたいことをきちんとした文章で表現できてない。
要求仕様を日本語で正しく表現できれば、
後はそれをプログラミングするだけの簡単な内容だよ。
算数も小学校レベルでOK
181:名無しさん@お腹いっぱい。
12/11/17 10:46:01.36 03ErtcdC0
要するに、5分刻みで切り上げたいだけ?
182:名無しさん@お腹いっぱい。
12/11/17 10:58:41.85 os6AsipL0
>>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:名無しさん@お腹いっぱい。
12/11/17 11:03:48.95 02OswU310
>>182
ありがとう
184:名無しさん@お腹いっぱい。
12/11/17 11:30:27.01 os6AsipL0
>>183
ごめん凡ミス。きっちり5分後だとまずいんだった。最初の行は…
GetTime((60 * 5 - 0.01) / (60 * 60 * 24)) //約5分後の時刻を得る
185:名無しさん@お腹いっぱい。
12/11/17 11:58:49.54 4ErzmqGgP
一番近い時間とか計算で出すよりも実行フラグ作ってフラグが立ってる時のみG_TIME_NN MOD 5 なら実行とかした方が楽じゃね?
186:名無しさん@お腹いっぱい。
12/11/18 18:43:07.61 Va2B+ONc0
画像を開くにはどうすればいいですか?