情報の入力方法

 ここではJScriptファイル実行時パラメータを設定する方法について紹介します。
色々ホームページにもあるテキストボックスのようにユーザからパラメータが設定できたらいいな・・。
と、考えたことはないでしょうか?
そこでJScriptで出来る簡単なユーザからの入力方法をご紹介していきます。

方法としては、確認ダイアログボックスドラッグ&ドロップ実行テキストファイルから読み込みが主です。
他にもコマンドライン引数から実行、VBScriptInputBox()関数を利用する方法等もありますが今回は省きます。

 確認ダイアログボックスを表示するには以下の関数を呼び出すことで実現できます。
関数名
 object.Popup( strText, [nSecondsToWait], [strTitle], [nType] );

関数説明
  ポップアップウインドウを表示する。
 引数のnTypeにボタンの種類とアイコンの種類を足した値を指定します。
 どのボタンが押されたかが戻り値によって判断が出来る。
 nSecondsToWaitに整数をしているすると、指定した秒数が経過すると
 自動的にウインドウが閉じます。
 その際の戻り値は-1です。
 
引数
 object・・・・・・WshShellオブジェクト
 strText ・・・・・ウィンドウに表示する文字列
 nSecondsToWait・・ウィンドウが閉じるまでの時間(秒)(省略可)
          0を指定した場合、ボタンを押されない限り閉じることはない
 strTitle・・・・・ウィンドウのタイトル文字列(省略可)
 nType ・・・・・・ウインドウに表示するボタンとアイコンの種類を示す数値 (省略可)

[ボタンの種類]
内容
0 [OK]ボタン
1 [OK][キャンセル]ボタン
2 [中止][再試行][無視]ボタン
3 [はい][いいえ][キャンセル]ボタン
4 [はい][いいえ]ボタン
5 [再試行][キャンセル]ボタン
[アイコンの種類]
内容
16 [Stop]アイコン
32 [?]アイコン
48 [!]アイコン
64 [i]アイコン
戻り値  クリックしたボタンを表すの整数値 [押されたボタンごとの戻り値]
内容
1 [OK]ボタン押下時
2 [キャンセル]ボタン押下時
3 [中止]ボタン押下時
4 [再試行]ボタン押下時
5 [無視]ボタン押下時
6 [はい]ボタン押下時
7 [いいえ]ボタン押下時
-1 どのボタンも押さなかったとき

[サンプルコード]
//  
//  情報の入力方法
//  
//   確認ダイアログボックスを表示する。
//  

//  ボタンの種類
var BTN_OK                 = 0;    // [OK]ボタン
var BTN_OK_CANCL           = 1;    // [OK][キャンセル]ボタン
var BTN_STOP_RETRI_DISRGRD = 2;    // [中止][再試行][無視]ボタン
var BTN_YES_NO_CANCL       = 3;    // [はい][いいえ][キャンセル]ボタン
var BTN_YES_NO             = 4;    // [はい][いいえ]ボタン
var BTN_RETRI_CANCL        = 5;    // [再試行][キャンセル]ボタン

//  アイコンの種類
var ICON_STOP              = 16;   // [Stop]アイコン
var ICON_QUESTN            = 32;   // [?]アイコン
var ICON_EXCLA             = 48;   // [!]アイコン
var ICON_I                 = 64;   // [i]アイコン

//  押されたボタンごとの戻り値
var BTNR_OK                =  1;   // [OK]ボタン押下時
var BTNR_CANCL             =  2;   // [キャンセル]ボタン押下時
var BTNR_STOP              =  3;   // [中止]ボタン押下時
var BTNR_RETRI             =  4;   // [再試行]ボタン押下時
var BTNR_DISRGRD           =  5;   // [無視]ボタン押下時
var BTNR_YES               =  6;   // [はい]ボタン押下時
var BTNR_NO                =  7;   // [いいえ]ボタン押下時
var BTNR_NOT               = -1;   // どのボタンも押さなかったとき


//  Windowsシェルへのアクセスを提供するオブジェクト
var sh = new ActiveXObject( "WScript.Shell" );

//  ポップアップウインドウを表示(10秒後に自動終了)
var rtn = sh.Popup( "ボタンを押してください!", 10, "確認", (BTN_YES_NO_CANCL + ICON_QUESTN) );

//  オブジェクトを解放
sh = null;

//  戻り値を表示
WScript.Echo( rtn );


