MortScriptでGooSyncを自動実行 -その3-

投稿者: | 2009年6月14日

GooSyncの同期を自動的に行う MortScript のスクリプトが一応完成した。
無線LANが有効になっていないときは、コミュニケーションマネージャによって有効にしてから同期を実行するようにした。
処理状況は、ステイタスウィンドウに表示するようにしてみた。
MortScriptはいろいろなことができて、なかなか面白そう。
ただし、どうしても解決できなかったのは、
コミュニケーションマネージャのウインドウタイトルが分からず、制御できなかったことだ。
例えば、
Close(title)
として、ウインドウを閉じることができるのだが、titleの部分に何を入れてもエラーになってしまうのだ。
いろいろ調べたが分からず。
そのため、クリック操作は、ウインドウタイトルを指定せずに行っている。
他のウインドウが最上位に来ていると期待した操作にならないのだが、仕方ない。
もう少し調べよう。
今回作成したスクリプトは、以下のとおり。

title = “GooSync Client”
exe = “\メモリ カード\Program Files\GooSync\PocketPCClient.exe”
title1 = “コミュニケーションマネージ”
# このタイトルでは動作しない。要調査。
exe1 = “\Windows\CommManager.exe”
StatusMessage( “GooSync同期を実行します”, ST_MESSAGE, FALSE, TRUE )
StatusShow()
Sleep(3000)
If(WndExists(title) = 1)
Close(title)
# アプリが終了するまで待機
Sleep(3000)
EndIf
WiFiConnect_OK = 19
WiFiConnect_NO = 1
StatusClear()
StatusType( ST_LIST , FALSE , FALSE )
StatusMessage( “GooSync同期を実行しています”, ST_LIST, FALSE )
StatusMessage( “無線LAN接続を行っています” )
lineOkNGFlg = true
CallFunction OnLineWifi, lineOkNGFlg
If (NOT lineOkNGFlg)
Message( “無線LAN未接続” )
Exit
EndIf
Run(exe)
StatusMessage( “無線LAN接続を行いました” )
StatusShow()
cnt = 3
StatusMessage( cnt )
Call(“countDown”, cnt)
If(Screen(“landscape”) = 1 )
# 横長時
x = 15
y = 230
Else
# 縦長時
x = 10
y = 300
EndIf
MouseClick(title, x, y-25 )
StatusMessage( “GooSync同期を行っています” )
StatusShow()
cnt = 40
StatusMessage( cnt )
Call(“countDown”, cnt)
If(WndExists(title) = 1)
Close(title)
Sleep(3000)
EndIf
Call closeWifi
Sub OnLineWifi
_onlineFlg = false
_lineOkNGFlg = false
_wifiStat = 1
i = 1
_wifiStat = RegRead(“HKLM”, “System\State\Hardware”, “WiFi”)
If (_wifiStat <> WiFiConnect_OK)
Run(exe1)
Sleep(3000)
If(Screen(“landscape”) = 1 )
# 横長時
x = 260
y = 90
Else
# 縦長時
x = 70
y = 160
EndIf
MouseClick(x, y)
StatusShow()
cnt = 15
StatusMessage( cnt )
Call(“countDown”, cnt)
EndIf
_wifiStat = RegRead(“HKLM”, “System\State\Hardware”, “WiFi”)
If (_wifiStat <> WiFiConnect_OK)
_onlineFlg = true
Else
_onlineFlg = true
_lineOkNGFlg = true
EndIf
Return(_lineOkNGFlg)
EndSub
Sub closeWifi
Run(exe1)
Sleep(3000)
If(Screen(“landscape”) = 1 )
# 横長時
x = 260
y = 90
Else
# 縦長時
x = 70
y = 160
EndIf
MouseClick(x, y)
Sleep(3000)
If(Screen(“landscape”) = 1 )
# 横長時
x = 70
y = 230
Else
# 縦長時
x = 40
y = 300
EndIf
MouseClick(x, y)
EndSub
Sub countDown
i = argv[1]
While(i >= 0)
Sleep(1000)
i = i - 1
StatusRemoveLastMessage()
StatusMessage( i )
EndWhile
StatusRemoveLastMessage()
EndSub