|
Ver3.0.3 Free版をWin7(32bit)で使っていますが 何点か不具合と思われる現象が出ていますのでご報告します
いずれも回避策などで対処していますので致命傷というわけではありません もしかしたら使い方の問題というのもあるのかもしれません
1. OPTION LOGPATH でログファイルを指定したとき作成されるファイルの タイムスタンプが動作時の日時になっていない (デフォルトのUWSC.LOGの場合はきちんと反映されている様)
2. SAVEIMGでBMPファイル作成しているが1と同様に作成日時が 正常でないものが出来上がることがある ※ 事があると書いたのは正常な日時で作成されているものもある為 (ファイル名などの問題?)
3. プログラム中で SHFY+Aは処理A SHFY+Bは処理B・・・・ を行おうとして WHILE TRUE
MOUSEORG(ID[n], MORG_CLIENT, MORG_BACK) IF GETKEYSTATE(VK_SHIFT) IF GETKEYSTATE(VK_A) 処置A ENDIF
IF GETKEYSTATE(VK_B) 処置B ENDIF ENDIF
n=n+1
SLEEP(0.1) WEND
といった処理を行っているが Aキークリックの数秒後 SHIFTクリックしている(同時押しではない)のに処理 Aが動くことがある
以下の事が出来ないか悩んでいます いい方法あるでしょうか
1. プログラム(=スクリプト)でのマウス制御がユーザ操作や 他のプログラムのマウス制御に干渉されて誤動作する(正常動作しない)事を防ぎたい
当たり前ですがプログラム実行中にユーザがマウスを操作しなければ 問題は起こりませんし1本しかプログラムを動かさないのであれば問題はありません
現状以下のような方法でINIファイルを書き換えてロックをかける方法をとっていますが 100%確実な方法とはなりえていません キーボード・マウス操作不可にして1秒後に実動作させるようにしているが それでも時々誤動作している Windowsのメッセージキューの関係もあるのだろうとは思っていますが
マクロをまとめて一つにするるのは作成時期が別々のため困難な状況です
メイン処理で以下の sample関数を繰り返す
PROCEDURE sample() InterLock = READINI("SYSTEM", "LOCK", GET_UWSC_DIR + "\UWSC.INI") if (InterLock = TRUE) EXIT
InterLock = TRUE WRITEINI("SYSTEM", "LOCK", InterLock, GET_UWSC_DIR + "\UWSC.INI")
LOCKHARDEX(0)
SLEEP(1)
実処理(マウス制御処理やウインドウ切り替え操作など各種処理)
LOCKHARDEX()
InterLock = FALSE WRITEINI("SYSTEM", "LOCK", InterLock, GET_UWSC_DIR + "\UWSC.INI") FEND
|
No.391 2014/11/09(Sun) 08:51:46
|
☆ Re: 不義愛報告 と 質問 / 竜田 |
|
No.395 2014/11/09(Sun) 22:56:57
|
|
☆ Re: 不義愛報告 と 質問 / koi |
|
|
>念のため最新の5.0.3を使って見てください それ使ってるんだけど と思ってよく見たら 3.0.3なんて書いてますね 5.0.3の書き間違いです
|
No.397 2014/11/09(Sun) 23:25:53
|
|
☆ Re: 不具合報告 と 質問 / しゅん |
|
|
1.2.について、再現するスクリプトを提示してください。 手元の環境(Win7 x86)では問題ないようでした。 3. GETKEYSTATEは、呼ばれる前に押されていたかを見ます。 なので、SHIFTと同時押しのように確認したい場合、GETKEYSTATE(VK_SHIFT)の前にGETKEYSTATE(VK_A)を入れて、Aキーのフラグを一旦クリアしてください。 Bキーもクリアする必要があるでしょう。
誤動作は、だいたい問題なさそうに見えますが、細かくは穴がありますね。 ただ、実態としてはそれで問題のない可能性があります。 どう動かしているのか、もう少し全体的に把握できるようなスクリプトがないと、私には回答できません。
|
No.398 2014/11/09(Sun) 23:50:31
|
|
☆ Re: 不義愛報告 と 質問 / koi |
|
|
>1.2.について、再現するスクリプトを提示してください。」 これに伴って改めて確認したところ UWSCの不具合ではなくてOSの設定の問題であることが分かりました
エクスプローラでファイル見ても情報が更新されないのでてっきり UWSCの問題だと勘違いしたようです あ騒がせしました (エクスプローラ表示で更新日時でなく作成日時を表示していた)
3に関してはそういった仕様の関数だということで了解しました
>どう動かしているのか、もう少し全体的に把握できるようなスクリプト 処理の一例ですが以下のようなスクリプトで 画面切り替え異常が発生するため以後の処理が不可能になるといった状況です マウスクリックの際に別のWindowに代わってしまっている という誤動作もあったような
if (GETID(GET_ACTIVE_WIN) <> BrouserID[BrouserNo]) StartTime[BrouserNo] = GETTIME() while (GETID(GET_ACTIVE_WIN) <> BrouserID[BrouserNo]) ACW(BrouserID[BrouserNo]) sleep(0.1) IF ((GETTIME() - StartTime[BrouserNo]) >= 5) PRINT "画面切り替え異常" LOCKHARDEX() InterLock = FALSE WRITEINI("SYSTEM", "LOCK", InterLock, GET_UWSC_DIR + "\UWSC.INI") exit endif wend endif
以後切り替えたアクティブウインドウに対して操作(例えば) BTN(LEFT, CLICK, clickX[BrouserNo], clickY[BrouserNo])
といった流れの処理を行っています 操作対象Window全てが重ならないように配置できるんなら解決するんですけど そういうわけにもいかず
以前Zオーダ操作(TOPMOST設定だったかな)して 強制的に最善画面にするという方法もとったのですがの UWSCのprintログ画面が不確定で最前画面に切り替わるといった現象があり それに邪魔されるなどして結局はうまくいっていません
|
No.399 2014/11/10(Mon) 00:34:28
|
|
☆ Re: 不具合、、、じゃないか / しゅん |
|
|
回答でないので、書き込んで申し訳ないですが、、、 「もう少し全体的に」という書き方が悪かったですね。すみません。 私の手元で現象が再現するスクリプトがないと、私には回答できません、ということです。
|
No.416 2014/11/10(Mon) 22:34:14
|
|
☆ Re: 不義愛報告 と 質問 / しろまさ |
|
|
> 3 押されている間は捕まえるのが間違いないですけどね。(適当にsleepは必要)
IF GETKEYSTATE(VK_SHIFT) WHILE GETKEYSTATE(VK_SHIFT) IF GETKEYSTATE(VK_A) 処置A Repeat; Until ! GETKEYSTATE(VK_A) ENDIF IF GETKEYSTATE(VK_B) 処置B Repeat; Until ! GETKEYSTATE(VK_B) ENDIF WEND ENDIF
|
No.420 2014/11/11(Tue) 09:59:31
|
|
☆ Re: 不義愛報告 と 質問 / koi |
|
|
>押されている間は捕まえるのが間違いないですけどね。(適当にsleepは必要)
空読みの方法に関してですが書かれた方法だと A押して数秒おいてからSHIFT押したってときには対応とれないので (SHIFT離した後数語にAが押されたら結果は同じ) 若干反応の悪さが気になりますがやむを得ないので現状は各キーを2度読みして andを行った結果を判断することで対処することにしました (もっとも反応の悪さは以前から感じてたので気にしないようにします)
IF GETKEYSTATE(VK_SHIFT) を IF (GETKEYSTATE(VK_SHIFT) and GETKEYSTATE(VK_SHIFT)) のように変更
|
No.421 2014/11/11(Tue) 11:26:37
|
|
☆ Re: 不義愛報告 と 質問 / しろまさ |
|
|
> A押して数秒おいてからSHIFT押したってときには対応とれないので とれますが? だらだら書き込む前に実際に試して下さいね。
> もっとも反応の悪さは以前から感じてた 自分のCODEに問題が無いと思っているうちは反応が悪いままでしょうね。(なまさん、ごめん)
|
No.422 2014/11/11(Tue) 13:54:46
|
|
☆ Re: 不義愛報告 と 質問 / koi |
|
|
>とれますが? だらだら書き込む前に実際に試して下さいね。 いやコード見ても対応とれてるように見えないし 実施そのコードで試しても予想道理何も変わりませんでしたが・・・・
|
No.423 2014/11/11(Tue) 15:59:38
|
|
☆ Re: 不義愛報告 と 質問 / stuncloud |
|
|
>3. こういうのはsethotkeyを使うべきですね
const DEFAULT_MESSAGE = "Shift+A か Shift+B 押す" sethotkey(VK_A, MOD_SHIFT, "proc") sethotkey(VK_B, MOD_SHIFT, "proc")
fukidasi(DEFAULT_MESSAGE) while TRUE sleep(0.1) wend
procedure proc() fukidasi("処理" + chr(HOTKEY_VK) + "実行中") if msgbox(chr(HOTKEY_VK)) = BTN_CANCEL then exitexit fukidasi(DEFAULT_MESSAGE) fend
|
No.424 2014/11/11(Tue) 16:31:26
|
|
☆ Re: 不義愛報告 と 質問 / koi |
|
|
>>こういうのはsethotkeyを使うべきですね 通常であればそれが順当なのかもしれませんね この質問に書かなかったのですが 書き込みNo389 で以下と同じようなことを書かせていただきました
ただ私のスクリプト作成・運用方法に起因しますが 同一スクリプト起動された時自分自身で起動済みのスクリプトを 強制終了すように組んでいる事もあり 設定したHotKeyがスクリプト強制終了でも誤動作の原因になることを恐れて 極力HotKeyは使わない方向で作成しています (通常GUI使わずランチメニューなどから別プロセル起動などさせて使っています) その意味ではGUIでのSTOP行った時もどうなるのかが不安ですが 実際に悪影響が残るかどうかは未検証です
正直言えばそれほど使いこなしてないのでHotKeyの存在自体を考えていなかった というところです
|
No.425 2014/11/11(Tue) 18:11:45
|
|