[実行結果]
 ポップアップウインドウに「ボタンを押してください!」と表示され、[はい][いいえ][キャンセル]ボタンが選択できます。
選択すると選択したボタンごとの戻り値をメッセージボックスで表示します。

 ファイルフォルダドラッグ&ドロップして、ドラッグ&ドロップしたファイルフォルダパスを実行時の入力情報として渡すことが出来ます。
以下のプロパティから取得することが出来ます。
注意事項としてドラッグ&ドロップで入力できるサイズに限界があるようなで深い階層のファイルを沢山ドラッグ&ドロップした場合、実行時エラーが発生する。
限界がどれぐらいかは、詳しく試したことがないですが以外に限界量は低いみたいです。

プロパティ名
 WScript.Arguments;

プロパティ説明
 WshArgumentsオブジェクト(引数のコレクション)を参照するプロパティ。

引数
 なし

戻り値
 WshArgumentsオブジェクト(引数のコレクション)

[サンプルコード]
//  
//  情報の入力方法
//  
//   ドラッグ&ドロップによるパス情報の入力。
//  

//  ドラッグ&ドロップしたパス情報を取得
var args = WScript.Arguments;

//  ドラッグ&ドロップした数分表示
for( var i=0; i<args.length; i++ )
    WScript.Echo( args(i) );


[実行結果]
 実行方法としては、サンプルコードが記載されたJScriptファイルにファイルまたはフォルダ、もしくは両方をドラッグ&ドロップしてください。
出力結果としてはドラッグ&ドロップしたファイル及びフォルダのパスをドラッグ&ドロップした数分メッセージボックスで表示されます。

 テキストファイル内の文字列を読みむには以下のサンプルコードで実現できます。
今回は使用している関数の説明はなしとします。
詳しく知りたい場合は、テキストファイル操作を参照してください。

[サンプルコード]
//  
//  情報の入力方法
//  
//   テキストファイルから1行ずつ文字列を読み込む。
//  

//  ファイル関連の操作を提供するオブジェクトを取得
var fs = new ActiveXObject( "Scripting.FileSystemObject" );

//  ファイルを開く
var file = fs.OpenTextFile( "C:/Info.txt" );

//  ファイルの終端まで1行ずつメッセージボックスで表示
while( !file.AtEndOfStream )
    WScript.Echo( file.ReadLine() );

//  ファイルを閉じる
file.Close();

//  オブジェクトを解放
fs = null;


[実行結果]
 実行前に、「C:」ドライブの直下の階層に「Info.txt」の名前のファイルを作成し、ファイル内に3行程度適当な文字列を入力してください。
その後、実行すると一行目から順にメッセージボックスで文字列が表示されます。
 ファイル選択ダイアログボックスを使用するには以下の関数プロパティを利用することで実現できます。
それから、以下のサンプルをで使い方を紹介していますのでご参照ください。
関数名
 object.ShowOpen();

関数説明
  ファイル選択ダイアログボックスを表示する。

引数
 object・・・・・・ファイル選択ダイアログボックスの機能を提供するオブジェクト

戻り値
 なし


プロパティ名
 object.InitialDir;

プロパティ説明
  ファイル選択ダイアログボックスの表示時の初期のディレクトリのパスを
 管理するプロパティ。
 未設定の場合、現在のカレントディレクトリが初期のディレクトリとなる。
 注意として、ディレクトリ間の繋ぎ文字は「/」ではなく、「\」を使用すること。
 
 例 「C:/TEST/EX」 ×
   「C:\\TEST\\EX」○

引数
 object・・・・・・ファイル選択ダイアログボックスの機能を提供するオブジェクト

戻り値
 ファイル選択ダイアログボックスの表示時の初期のディレクトリのパス


プロパティ名
 object.Filter;

プロパティ説明
  ファイル選択ダイアログボックスのファイルの種類のフィルターを
 管理するプロパティ。
 設定内容は、表示名、正規表現を「|」区切りの文字列で、設定例を以下に示します。
 
 object.Fillter = "テキストファイル|*.txt|Excelファイル|*.xls|全てのファイル|*.*";

引数
 object・・・・・・ファイル選択ダイアログボックスの機能を提供するオブジェクト

戻り値
 ファイル選択ダイアログボックスのファイルの種類のフィルター値
 

プロパティ名
 object.FilterIndex;

プロパティ説明
  ファイル選択ダイアログボックスの初期表示時のファイルの種類の
 フィルタ番号を管理するプロパティ。
 上記、「object.Fillter」で指定したフィルタの初期表示時の選択項目の
 番号で、1から始まる番号です。

