ラベル

ラベル WSH の投稿を表示しています。 すべての投稿を表示
ラベル WSH の投稿を表示しています。 すべての投稿を表示

2010年5月21日金曜日

WSHで(JScript)IEを操作する

WSHIE(InternetExplorer)操作できるようなので簡単な検索操作をスクリプトにやらせてみました。
メソッドやプロパティ等はMSDNのリファレンスを参考にしました。
//  IEオブジェクト生成&IE機動
    var objIE = WScript.CreateObject("InternetExplorer.Application", "IE_");
    //  可視状態にする
    objIE.Visible = true;
    //  検索ページの表示
    objIE.GoSearch();
    //  シェルオブジェクト生成
    var objShell = WScript.CreateObject("WScript.Shell");
    //  ページが表示されるまで待つ
    WScript.Sleep(5000);
    //  キー送信
    objShell.Sendkeys("Google");
    //  Enterキー送信
    objShell.Sendkeys("{ENTER}");

//function IE_DownloadComplete() {
//  objShell.Sendkeys("Google");
//  objShell.Sendkeys("{ENTER}");
//}
検索ページが読み込まれたことをイベントで受け取ろうとしたのですがうまくできませんでした、JScriptだとつかえないイベントが結構あるようです。
VBAを使いなさいってことなのかな。。。

2010年5月20日木曜日

WSH(JScript)におけるカレントディレクトリについて、その2

先日スクリプトファイルを直接実行した時とファイルやフォルダをドラッグアンドドロップした時とでは、カレントディレクトリが変わるっていう記事を書きましたが、WScript.ScriptFullNameを使用すればスクリプトファイルのあるフォルダを取得できますね。
まぁ、カレントディレクトリ==スクリプトが置いてあるフォルダとか思っていた私がウマシカさんでしたw
スクリプトフォルダを取得する関数を作ってみました。
WScript.echo(this.getScriptFolder());

//  スクリプトフォルダの取得
function getScriptFolder() {
    return WScript.ScriptFullName.replace("\\" + WScript.ScriptName, "");
}

2010年5月18日火曜日

WSH(JScript)でフォルダ配下の全ての動画ファイルの再生時間を取得する

最近WSHの記事ばっかりでしたけどこんなの作ってました。
主な機能
  1. 動画ファイルの再生時間を取得する。
  2. サブフォルダも含めたフォルダ内の全ての動画ファイルの再生時間を取得する。
  3. logファイルに出力する。
try {
    var main = new main(WScript.Arguments);
    main.exec();
}
catch(e) {
    WScript.echo(e);
    WScript.Quit();
}

function main (_args) {

    // Windows Media Playerコントロールオブジェクト生成
    this.objWMP = WScript.createObject("WMPlayer.OCX");
    //  FileSystemObject生成
    this.objFileSys = WScript.CreateObject("Scripting.FileSystemObject");
    //  ShellObject生成
    this.objShell = WScript.createObject("WScript.Shell");   

    //  引数の取得
    this.objArgs = _args;
    if (this.objArgs.UnNamed.count <= 0) {
        throw "ファイル叉はフォルダをドラッグ&ドロップするか\nコマンドラインから引数としてファイル又はフォルダパスを指定してください。";
    }

    //---------------------------------
    //  exec()
    //---------------------------------
    this.exec = function() {
        //  logファイルの生成(上書きモード)
        var logFileName = "PlayTimeLog.txt";
        var objLogFile = this.objFileSys.OpenTextFile(logFileName, 2, true);
        var fileCnt = 0;
        //  全ての名前なし引数について処理する
        var unNamedArgs = this.objArgs.UnNamed;
        var enu = new Enumerator(unNamedArgs);
        for (; enu.atEnd() == false; enu.moveNext()) {
            try {
                var arg = enu.item();
                fileCnt = this.logPlayTime(objLogFile, arg);
            }
            catch(e) {
                objLogFile.WriteLine(e);
            }
        }
        //  サマリー情報の書き込み
        objLogFile.WriteLine("----------------------------------------");
        objLogFile.WriteLine(fileCnt + "件のファイルを処理しました。");
        //  logファイルのクローズ
        objLogFile.Close();
        //  完了メッセーの表示
        WScript.echo(
            "mission completed\n"
            + "作業結果は\n"
            + this.objShell.CurrentDirectory
            + "\\" + logFileName + "\n"
            + "参照"
        );
    }

    //---------------------------------
    //  サブフォルダも含めて動画ファイルの再生時間をlogファイルに書き込む
    //---------------------------------
    this.logPlayTime = function (_objLogFile, _path) {
        var fileCnt = 0;
        //  パスがフォルダの場合
        if (this.objFileSys.FolderExists(_path)) {
            //  フォルダオブジェクトの生成
            var objFolder = this.objFileSys.GetFolder(_path);
            //  サブフォルダ一覧取得
            var subFolders = objFolder.SubFolders;
            //  全てのフォルダについて自分を呼び出す
            var enuSubFolders = new Enumerator(subFolders);
            for (;enuSubFolders.atEnd() == false; enuSubFolders.moveNext()) {
                fileCnt += this.logPlayTime(_objLogFile, enuSubFolders.item().Path);
            }

            //  ファイル一覧取得
            var files = objFolder.Files
            //  全てのファイルについて自分を呼び出す
            var enuFiles = new Enumerator(files);
            for (; enuFiles.atEnd() == false; enuFiles.moveNext()) {
                fileCnt += this.logPlayTime(_objLogFile, enuFiles.item().Path);
            }
        }
        //  パスがファイルの場合
        else if (this.objFileSys.FileExists(_path)) {
            //  ファイルオブジェクトの生成
            var objFile = this.objFileSys.GetFile(_path);
            //  再生時間の取得
            var time = this.getPlayTime(objFile.Path);
            //  logファイルに書き込み
            _objLogFile.WriteLine(objFile.Name + "\t" + time);
            //  ファイル数をインクリメント
            fileCnt++;
        }
        else {
            objLogFile.WriteLine("error:" + _path + "は存在しません");
        }
        return fileCnt;
    }

    //---------------------------------
    //  動画再生時間の取得
    //---------------------------------
    this.getPlayTime = function(_filePath) {
        // 動画ファイルの読み込み
        this.objWMP.URL = _filePath; 

        // ファイル準備中状態の間待つ
        while (this.objWMP.playState == 9) {
            WScript.Sleep(500);
        }

        // 再生時間取得
        return this.objWMP.currentMedia.durationString;
    }

}
ソースコード長いw

