くりっく365 リッチクライアントとレート収集ユーティリティ自動再起動
- ネット回線が切断された時など、リッチクライアントには再起動を促すダイアログが表示されます。この時、
- くりっく365 リッチクライアント
- レート収集ユーティリティ(FX・インヴァスト)
UWSCで監視
スケジュール設定
UWSCで、「接続状況が不安定です」ダイアログが表示されるのを監視し、自動再起動用スクリプトを実行します。

UWSCのスケジュール設定で、relogin_invast.uwsを指定します。
タイマー設定

UWSCのタイマー設定で、
- Titleを、インヴァスト証券 くりっく365
- Classを、#32770
- 「別プロセスで実行」にチェックを入れて下さい。UWSCのHELPによると「スクリプト実行中でも起動する事」ができるそうです。
にします。
以上の設定で、「接続状況が不安定です」ダイアログが表示されたら、relogin_invast.uwsが実行されます。

但し、「インヴァスト証券 くりっく365」のタイトルでClassが「#32770」のダイアログは、
- くりっく365を終了しますか? → メインウインドウを閉じる時に表示されます。

- サーバーへの接続に失敗しました。 → ログイン時に繋がらなかった場合表示されます。

- 営業日の更新が通知されました。 → 朝方頃表示されます(例:2010-01-27には、7:13に表示された)。