引数
 object・・・・・・ファイル選択ダイアログボックスの機能を提供するオブジェクト

戻り値
 ファイル選択ダイアログボックスの初期表示時のファイルの種類のフィルタ番号
 

プロパティ名
 object.Flags;

プロパティ説明
  ファイル選択ダイアログボックスのオプションを管理するプロパティ。
 ファイルを複数選択できるようにしたり、読取専用のチェックボックスを
 非表示にしたりというオプションの設定を提供しています。
 とりあえず、オレ的に調べて使うだろうな〜と思ったものを以下にまとめてみました。

[ファイル選択ダイアログボックスのオプション]
内容
0 全てのオプションがない状態
1 読み取り専用チェックボックスをオンにする
4 読み取り専用チェックボックスを表示しない
512 ファイルを複数選択を可能にする
4096 既存のファイルだけ入力できるようにする
引数  object・・・・・・ファイル選択ダイアログボックスの機能を提供するオブジェクト 戻り値  ファイル選択ダイアログボックスのオプション

[サンプルコード]
//  
//  情報の入力方法
//  
//   ファイル選択ダイアログボックスを表示する。
//  

//  ファイル選択ダイアログボックスのオプション
var OFN_NON                 =    0;     // 全てのオプションがない状態
var OFN_READONLY            =    1;     // 読み取り専用チェックボックスをオンにする
var OFN_HIDEREADONLY        =    4;     // 読み取り専用チェックボックスを表示しない
var OFN_ALLOWMULTISELECT    =  512;     // ファイルを複数選択を可能にする
var OFN_FILEMUSTEXIST       = 4096;     // 既存のファイルだけ入力できるようにする

//  ファイル選択ダイアログボックスの機能を提供するオブジェクト
var fop = new ActiveXObject( "UserAccounts.CommonDialog" );

//  初期表示のディレクトリパスを設定
fop.InitialDir = "C:\\";

//  フィルタを設定
fop.Filter = "テキストファイル|*.txt|Excelファイル|*.xls|全てのファイル|*.*";

//  初期フィルタの番号(Excelファイル)
fop.FilterIndex = 2;

//  オプション設定
fop.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;

//  ファイル選択ダイアログボックスを表示
var rtn = fop.ShowOpen();

//  キャンセルボタンを押されたとき
if( rtn  ==  0 )
    WScript.Echo( "キャンセルボタンが押されました。" );
else
    WScript.Echo( fop.FileName );

//  オブジェクトを解放
fop = null;


[実行結果]
 ファイル選択ダイアログボックスが表示されます。
オプションとして読取専用チェックボックスは表示されないのと、存在しないファイルを指定するとエラーが発生するようにしています。

 ファイル保存ダイアログボックスを使用するには以下の関数プロパティを利用することで実現できます。
それから、以下のサンプルをで使い方を紹介していますのでご参照ください。
関数名
 object.OpenFileSaveDlg();
 
関数説明
  ファイル保存ダイアログボックスを表示する。

引数
 object・・・・・・ファイル保存ダイアログボックスの機能を提供するオブジェクト

戻り値
 なし


プロパティ名
 object.FileType;

プロパティ説明
  ファイル保存ダイアログボックスのファイルの種類のフィルターを
 管理するプロパティ。
 ・・・、正直このプロパティの使い方は謎すぎてわかりません。
 とりあえず文字列を設定すればそれがそのまま表示されますが、
 複数設定する方法がわからないままでした。
 それと、「*.txt」とか設定しても別にテキストファイルだけ
 表示されるわけでもなく、どんなファイルも表示されるし、もはやお手上げです。
 誰か教えてくれ。f^^

引数
 object・・・・・・ファイル保存ダイアログボックスの機能を提供するオブジェクト

戻り値
 ファイル保存ダイアログボックスのファイルの種類のフィルター値


プロパティ名
 object.FileName;

プロパティ説明
  ファイル保存ダイアログボックスの表示時の初期のディレクトリのパスを
 管理するプロパティ。
 未設定の場合、現在のカレントディレクトリが初期のディレクトリとなる。
 パスの最後尾にファイルの種類の正規表現を設定することで、正規表現した
 種類のファイルだけダイアログボックスで表示されます。
 設定例は以下を参照してください。
 
 例 object.FileName = "C:\\TEST\\*.txt";	(この例だとテキストファイルのみ)
 例 object.FileName = "C:\\TEST\\*.*";	(この例だと全てのファイル)
 
 注意として、ディレクトリ間の繋ぎ文字は「/」ではなく、「\」を使用すること。
 
 例 「C:/TEST/EX」 ×
   「C:\\TEST\\EX」○