2010年5月17日月曜日

WSHにおけるカレントディレクトリについて

WSHのスクリプトファイルを直接実行した時とファイルやフォルダをドラッグアンドドロップした時とでは、カレントディレクトリが変わるようです。
ファイルやフォルダをドラッグアンドドロップしたときはカレントディレクトリが「Documents and Settings」配下のログインユーザディレクトリ配下になります。
下記に検証用のスクリプトを用意しました。
var shell = WScript.createObject("WScript.Shell");
WScript.echo(shell.CurrentDirectory);

WSH(JScript)でDictionaryを使ってみる

今日はWSH(JScript)のDictionaryを紹介します。
var datas = {
    a:"aa",
    b:"bb",
    c:"cc"
};

//  辞書(Dictionary)の生成
var objDict = WScript.createObject("Scripting.Dictionary");
for (var key in datas) {
    //  要素の追加
    objDict.add(key, datas[key]);
}

//--------------------------------------
//  プロパティ
//--------------------------------------
//  要素数の取得
var cnt = objDict.Count;
WScript.echo("要素数の取得:" + cnt);

//  要素の取得
WScript.echo("要素の取得1:" + objDict.Item("a"));
WScript.echo("要素の取得2:" + objDict("a"));

//  キーを変更する
objDict.Key("a") = "A";
WScript.echo("\"A\"の値:" + objDict.Item("A"));

//--------------------------------------
//  メソッド
//--------------------------------------

//  キーの存在判定
if (objDict.Exists("A")) {
    WScript.echo("\"A\"は存在します");
}

//  Enumeratorを使用した反復
var enuDict = new Enumerator(objDict);
var strItems = "";
for (; enuDict.atEnd() == false; enuDict.moveNext()) {
    strItems += objDict(enuDict.item()) + ",";
}
WScript.echo(strItems);



//  キーを指定して削除
objDict.Remove("b");
objDict.RemoveAll();
WScript.echo("要素数:" + objDict.Count);
紹介しておいてなんですが、機能が微妙な上にJScript(JavaScript)は連装配列が使えるのでDictionaryは使わないかもしれません。

2010年5月16日日曜日

JavaScript(JScript)で連装配列を反復する(なめる)

今日はJavaScript(JScript)で連装配列を反復する方法を紹介します。
var array = new Array();

array["a"] = "aa";
array["b"] = "bb";

for (var key in array) {
    //  WScript.echo(array[key]);   // WSHの場合
    alert(array[key]);
}

2010年5月15日土曜日

WSH(JScript)で動画の再生時間を取得する

今日はWSH(JScript)で動画再生時間取得する方法を紹介します。
try {
    // Windows Media Playerコントロールオブジェクト生成
    var objWMP = WScript.createObject("WMPlayer.OCX");

    // 動画ファイルの読み込み
    objWMP.URL = ".\\aaa.wmv"; 

    // ファイル準備中状態の間待つ
    while (objWMP.playState == 9) {
        WScript.Sleep(500);
    }

    // 再生時間取得と表示
    WScript.echo(objWMP.currentMedia.durationString);
}
catch(e) {
    WScript.echo(e);
    WScript.Quit();
}
「aaa.wmv」というファイルの再生時間を表示しています。

2010年5月14日金曜日

WSH(JScript)でコレクションを反復する

今日はWSH(JScript)コレクション反復する方法を紹介します。
今回 紹介する方法は
  • Enumratorを使用して反復する
です。
例として指定フォルダのファイル一覧を表示するコードを記述します。
try {
    //  FileSystemObject生成
    var objFileSys = WScript.CreateObject("Scripting.FileSystemObject");

    //  ファイル一覧(コレクション)取得
    var folder = objFileSys.GetFolder("C:");
    var files = folder.Files;

    //  Enumeratorを使用してファイル一覧を反復する
    var str = "";
    var iter = new Enumerator(files);
    for (;iter.atEnd() == false; iter.moveNext()) {
        str += iter.item().Name + "\n";
    }

    //  ファイル一覧表示
    WScript.echo(str);
}
catch (e) {
    WScript.echo(e);
    WScript.quit();
}