(for Internet Explorer)
g_CUI.m_Auto_DebugCount = 1
cscript.exe  sample.vbs /set_input:1.2. /set_input_debug:1
VBS のソース
コマンドライン
を指定したときに、1つずつ Enter キーを入力するまで待ちます。
(src)
関連
指定した値の回数目の入力から待ちます。
これにより、ユーザーの入力を自動的に行うときに、入力内容を確認しながら実行できます。
で cscript.exe を起動したプロセスで input を使うと、
標準入力待ちでハングアップするので、代わりに内部で、GUI から入力する
が呼ばれます。
InputBox が呼ばれるかどうかは、スクリプトを起動したときに指定するコマンド
ライン・オプションに /GUI_input:1 を指定したかどうかで決まります。 RunProg
で、cscript を起動すると、/GUI_input:1 は、自動的に指定されます。
子プロセスで pause したとき、pause メッセージを子プロセスから受け取ったら
親プロセスで、Enter の入力待ちをします。 Enter を押したら、子プロセスの
標準入力にも Enter を転送します(EchoStream関数)。 自動入力するときは、
pause メッセージに少し手を加えて、親プロセスで待たないようにします。
input を呼び出したとき、コマンドライン・スクリプトでも、強制的に GUI から入力する
オプションです。
cscript Sample.vbs /GUI_input
起動コマンドの例:
テスト
参考
→ vbslib.vbs
ソース
Function  InputPath( Prompt as string, Flags as integer ) as string
プロンプトを表示し、ユーザからファイルのパス(場所)の入力を待ちます。
【引数】
Prompt
Flags
表示する内容
0 または c.CheckFileExists など(下記)
ユーザが入力したパス、入力なし=""
返り値
ユーザは、 " "で囲んだパスを入力することができます。このとき、返り値は、" " を含みません。
サンプル
    Set c = g_VBS_Lib
    echo "[SampleTool]"
    path = InputPath( "path>", c.CheckFileExists or c.CheckFolderExists or _
        c.UseArgument1 or c.AllowEnterOnly )
    If path = "" Then  path = GetPathOfClipboardText()
(src)
Flags 引数
[SampltTool]
path>aaa
not found
path>C:\
下記を設定します。 複数設定するときは、or してください。 c は g_VBS_Lib です。 何も設定しない
ときは、0 を指定してください。
ファイルとして存在するかチェックします。
フォルダとして存在するかチェックします。
何も入力しなかったときに再入力を要求しません。 このとき、返り値=""
ファイル:
vbslib.vbs
関連
テスト
→ Test.vbs # T_InputPath_WorkFolder_File
サンプル画面
サンプル
  Dim  path, param

  If ArgumentExist( "Path" ) Then
    path = WScript.Arguments.Named.Item( "Path" )
    echo  "パス>"+ path
  Else
    path = InputPath( "パス>", Empty )
  End If

  param = input( "Param>" )
Linux のパスも入力できるようにするとき
Linux のパスは、オプションと解釈されてしまうため、/Path オプションを使って指定して
ください。
cscript  Sample.vbs /Path:/home/user1/file Param2
→ Test.vbs # T_InputCommand_WindowsParam
→ Test.vbs # T_InputCommand_LinuxParam
→ Test.vbs # T_InputPathArg
スクリプトを起動したときの第1パラメーターがあれば、それを入力とする (*1)
スクリプトを起動したときの第2パラメーターがあれば、それを入力とする (*1)
InputPath
(*1)
で指定した自動入力の内容や
UseArgument1 や UseArgument2 を指定した場合、
は、次の番目に進みません。 次の自動入力や
パラメーターの番目がいくつのときでも指定した番目のものが入力できるからです。
c.AllowWildcard
ワイルドカードが入力できるようにします。
相対パスを入力したら、
 を基準とした相対パスとみなし、返り値は、フル パスに