のダイアログもあります。この時にも、relogin_invast.uwsが実行されるので、ログイン用スクリプト(login_invast.uws)でダイアログの種類を区別します。
自動再起動用スクリプト
- relogin_invast.uws として保存して下さい。
- このスクリプト中で、3つのスクリプトを呼び出します。
- login_invast.uws
- rate_invast_open.uws
- mail.uws
設定
- // 送信元
- // 送信先
を設定して下さい。
CALL login_invast.uws
IFB loginCheck = TRUE THEN
CALL rate_invast_open.uws
ENDIF
CALL mail.uws
コンピュータ名 = doscmd("echo %computername%") //http://www.nagomi-jp.net/~liners/p01.htm
GETTIME(0)
時刻 = G_TIME_HH2 + "時" + G_TIME_NN2 + "分" + G_TIME_SS2 + "秒"
IFB loginCheck = TRUE THEN
subject ="リッチクライアント 再ログイン成功"
body = コンピュータ名 + "リッチクライアントに再度ログインしました。<#CR>" + 時刻
ELSE
subject ="リッチクライアント ログイン失敗"
body = コンピュータ名 + "リッチクライアントに再度ログインしようとし失敗したか、想定している以外の状態です。<#CR>" + 時刻
ENDIF
mailfrom = "example@example.com" // 送信元
mailto = "example2@example.com" // 送信先
sendMail(mailfrom,mailto,subject,body) //件名,本文
くりっく365 リッチクライアント ログイン用スクリプト
- login_invast.uws として保存して下さい。
- パスワードとリッチクライアントのパスを設定を行ってください。
- 初期設定では、接続切断後の再ログイン時に「サーバーへの接続に失敗しました」でログインできなかった場合は、ログインが出来るまでログインを繰り返します。行わないなら、loginRepeatをFALSEにして下さい。
- 初期設定では、表示されたダイアログの種類をメールで送信します。行わないなら、dialogMailをFALSEにして下さい。
- 「インヴァスト証券 くりっく365を終了しますか?」のダイアログが表示されたら、「はい」ボタンを押します。押さない場合は、
CLKITEM(ID,"はい",clk_acc or clk_short,true,1)
をコメントアウトして下さい。
CALL mail.uws // 設定 passWord = "*******" //ログイン用パスワードを設定 invastClick365Path = "C:\Program Files\INVAST CLICK365\module\InvastClick365.exe" //リッチクライアントのパスを設定 //ログイン時に、接続を失敗したらログインを繰り返すならTRUE。行わないならFALSE loginRepeat = TRUE //ダイアログの種類をメールで送信するなら、TRUE。行わないならFALSE dialogMail = TRUE //メール送信を行うなら、設定する。 mailfrom = "example@example.com" // 送信元 mailto = "example2@example.com" // 送信先 待機秒数 = 60 PUBLIC loginCheck //処理が正常に終了したならTRUEになる。 loginCheck = FALSE check = FALSE id = GETID("インヴァスト証券 くりっく365","#32770") IFB POS("接続状況が不安定です。インヴァスト証券 くりっく365を終了し、再度ログインしてください。",GETSTR(id,2,1)) > 0 THEN CLKITEM(ID,"OK",clk_acc or clk_short,true,1) IFB dialogMail THEN sendMail(mailfrom,mailto,"リッチクライアント","接続状況が不安定です。") ENDIF check = TRUE SLEEP(3) ELSEIF POS("営業日の更新が通知されました",GETSTR(id,2,1)) > 0 THEN CLKITEM(ID,"はい",clk_acc or clk_short,true,1) IFB dialogMail THEN sendMail(mailfrom,mailto,"リッチクライアント","営業日の更新が通知されました") ENDIF EXITEXIT //スクリプト全てを終了。 ELSEIF POS("インヴァスト証券 くりっく365を終了しますか?",GETSTR(id,2,1)) > 0 THEN CLKITEM(ID,"はい",clk_acc or clk_short,true,1) IFB dialogMail THEN sendMail(mailfrom,mailto,"リッチクライアント","くりっく365を終了しますか?のダイアログが表示されたので、終了しました。") ENDIF SLEEP(5) EXIT ELSEIF POS("サーバーへの接続に失敗しました。ネットワークの設定を確認してください。",GETSTR(id,2,1)) > 0 THEN PRINT ("サーバーへの接続に失敗しました") IFB dialogMail THEN sendMail(mailfrom,mailto,"リッチクライアント","サーバーへの接続に失敗しました。") ENDIF IFB loginRepeat THEN //ログインできるまで、ログインを繰り返す場合 CLKITEM(ID,"OK",clk_acc or clk_short,true,1) check = TRUE SLEEP(待機秒数) //待機秒数待つことで、UWSCのプロセスが3つ以上同時に実行されないように調整する。 ELSE EXIT ENDIF ELSEIF id >=0 THEN PRINT ("想定外のダイアログが表示された。") IFB dialogMail THEN sendMail(mailfrom,mailto,"リッチクライアント",GETSTR(id,2,1) + " のダイアログが表示されました。") ENDIF SLEEP(2) EXIT ENDIF // リッチクライアントのメインウインドウが表示されていたら一端終了させる。 IFB check = FALSE AND GETID("インヴァスト証券 くりっく365","Afx:00400000") >= 0 THEN CTRLWIN(GETID("インヴァスト証券 くりっく365","Afx:00400000"), CLOSE) SLEEP(5) ID = GETID("インヴァスト証券 くりっく365","#32770",0.1) IFB POS("インヴァスト証券 くりっく365を終了しますか?",GETSTR(ID,2,1)) > 0 THEN CLKITEM(ID,"はい",clk_acc or clk_short,true,1) SLEEP(10) ENDIF ENDIF // リッチクライアントを起動する。 IFB check=FALSE THEN EXEC(invastClick365Path) ENDIF // ログイン画面が表示されるまでSleepする。 現在時刻秒 = GETTIME(0) WHILE (GETID("ログイン","#32770",0.1) < 0 ) AND (GETTIME(0) < 現在時刻秒 +待機秒数) //待機秒数で中断 SLEEP(1) WEND SLEEP(2) // ログインする。 ID2 = GETID("ログイン","#32770",0.1) CTRLWIN(GETID("ログイン","#32770",0.1), ACTIVATE) SLEEP(1) SENDSTR(ID2, passWord , 2, TRUE) CLKITEM(ID2,"Login",clk_btn or clk_short,true,1) SLEEP(2) // リッチクライアントが起動するまでSleepする。 現在時刻秒 = GETTIME(0) WHILE (GETID("インヴァスト証券 くりっく365","Afx:00400000") < 0 ) AND (GETTIME(0) < 現在時刻秒 +待機秒数) //待機秒数で中断 SLEEP(1) WEND SLEEP(2) // メインウインドウが表示されていたら loginCheck をTRUEにする。 IF GETID("インヴァスト証券 くりっく365","Afx:00400000") >= 0 THEN loginCheck = TRUE
レート収集ユーティリティ(FX・インヴァスト) 起動用スクリプト
- rate_invast_open.uws として保存して下さい。
- ファイル名とファイルへのパスを設定して下さい。
//ファイル名とファイルへのパスを設定して下さい。 ファイル名 = "rate_invast_1_4.xls" パス = "C:\" // ファイルが開かれていたら閉じる id = GETID(ファイル名,"XLMAIN",0.1) CTRLWIN(id, CLOSE) // 先にファイルのウインドウを閉じる SLEEP(1) CTRLWIN(id, CLOSE2) // 「インヴァスト証券 くりっく365」メインウインドウが表示されるまで待機する。 id2 = GETID("インヴァスト証券 くりっく365","Afx:00400000",0.1) 現在時刻秒 = GETTIME(0) WHILE (id2 < 0) AND (GETTIME(0) < 現在時刻秒 + 60) //60秒間で中断 id2 = GETID("インヴァスト証券 くりっく365","Afx:00400000",0.1) WEND //ファイルを開く SLEEP(5) //念のため5秒待機。適宜調節して下さい。 id2 = GETID("インヴァスト証券 くりっく365","Afx:00400000",0.1) IFB id2<>-1 AND GETID(ファイル名) < 0 THEN Excel = CreateOLEObj("Excel.Application") Excel.Visible = True Excel.WorkBooks.Open(FileName:=パス + ファイル名, readOnly:=False) ENDIF
- // ファイルが開かれていたら閉じる
まず、rate_invast_1_4.xlsが表示されていたら閉じます。
Excelアプリケーションのウインドウ内最大にrate_invast_1_4.xlsが表示されている必要があります。ウインドウタイトルを取得して判断しているためです。 - 「インヴァスト証券 くりっく365」メインウインドウが表示されるまで待機する。
「インヴァスト証券 くりっく365」メインウインドウされるまで、待機します。最大60秒待機し、表示されなかったら、Excelファイルを開きません。 - //ファイルを開く
「インヴァスト証券 くりっく365」メインウインドウが表示されたのを確認してから、念のため5秒(適宜調整して下さい)待ち、Excelアプリケーションを別プロセスで起動してファイルを開きます。
ユーザーアカウント制御(UAC)

- スクリプトをテストする前に、ユーザーアカウント制御を「通知しない」にし再起動を行ってください。
- スクリプトを実行するには、「通知しない」にしておく必要があります。
確認したバージョン
くりっく365 リッチクライアント Ver 1.0.1.0で確認しました。
動作条件
Excel 2007 + Windows 7(64bit)で開発・確認しています。
使用規約
- このソフトウェアを使用したことによる一切の損害について作者は責任を負いません。
履歴
- 2010-01-26 login_invast.uwsを変更。その他修正。
- 2010-01-20 login_invast.uwsを変更
- 2010-01-10 login_invast.uwsを変更
- 2009-12-03 掲載
