人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

windowsのアプリケーションに対して、(unixの様に)標準入出力を(ファイルではなく)直接渡すことはできるのでしょうか?
もし可能なら、VB(VBA)でのサンプルコードなど記して頂けると助かります。
(unixの記憶自体かなり曖昧なので変な質問になってしまっているかもしれませんが、ご容赦願います。)

●質問者: oich
●カテゴリ:コンピュータ
✍キーワード:UNIX VB VBA Windows いるか
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● b-wind
●20ポイント

サンプルコードは VB ではないですが、パイプを使うのが多いでしょうかね。

Nの覚書

◎質問者からの返答

パイプの概念はわかるのですが、VBでの実装が可能なのか不可能なのか、というのが知りたかったです。

質問文の書き方が悪かったですね。ごめんなさい。


2 ● ardarim
●20ポイント

Console クラス (System)を使って、標準入出力にアクセスすることが可能です。

上記のページよりサンプルを引用。

Public Shared Sub Main()
 Console.Write("Hola ")
 Console.WriteLine("Mundo!")
 Console.WriteLine("What is your name: ")
 Dim name As String = Console.ReadLine()
 Console.Write("Buenos Dias, ")
 Console.Write(name)
 Console.WriteLine("!")
End Sub 'Main

もちろん、パイプと組み合わせて使うことも可能です。


VBAの場合は、そもそもGUIであるExcelなどのアプリケーション内で動作するため、標準入出力と組み合わせることはできないと思われます。

(理論的には可能でしょうが、使い勝手などに制約があると思います)

◎質問者からの返答

本当に質問文が不適切で申し訳ないです。

VBA上でシェル関数を使って、

ProcID = Shell(アプリケーションのフルパス, vbHide)

などとしてプロセス実行する際の入出力を、(指定したファイル名ではなく)変数と直接受け渡しできるならその方法を知りたい、と思っていました。

Consoleクラスとその周辺を勉強してみようと思います。ありがとうございました。


3 ● thrillseeker
●20ポイント

CGI 用ですが、以下のコードが参考になるかも知れません。

http://www.taquino.net/cooltaq/vbcgi/stdio.html

◎質問者からの返答

教えて頂いたページを基に勉強してみようと思います。ありがとうございました。


4 ● ardarim
●20ポイント

VBA上から、Shell()で起動したアプリケーションの標準入出力を制御することはできません。


Win32 APIであれば、あらかじめパイプを用意しておき、CreateProcessでアプリケーションを起動する際に標準入出力を代替するパイプを指定することができますので、そのパイプを通じて起動したアプリケーションの標準入出力を制御できます。

コンソール プロセスを生成して標準ハンドルをリダイレクトする方法

VBAからでも、Declareなどを駆使すれば同様のことはできる可能性がありますが、難しいと思います。


VB.NETの場合は、Process.ProcessStartInfo.RedirectStandardOutputをTrueにしてからアプリケーションを起動することで、Process.StandardOutputから標準出力の内容を受け取ることができます。(こちらは比較的簡単です)

ProcessStartInfo.RedirectStandardOutput プロパティ (System.Diagnostics)

サンプル

compiler.StartInfo.FileName = "csc.exe"
compiler.StartInfo.Arguments = "/r:System.dll /out:sample.exe stdstr.cs"
compiler.StartInfo.UseShellExecute = False
compiler.StartInfo.RedirectStandardOutput = True
compiler.Start()

Console.WriteLine(compiler.StandardOutput.ReadToEnd())

compiler.WaitForExit()
◎質問者からの返答

ご回答ありがとうございました。

頂いた情報やリンクをもとにいろいろ勉強してみます。


5 ● hirotie
●20ポイント

command関数を使えば出来ませんか?

この関数でアプリケーションとともに入力された引数を取得できないでしょうか?

ProcID = Shell("アプリケーションのフルパス 引数", vbHide)

などとすれば呼び出されたアプリはcommand関数で引数を取得できるとおもいます。

CmdLine = Command()

とすれば変数「CmdLine」へは「引数」が格納されます。

◎質問者からの返答

ご回答ありがとうございました。

command関数は初耳で、情報のご提供自体はありがたいのですが、望んでいた「標準入出力の受け渡し」とはちょっと違うようでした。


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