
初心者です。
LuaとWSHを使ってスクリプトを作成しています。
Luaの記述でos.executeを使いWSH(.vbs)を実行するのですが、
WSHで得た変数をLua側に渡すことはできますでしょうか?
具体的には(一部抜粋)、
---Lua側---
os.execute(インプット.vbs)
inputxxx = input
---WSH側(インプット.vbs)---
Input = InputBox("数値を入力してください")
という記述で、
Luaを実行し、WSH側のインプットボックスで入力した値(input)を
Lua側の変数inpuxxxに入れたいです。
どなたかお助け頂けると有難いです。
No.2ベストアンサー
- 回答日時:
InputBoxを二つ以上というのは、表示するメッセージや入力後の処理が異なるInputBoxということでしょうか。
数が少なければ個別に作ってもいいのですが、増えると管理が大変です。
1つの方法としては、Luaの関数でVBScriptのInputBoxを呼び出すものを作ってしまうというのがあります。
---Lua側---
function inputbox(prompt)
local handle = io.popen("cscript //nologo インプット3.vbs " .. prompt)
local rv = handle:read("*a")
handle:close()
return rv
end
inputxxx = inputbox("数値を入力してください")
---WSH側(インプット2.vbs)---
set Args = WScript.Arguments
set SO = Wscript.Stdout
if Args.Count > 0 then
p0 = Args(0)
else
p0 = ""
end if
Input = InputBox(p0)
SO.WriteLine Input
およそこんな感じです。
なお、ここではコマンドライン引数を使っていますが、他にパイプを使う方法もあります。
と、ここまで書いて1つ思い出しました。
当方で使っているなでしこ内蔵Luaは日本語に対応していないのでいわゆるSJISの5c問題があります。
質問者様の環境は大丈夫でしょうか。
具体例ですが、Luaで
inputxxx = inputbox("代表値を入力してください")
とすると、メッセージボックスのプロンプトは
代葡lを入力してください
と文字化けしてしまいます。
Luaの文字列処理の問題なので、呼び出す.vbsファイルのファイル名にも同様の現象が発生します。
なおこの場合は、
inputxxx = inputbox("代表\値を入力してください")
で回避できますが、こういう状況ではなるべく日本語は避けたいので、そうなると上に書いたことも採用していいかどうか・・・
対策としては、やや複雑になりますが、日本語の文字列はWSHに持たせておいて、Luaからの指示は数値や英数字の文字列で与えてそれを元にWSHで文字列を選択する、という方法が考えられます。
数が少なければ個別に作った方が楽かもしれません。
参考URL:http://ja.wikipedia.org/wiki/Shift_JIS
No.1
- 回答日時:
LuaからVBScript(インプット.vbs)を起動することはできたのですね。
値をLuaで受ける方法ですが、Windowsのエラー値(?)を使う方法と、パイプで文字列を受ける方法があるようです。
簡単なのはWindowsのエラー値(?)を使う方法です。たとえば以下のようにします。
---Lua側---
inputxxx = os.execute("インプット1.vbs" )
---WSH側(インプット1.vbs)---
Input = InputBox("数値を入力してください")
WScript.Quit Input
ただ、この方法では整数(Long)しか受け取れないですし、なによりエラーが発生した場合の(Windowsが出す本物の)エラー値と通常の戻り値との区別がつきません。
それゆえ、パイプを使って文字列を受ける方がいいと思います。たとえば以下のようにします。
---Lua側---
handle = io.popen("cscript //nologo インプット2.vbs")
inputxxx = handle:read("*a")
handle:close()
---WSH側(インプット2.vbs)---
set SO = WScript.StdOut
Input = InputBox("数値を入力してください")
SO.WriteLine Input
やや細かい話ですが、WScript.StdOutは本来cscript.exe専用のはずです。
しかし今回Luaから呼び出した際には、"cscript //nologo インプット2.vbs"を"wscript //nologo インプット2.vbs"にしても動きました。ところが単に"インプット2.vbs"とするとSO.WriteLineのところでエラーになりました。このあたりどうなっているのかはちょっとわかりません。
また、//nologoオプションはなくても動きますが、万が一にも標準エラー出力のバッファがいっぱいになって停止したりしないように入れておくのがよいと思います。
動作確認ですが、こちらではWindows XP SP3にてなでしこ1.5332内蔵のLuaを用いました。他のLuaでもWindows用のものなら大丈夫なはずです。
http://stackoverflow.com/questions/9676113/lua-o …
http://msdn.microsoft.com/ja-jp/library/cc364475 …
参考URL:http://stackoverflow.com/questions/9676113/lua-o …
ありがとうございます!
こちらの環境でも確認できました!
もうひとつ質問なのですが、InputBoxを二つ以上使用したい場合には、やはりvbsを複数持たせる必要があるのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Eclipseコンソール表示を、リセ...
-
java初心者です。入力されたの...
-
UWSCで変数をキー入力
-
C言語でのカレンダー作成
-
*をユーザーが入力した数字の数...
-
コマンドプロンプトからのEOFの...
-
C言語
-
プログラミング初心者です。 Py...
-
漢字のソートについて
-
C言語 While文(ループ)内の...
-
C言語 逆ピラミッドの作り方
-
最早開始時間と最遅完了時刻を...
-
【C++】関数ポインタの使い方
-
既定のコンストラクタがありま...
-
Aの値からBの値を除するとは??
-
「Aに対するBの割合」と「Aに対...
-
信頼区間の1.96や1.65ってどこ...
-
a^2の√=a が成り立たない場合
-
VB6.0での小数点の扱いについて
-
配列をnビットシフトする
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
数字以外が入力されたらエラー...
-
正負を反転させて出力するプロ...
-
プログラミング初心者です。 Py...
-
*をユーザーが入力した数字の数...
-
java初心者です。入力されたの...
-
コマンドプロンプトからのEOFの...
-
4桁の数字以外を入力したらエラ...
-
Eclipseコンソール表示を、リセ...
-
Excel VBAで、Application.Inpu...
-
"scanf"でエンターで改行させな...
-
cout関数を使っているのですが...
-
プログラミングの問題です 「金...
-
scanf関数について
-
Userformの入力順序をタブオー...
-
C言語でgetchar();が上手く使え...
-
プログラムの実行時に'<'でリダ...
-
C言語初心者です。ファイルの読...
-
scanf が無視されます
-
実行結果の順番がおかしいんで...
-
C言語scanf_sで何故か2回入力に...
おすすめ情報