なります。 InputPath を呼び出す前に、g_start_in_path は、変更することができます。
${ から始まる入力をしたときは、フル パスを値に持つ
であるとして、フル パスに
しません。
Sub  InputCommand( LeadOrOpt as string or InputCommandOpt, Prompt as string,
                   Opt as variant, AppKey as AppKeyClass )
に入ります。 入力するコマンドは、呼び出す関数の名前です。
【引数】
LeadOrOpt
Prompt
リード文、または、オプション
プロンプトの表示内容。 Empty="番号またはコマンド"
Main 関数の AppKey 引数
AppKey
Main 関数の Opt 引数
Opt
(src)
Sub  main2( Opt, AppKey )
  InputCommand  "Document.svg を参照 (Google Chrome や Snap Note で見えます)", _
    "コマンド >", Opt, AppKey
End Sub

Sub  SyncSymbols( Opt, AppKey )
  echo  "SyncSymbols 関数が呼ばれました。"
End Sub
サンプル
実行画面
--------------------------------------------------------------------------------
Document.svg を参照 (Google Chrome や Snap Note で見えます)
コマンド >SyncSymbols
--------------------------------------------------------------------------------
SyncSymbols 関数が呼ばれました。
--------------------------------------------------------------------------------
Document.svg を参照 (Google Chrome や Snap Note で見えます)
コマンド >
FuncA コマンドを実行したところ
ユーザーが入力したコマンドと同じ名前の関数が呼ばれます。 たとえば、SymcSymbols と入力したら、
ImputCommand 関数の中から、GetRef 関数を使って、SymcSymbols 関数が呼ばれます。 呼ばれる
関数の引数は、main2 関数と同じ、Opt と AppKey にしてください。
InputCommand
SyncSymbols
Sub  Main( Opt, AppKey )
    Set o = new InputCommandOpt
        o.Lead = "Document.svg を参照 (Google Chrome や Snap Note で見えます)"
        Set o.CommandReplace = Dict(Array( "1","RunProgram", "2","InvestigateLog" ))
        Set o.MenuCaption = Dict(Array( "1","起動コマンド [%name%]" ))
    InputCommand  o, Empty, Opt, AppKey
End Sub

Sub  InvestigateLog( Opt, AppKey )
    Set c = g_VBS_Lib
    path = InputPath( "ログ・ファイルのパス >", c.CheckFileExists )
    key = input( "よろしいですか。[Y/N]" )
    If key<>"y" and key<>"Y" Then   Exit Sub  ' ... Cancel
    Investivate  path
    echo  "解析しました。"
End Sub
メニューから選択する
-------------------------------------------------------------------------------
Document.svg を参照 (Google Chrome や Snap Note で見えます)
 1. 起動コマンド [RunProgram]
 2. InvestigateLog
番号またはコマンド >2
-------------------------------------------------------------------------------
ログ・ファイルのパス >C:\Log\Test_log.txt
よろしいですか。[Y/N]y
解析しました。
下記はメニュー2を選んだところ。 2 の代わりに InvestigateLog も入力できます。
実行画面
→ T_InputCommand_Manually.vbs # main
テスト
Class  InputCommandOpt
  Public  Lead            '// as string
  Public  CommandReplace  '// as Dictionary of string
  Public  MenuCaption     '// as Dictionary of string
  Public  AllTestName     '// as string
End Class
InputCommand
コマンド >SyncSymbols
Sub  SyncSymbols( Opt, AppKey )
  echo  "SyncSymbols 関数が呼ばれました。"
End Sub
ImputCommand  Empty, "コマンド >"
C:\Log\Test_log.txt
vbslib.vbs
ファイル:
InputCommand 関数を呼び出すスクリプトは、起動するときに専用コマンドをパラメーターに指定すると、
ユーザの入力待ちにはならず、InputCommand 関数の中からすぐに専用コマンドに対応する関数を呼び
出すようになります。 関数から返ったら(InputCommand から返り)、スクリプトのプロセスは終了します。
専用コマンド名の次やそれ以降のパラメーター(上記の C:\folder\file.txt と y )は、内部で
に渡されて、自動的に入力するようになります。 ただし、Enter の入力は "." と記述するのではなく、
パラメーターの区切りが Enter の入力になります。 Enter のみの入力をしたいときは、下記のように
cmd.exe から起動して、"" を指定してください。
y
2
関連
→ T_InputCommand_Target2.vbs # [main2]
→ T_InputCommand_Target.vbs # [main2]
→ Test.vbs # T_InputCommand_Param
  Dim  r
  r = RunProg( "cscript.exe  //nologo """+ SearchParent( "Prompt.vbs" )+_
     """ CommandA  param1 """"", "out.txt" )
  CheckTestErrLevel  r
  Assert  "out.txt", "T_ans.txt"
  del  "out.txt"
コマンド >CommandA
入力1 >param1
入力2 >
実行しました。
親フォルダーにある Prompt.vbs から起動できるショートハンド・プロンプトに、
CommandA コマンドを入力、入力1に param1 を入力、入力2に Enter のみ
入力するときの、テスト・スクリプトは、下記のようになります。
Prompt.vbs
CommandA
param1
""""
コマンド入力するときに、「AllTest」 と入力すると、InputCommandOpt クラスの CommandReplace に登録
した関数をすべて呼び出します。 コマンド名を 「AllTest」 以外にしたいときは、InputCommandOpt クラスの
AllTestName を設定してください。
  Dim  r
  r = RunProg( "cscript //nologo T_Target.vbs AllTest", "" )
  CheckTestErrLevel  r
参考
CommandA
param1
T_ans
Sub  CommandA( Opt, AppKey )
dbg = Opt("command_debug")
Set c = g_VBS_Lib

If dbg Then g_CUI.m_Auto_KeyEnter = "/"
If dbg Then set_input  "C:\Folder\File1.txt"
  path = InputPath( "ファイルのパス >", c.CheckFileExists )
   :
End Sub

Sub  CommandA_debug( Opt, AppKey )
  Opt("command_debug") = True
  CommandA  Opt, AppKey
End Sub
dbg = Opt("command_debug")


If dbg Then g_CUI.m_Auto_KeyEnter = "/"
If dbg Then set_input  "C:\Folder\File1.txt"
Sub  CommandA_debug( Opt, AppKey )
  Opt("command_debug") = True
  CommandA  Opt, AppKey
End Sub
下記のようにして、CommandA_debug コマンドを起動すると、入力する内容を自動的に入力します。
プロンプトのみ(メニュー項目なし)
キーワード:
すぐに関数を呼び出したかどうかをスクリプト内で判断したいときは、
g_InputCommand_Args
.Count
が 1 以上かどうかで判定します。
CommandReplace は、要素番号 0 から始まる配列で、
要素番号が偶数の要素は、コマンドの番号または略称、
要素番号が奇数の要素は、実行する関数名です。
Lead は、ショートハンド・プロンプトの最初に表示される「リード文」です。
MenuCaption は、要素番号 0 から始まる配列で、
要素番号が偶数の要素は、コマンドの番号または略称、
要素番号が奇数の要素は、ショートハンド・プロンプトに表示されるメニュー項目です。
Dim  g_InputCommand_Args  as array of string
のパラメーター。
g_InputCommand_Args(0) は、専用コマンド名、g_InputCommand_Args(1) 以降は、パラメーターです。
    Set parameters = new_ArrayClass( g_InputCommand_Args )
    If parameters.Count >= 1 Then _
        parameters.Remove  0, 1  '// Remove special command name
    parameters = CmdLineFromStr( parameters.Items )
    set_input  ""  '// 現在のプロセスに設定されている自動入力データをクリアする

    RunProg  "cscript //nologo  Prompt.vbs  CommandX_Child  "+ _
        parameters +"  /g_debug__:1", ""
サンプル
子プロセスにパラメーターを渡します。
g_InputCommand_Args.Count = 0 のときは、対話式のショートハンド・プロンプトが使われてます。
g_InputCommand_Args.Count >= 1 のときは、ショートハンド・プロンプトをバッチ処理で実行しています。
Function  ChangeNumToCommandOrNot( in_Key as string, in_CommandDictionary as dictionary of string, _
    in_NumName as string, in_IsInputNumOrCommand as boolean ) as string
リストとコマンド番号が重なったときは、どちらかキーボードから選択するようにユーザーに要求しjます。
【引数】
in_Key
in_CommandDictionary
入力した番号の文字列
コマンド名の辞書。 キー=番号の文字列
リストの項目の名前
in_NumName
→ T_Value.vbs
テスト
→ vbslib.vbs
ソース
返り値
番号(リストの項目の番号の文字列)、または、コマンド名
in_Key の番号にリストの項目があるかどうか
in_IsInputNumOrCommand
(src)
参考
Sub  SendKeys( WindowTitle as string, KeyCords as string, LateTime as integer )
キーボード入力をエミュレーションして自動的にキー操作をします。
【引数】
WindowTitle
KeyCords
"" または、キーボード・コードを送るウィンドウのタイトル(下記)
キーボード・コード (下記)
LateTime
0 または、キーボード・コードを送るまでの時間(ミリ秒)
WindowTitle 引数に指定した文字列が、ウィンドウのタイトルに、前方一致、または、
後方一致したウィンドウに対して、キー操作をします。
  SendKeys  "メモ帳", "%FS", 200
サンプル:
WindowTitle 引数
KeyCords 引数
制御キーの入力は、次のように指定します。
[Alt]+[F], [S]
"%FS"
[Ctrl]+[C]
"^C"
[Enter]
"{ENTER}"
キー入力
KeyCords 引数
[Esc]
"{ESC}"
"{TAB}"
[Tab]
Alt キーを押しながら F、離して S
説明
シフトキーを押しながら連続して、X、P
"+XP"
シフトキーを押しながら、X、離して、P
[Shift]+[X], [P]
[Shift]+[X], [Shift]+[P]
"+(XP)"
[+]
"{+}"
その他のキー
[{]
"{{}"
[[]
"{[}"
ファイル:
vbslib.vbs
テスト
→ T_UI1_Manual.vbs # SendKeys
LateTime 引数
キーコードを送る前に待つ時間を指定します。
直前の処理がウィンドウを開く処理など、キーコードを送る対象が準備できるまでに
時間がかかるときに指定してください。
Alt キー + [F] + [S] …… 保存
Sub  Prompt( TCHAR* Desc, HANDLE* out_Obj );
VBScript が実行できるプロンプトを開始します。
ソース
→ System.vbs
これまでにグローバル変数に設定していた値を参照することもできます。
Prompt 関数を呼び出した関数のローカル変数は参照できません。
参考
  Play  "sample.mp3"
Sub  Play( Path as string )
音楽ファイルや効果音ファイルを鳴らします。
【引数】
Path
.wav, .mp3 などのファイルパス
(src)
動画ファイルを指定すると、音声だけが流れます。
  Play  env( "%windir%\Media\tada.wav" )
鳴らし始めると、すぐに Play 関数から戻り、音声が流れながらスクリプトの続きを実行します。
を使えば、音声が終わるまで待つことができます。
スクリプトを終了すると、音声は止まります。
サンプル
ファイル:
vbslib.vbs
テスト
関連
→ T_Sound.vbs # [T_Sound]
  Play  "sample.mp3"
  WaitForSound  Empty
Sub  WaitForSound( Timeout_msec as integer )
で再生した音声が終わるまで待ちます。
【引数】
Timeout_msec
タイムアウト(ミリ秒)、または Empty (タイムアウトなし)
(src)
タイムアウトになったら、音声は停止します。
音声が終わるまで待つ
5秒たっても音声が終わらなかったら止める
  Play  "sample.mp3"
  WaitForSound  5000
  Play  "sample.mp3"
  WaitForSound  0
すぐに音声を止める
サンプル
サンプル
サンプル
Empty
5000
0
vbslib.vbs
ファイル:
テスト
→ T_Sound.vbs # [T_Sound]
関連
Sub  SetVolume( Volume as integer )
音量を設定します。 0 が最小、100 が最大。
【引数】
Volume
音量。デフォルトは 100
(src)
  SetVolume  100
関連
サンプル
vbslib.vbs
ファイル:
テスト
→ T_Sound.vbs # [T_Sound]
  SystemSound  ".Default"
Sub  SystemSound( Sound as string )
コントロールパネルに設定されている効果音を鳴らします。
【引数】
Sound
効果音の種類(下記)
(src)
"SystemAsterisk"
メッセージ(情報)
".Default"
一般の警告音
メッセージ(警告)
"SystemExclamation"
システムエラー
"SystemHand"
メッセージ(問い合わせ)
"SystemQuestion"
Windowsの起動
"SystemStart"
Windowsの終了
"SystemExit"
Windowsログオン
"WindowsLogon"
"WindowsLogoff"
Windowsログオフ
"DeviceConnect"
デバイスの接続
"DeviceDisconnect"
デバイスの切断
"Navigating"
ナビゲーションの開始
(フォルダやハイパーリンクをクリックしたときの音)
音声の止め方や音量の調整は、
と同じです。
しなくても、すぐに音声は停止しません。
スクリプトを終了時に鳴らしても、数秒の効果音であれば、
サンプル
関連
テスト
→ T_Sound.vbs # [T_Sound]
Function  GetTextFromClipboard() as string
クリップボードにあるテキストを返します。
→ T_Clipboard_Manually.vbs # [T_GetTextFromClipboard]
テスト
(src)
クリップボードにテキストが無ければ、E_BadType エラーになります。
ファイル:
vbslib.vbs
使用するには、vbslib フォルダーに、
が必要です。
Function  GetPathOfClipboardText() as string
クリップボードにあるテキストをファイルに出力して、そのパスを返します。
→ T_Clipboard_Manually.vbs # [T_GetTextFromClipboard]
テスト
(src)
クリップボードにテキストが無ければ、E_BadType エラーになります。
ファイル:
vbslib.vbs
使用するには、vbslib フォルダーに、
が必要です。
サンプル
  Set g = g_VBS_Lib
  echo  "Enter のみ:クリップボードの内容を入力とします。"
  path = InputPath( "path>", g.CheckFileExists or g.CheckFolderExists or _
    g.UseArgument1 or g.AllowEnterOnly )
  is_clipboard = False
  If path = "" Then  path = GetPathOfClipboardText() : is_clipboard = True

  If is_clipboard Then  del  path
クリップボードの内容が入ったファイルが不要になったら削除してください。
Sub  SetTextToClipboard( Text as string )
クリップボードにテキストをコピーします。
(src)
→ T_Clipboard_Manually.vbs # [T_GetTextFromClipboard]
テスト
ファイル:
vbslib.vbs
使用するには、vbslib フォルダーに、
が必要です。
辞書に入っているデータをクイックソートします。
配列をクイックソートします。安定ソートではありません。
辞書に入っているデータをシェーカーソートします。
配列をシェーカーソートします。安定ソートです。
文字列を数値に変換します。
配列を扱いやすくするクラスです。
標準の Dictionary の Item を、配列にしたクラスです。
GUID を生成します。
ワイルドカードにマッチするかどうか判定します。
[ テスト ]
その他
関連
文字列を TextStream と同じようにアクセスします。
静的オブジェクトを取得します。
スクリプトファイルから静的オブジェクトを取得します。
スクリプトファイルから静的オブジェクトを一覧します。
静的オブジェクト・スクリプトファイルをインクルードします。
文字列で指定した名前のクラスのオブジェクトを生成します。
配列のすべての要素が等しいか判定します。
Dictionary を配列に変換します。
配列の要素を追加コピーします。
オブジェクトを生成して、辞書に追加します。
登録されていないときも、新規に登録しない辞書参照。
Empty でもオブジェクトでも取得できる辞書参照。
辞書を生成します。
辞書の要素を設定します。
辞書を加算します。
辞書を減算します。
コマンドラインの1項目を取り出し、通常の文字列に戻す。
配列を、NameOnlyClass の配列に変換します。
CSV 形式の1行を解析して、配列に格納する。
CSV 形式の1行を解析して、数値の配列に格納する。
定数
構造化された定数
他にもあります。左のツリーから選択してください。