20090429

MortScript4.2の不具合について

Last Update : 04/May/09
MortScriptをv4.2にアップデイトしてみました」で上手く動かないとご報告したMortScript4.2ですが、検証してみた結果、日本語のウインドウタイトルを指定するとエラーになるケースがある様です。

問題が発生するのは「ニュース・天気予報・PodcastをMortScriptとRunATで自動巡回する」でご紹介したスクリプトです。


#Morning4.mscr

#Podcast、天気予報、ニュースサイト自動巡回スクリプト(Ver4.11)

#設定#################################################

#↓使用するアプリケーションとフォルダ

exe1 = "\program files\Wifictrl.exe"
exe2 = "\program files\harddial.exe"
exe3 = "\program files\JWezWM\JWezWM.exe"
exe4 = "\program files\RSS Ticker Today\RSSCruise.exe"
exe5 = "\Program files\03RSSReader\03RSSReader.exe"
exe6 = "\program files\BeyondPod\BeyondPod.exe"

#↓Sleep値の調整(マイクロ秒)
WaitL = 5000
WaitS = 1000

#↓ウインドウタイトル
title0 = "03RSSリーダー"
title1 = "All Feeds"

#↓Podcastのダウンロード終了を示すウインドウタイトル(適宜追加)
#"title10"、"title11"は変数として使用済
title2 = "Downloaded"
title3 = "Nothing to Download!"
title4 = "Update Completed!"

#↓Podcastのダウンロード時間のMAX値(分)を設定
timeout1 = 20

#↓#RSSリーダーのダウンロード時間のMAX値(分)を設定
timeout2 = 2

#スクリプト開始#######################################

#画面On(サスペンドから復帰)
ToggleDisplay(1)
Sleep(WaitL)

#外部電源に接続している場合のみPodcastを巡回
If(ExternalPowered())

  #無線LANをOn
  Run(exe1, "on")
  Sleep(WaitL)

  #Beyondpodの自動巡回#########################

  #BeyondPodを立ち上げウインドウがアクティブになるまで最大60秒待つ
  Run(exe6)
  WaitForActive(title1, 60)

  #全てのフィードを更新
  SendRightSoft(title1)
  Sleep(WaitS)
  SendKeys(title1, "U")
  Sleep(WaitS)
  SendKeys(title1, "A")

  #タイムアウト時間をカウント
  startingtime = TimeStamp()
  While(TimeStamp() < startingtime + timeout1 * 60)

    #"title2"ウインドウが存在したらBeyondpodを終了し次の巡回用サブルーチンへ
    If(WndExists(title2))
      SendRightSoft(title2)
      Sleep(WaitS)
      SendKeys(title2, "E")
      Sleep(WaitS)
      Call("others")
    Else
    Endif

    #"title3"ウインドウが存在したらBeyondpodを終了し次の巡回用サブルーチンへ
    If(WndExists(title3))
      SendRightSoft(title3)
      Sleep(WaitS)
      SendKeys(title3, "E")
      Sleep(WaitS)
      Call("others")
    Else
    Endif

    #"title4"ウインドウが存在したらBeyondpodを終了し次の巡回用サブルーチンへ
    If(WndExists(title4))
      SendRightSoft(title4)
      Sleep(WaitS)
      SendKeys(title4, "E")
      Sleep(WaitS)
      Call("others")
    Else
    Endif

    #BeyondPodが手動で終了されたらスクリプト終了用サブルーチンへ
    If(ProcExists(exe6))

    Else
      Sleep(WaitL)
      Call("endofscript")
    Endif
  EndWhile

  #タイムアウトの場合はBeyondpodを終了
  #次の巡回用サブルーチンへ
  Run(exe6)
  Sleep(WaitS)
  SendRightSoft()
  Sleep(WaitS)
  SendKeys(, "E")
  Sleep(WaitL)
  Call("others")

Else
  Call("others")
Endif

Exit

Sub others

  #JWezWMの自動巡回#############################
  RunWait(exe3, "auto")

  #RSSTickerTodayの自動巡回#####################
  RunWait(exe4)

  #03RSSリーダーの自動巡回######################

  #03RSSリーダーが起動していればウインドウをアクティブに、起動していなければ実行
  If(WndExists(title0))
    Show(title0)
  Else
    Run(exe5)
  EndIf

  #03RSSリーダーのウインドウがアクティブになるまで最大60秒待つ
  WaitForActive(title0, 60)

  #更新チェック
  SendRightSoft(title0)
  Sleep(WaitS)
  SendKeys(title0, "A")
  Sleep(WaitS)
  SendLeftSoft(title0)
  Sleep(WaitS)
  SendCR("確認")

  #ダウンロード終了待ち
  Sleep(timeout2 * 60000)

  #03RSSリーダーをアクティブに
  Show(title0)

  #03RSSリーダーのウインドウがアクティブになるまで最大60秒待つ
  WaitForActive(title0, 60)

  #03RSSリーダーを終了しスクリプト終了用サブルーチンへ
  SendRightSoft(title0)
  Sleep(WaitS)
  SendKeys(title0, "E")
  WaitFor("終了の確認", 10)
  SendCR("終了の確認")
  Sleep(WaitL)
  Call("endofscript")

EndSub

Sub endofscript

  #接続切断用サブルーチン
  #無線LANとダイアルアップを切断し画面を再描写してスクリプトを終了
  Run(exe1, "off")
  Sleep(WaitS)
  Run(exe2, "-off")
  RedrawToday
  Exit
EndSub

#スクリプト終了

03RSSリーダーの更新チェックの「SendCR("確認")」のところ(赤字部分)で「ウインドウが見つからない(Window '確認' could not be found)」というエラーになってしまいます。

スクリプトを変更してウインドウタイトルを指定しないでキーストロークを送るという対策も考えられますが、誤作動の可能性がありますし、従来のv4.1の機能で特に問題ありませんので、v4.1を使い続ける事にしました。

なお、「QDzのデータ更新を簡単に」「RSSリーダーから辞書をいっぱつ検索するMortScript」「AlarmClockの設定状態をToday画面に表示する」でご紹介しているスクリプトには日本語のウインドウタイトルを指定している部分はありませんので、v4.2でも問題無く動作します。

・MortScript
http://www.sto-helit.de/index.php?module=page&entry=ms_overview&action=view&menu=29

・MortScript まとめ&マニュアル要訳
http://home.att.ne.jp/wave/deox_pop/mortscript.html#1

以上

0 件のコメント:

コメントを投稿