引数
 object・・・・・・ファイル保存ダイアログボックスの機能を提供するオブジェクト

戻り値
 ファイル保存ダイアログボックスの表示時の初期のディレクトリのパス


[サンプルコード]
//  
//  情報の入力方法
//  
//   ファイル保存ダイアログボックスを表示する。
//  

//  ファイル保存ダイアログボックスの機能を提供するオブジェクト
var fsv = new ActiveXObject( "SAFRCFileDlg.FileSave" );

//  初期表示のディレクトリパスを設定
fsv.FileName = "C:\\TEST\\1\\*.txt";

//  ファイルタイプを設定
fsv.FileType = "テキストファイル";

//  ファイル保存ダイアログボックスを表示
var rtn = fsv.OpenFileSaveDlg();

//  キャンセルボタンを押されたとき
if( rtn  ==  0 )
    WScript.Echo( "キャンセルボタンが押されました。" );
else
    WScript.Echo( fsv.FileName );

//  オブジェクトを解放
fsv = null;


[実行結果]
 ファイル保存ダイアログボックスが表示されます。
オプションとしてダイアログボックス内に表示されるファイルの種類はテキストファイルのみです。

 フォルダ選択ダイアログボックスを使用するには以下の関数を利用することで実現できます。
それから、以下のサンプルをで使い方を紹介していますのでご参照ください。
関数名
 object.BrowseForFolder( Hwnd, sTitle, iOptions, [vRootFolder] );
 
関数説明
  フォルダ選択ダイアログボックスを表示する。

引数
 object・・・・・・ShellApplicationオブジェクト
 Hwnd・・・・・・・ダイアログボックスの親ウインドウのハンドル(スクリプトでは
          通常扱えないデータなので「0」を設定すること)
 sTitle・・・・・・ダイアログ内で表示されるタイトル
 iOptions・・・・・ダイアログのオプションで、とりあえずオレ的に調べて
          使うだろうな〜と思ったものを以下にまとめてみました。

[フォルダ選択ダイアログボックスのオプション]
内容
0 全てのオプションがない状態
16 フォルダ名を指定するテキストボックスも表示
512 新しいフォルダボタンを非表示にする
 vRootFolder ・・・フォルダ選択ダイアログが最初に表示するディレクトリへのパス。           指定した階層より上の階層は選択できなくなります。(省略可能)           省略時は「""」を設定したことと同様で、以下の画像のような           表示となります。           (パスは「/」を使用せず「\」を使用してください)              戻り値  ダイアログボックスで選択したフォルダへのFolderオブジェクト(ただし、  FileSystemObjectで提供しているものとは別物らしいですので、こちらを参照。)

[サンプルコード]
//  
//  情報の入力方法
//  
//   フォルダ選択ダイアログボックスを表示する。
//  

//  フォルダ選択ダイアログボックスのオプション
var BIF_NON                 =   0;  // 全てのオプションがない状態
var BIF_EDITBOX             =  16;  // フォルダ名を指定するテキストボックスを表示
var BIF_NONEWFOLDERBUTTON   = 512;  // 新しいフォルダボタンを非表示にする

//  Shell関連の操作を提供するオブジェクトその2を取得
var sh = new ActiveXObject( "Shell.Application" );

//  親ウインドウのハンドルを設定(基本的にこれは初期値「0」)
var hWnd = 0;

//  ダイアログボックスに表示するタイトルを設定
var title = "フォルダを選択";

//  オプションを設定
var op = BIF_EDITBOX;

//  初期表示のディレクトリパスを設定
var initPath = "C:\\TEST";

//  フォルダ選択ダイアログボックスを表示
var folder = sh.BrowseForFolder( hWnd, title, op, initPath );

//  キャンセルボタンを押されたとき
if( folder  ==  null )
    WScript.Echo( "キャンセルボタンが押されました。" );
else
    WScript.Echo( folder.Items().Item().Path );

//  オブジェクトを解放
sh = null;


[実行結果]
 フォルダ選択ダイアログボックスが表示されます。
オプションとしてフォルダ名を指定するテキストボックスが表示されています


結果の出力方法へ 目次 テキストファイル操作へ