WSH(VBS)を使って他のアプリと簡単連携!

WSH(VBS)を使って他のアプリと簡単連携!

何故か不明ですが、8月はWSHの案件が沢山ありました。
このブログで何の紹介もしていないのに何故か着地がWSHという...不思議ですね。

と言う事で、数回にわたってWSHについてまとめとアホみたいに悩んだ事柄についてメモしていきたいと思います。

WSHってなに

Windowsの自動化等で利用される事が多いスクリプトでLinuxで言う所のsh。
Windows Scripting Host (WSH) 』という意味らしい。
wshで動くマクロを『JScript』という言語で書いてWindows を自動操作する事が出来る。

ちなみに、JScript(ジェイ・スクリプト)は、マイクロソフト製のスクリプト言語であり、Microsoft Windows 上で動作する。つまり、JavaScript ≠ JScript ややこしいことこの上ないですね。
JScriptでググるとJavaScriptの記事ばかりにHITするのでWindowsの操縦に関しての検索はWSHでする事をお勧めする。

WSHでは、「.js」「.jse」「.wsf」などの拡張子を使用できますが、実行ファイルを複数ファイルに分割した場合、「.wsf」を使用することが無難です。とGoogle先生に教えて頂きました。

まぁ私の場合はVBS(VBScript)にしてしまうので、厳密にはWSHではないのですけど...。

主だった参考図書はココとかココ

WSHで何ができるか

やれることの範囲は超広くてWindowsの操作でルールがあるものであれば、ほぼ自動化できます。
MacでやるとしたらJavaScriptで作る事になるのかな?

WSHの優秀な所は、自動操縦用と言っても過言ではないIEを完全コントロールできる事。
IEのCOMを利用してHTML内のID引き当てたりbusy待ちしたり、色々操作できてしまいます。

その他にも特定のアプリを起動させて、TABやENTER等のキーボード操作を追って操作したりとかね。

WSHで構築した事

  • ローカルサーバーの販売管理システムから在庫情報を抜き出しFTPでWEBサーバー所定のフォルダにアップロード
  • ローカルサーバーの顧客台帳から顧客情報を抜き出しFTPでWEBサーバー所定フォルダにアップロード
  • WEBサーバーの提示実行で生成されたCSVをFTPで取出しローカルサーバーの所定フォルダにDownload
  • etc.

こんな事が簡単にできちゃうんですよね。
この程度であれば作成時間2時間&テスト1時間って感じで完成しちゃいます。

WSHの基本的な書き方

■ファイル名:hoge.jse

var Shell = WScript.CreateObject ("WScript.Shell");

//販売管理起動
Shell.Run ("\"C:\\APP\\hanbai_sys\\start.exe")
//アプリ起動を待つ
WScript.Sleep( 5000 )
//ログイン処理
Shell.SendKeys( "{TAB 1}" );   WScript.Sleep( 100 );
Shell.SendKeys( "{ENTER 1}" );   WScript.Sleep( 1000 );
 
//マスター帳票、得意先台帳
Shell.SendKeys( "%(81)" );   WScript.Sleep( 100 );
Shell.SendKeys( "{ENTER 1}" );   WScript.Sleep( 100 );
//印刷画面から出力を指示
Shell.SendKeys( "%E" );   WScript.Sleep( 100 );//0.1秒休み
Shell.SendKeys( "{ENTER 1}" );   WScript.Sleep( 10000 );

//商品一覧表 保存実行
Shell.SendKeys( "%S" );   WScript.Sleep( 10000 );//10秒休み
//※マイドキュメントに得意先台帳.CSVが作成される

//販売管理終了
Shell.SendKeys( "%{F4}" );   WScript.Sleep( 100 );
Shell.SendKeys( "%{F4}" );   WScript.Sleep( 1000 );

//コマンドプロント起動
Shell.Run ("\"%windir%\\system32\\cmd.exe")
//起動を待つ
WScript.Sleep( 1000 )

//マイドキュメントから所定のフォルダにCSVファイル移動
Shell.SendKeys("move C:\\Users\\ユーザー名\\Documents\\*.csv  C:\\app\\customer_data");
Shell.SendKeys( "{ENTER 1}" );   WScript.Sleep( 1000 );
Shell.SendKeys( "%{F4}" );   WScript.Sleep( 100 );


//FileZilla起動
Shell.Run ("\"C:\\Program Files\\FileZilla FTP Client\\filezilla.exe")
//5秒休み
WScript.Sleep( 5000 )
//サイトマネージャー起動(「ALT+F」)
Shell.SendKeys( "%F" );   WScript.Sleep( 1000 );//0.50秒休み
Shell.SendKeys( "{ENTER 1}" );   WScript.Sleep( 100 );
//カーソルを上に移動
Shell.SendKeys( "{up 10}" );   WScript.Sleep( 5000 );//5秒休み

//WEBサーバーを開く
Shell.SendKeys( "{down 1}" );   WScript.Sleep( 1000 );//1秒休み
Shell.SendKeys( "{ENTER 1}" ); WScript.Sleep( 5000 );
//リモートサイト名を変更
Shell.SendKeys( "{TAB 9}" );   WScript.Sleep( 100 );
Shell.SendKeys("/home/user/保存フォルダ");
Shell.SendKeys( "{ENTER 1}" ); WScript.Sleep( 5000 );

//ローカルのファイルを指定してアップロード
Shell.SendKeys( "{TAB 11}" );   WScript.Sleep( 100 );

Shell.SendKeys( "{down 1}" );   WScript.Sleep( 1000 );//1秒休み
Shell.SendKeys( "{ENTER 1}" ); WScript.Sleep( 10000 );

Shell.SendKeys( "%{F4}" );   WScript.Sleep( 100 );

//コマンドプロント起動
Shell.Run ("\"%windir%\\system32\\cmd.exe")
//起動まち
WScript.Sleep( 1000 )

//UpLodeしたファイルを削除
Shell.SendKeys("del C:\\app\\customer_data\\*.csv");
Shell.SendKeys( "{ENTER 1}" );   WScript.Sleep( 1000 );
Shell.SendKeys( "%{F4}" );   WScript.Sleep( 100 );

見て頂いてわかる通り、OS内のキーボード操作を追って動作をスクリプトに書いていきます。
そして、この実行をタスクマネージャーを使い時限式にすると...。

あっという間に『○○時に顧客データ更新』『□□時に在庫データ更新』なんて実装が出来ます。

まとめ

こう言った自動化の問題って何かと言うと、作って試してを繰り返すので「スクリプトかいてる時間が短くなる」と言う事です。だってねぇ、実際にテストしようとすると動かすしかないんですけど、そのテストの間はOS占拠されてますから。

お陰で作るのに時間が掛かると言うね。

まぁ作ってしまえば圧倒的に楽になるのでいいのですが。

\ 最新情報をチェック /

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください