コマンドプロンプトに文字列表示

解決


つとむ  2007-03-02 19:02:38  No: 98186

いつもお世話になっております。

コマンドプロンプトから作成したEXEをたたいて処理をしたいのですが、
引数の取得はCommand関数で取得できるのはわかったのですが、
逆にコマンドプロンプトに指定した文字列を表示したい場合は
どうすればよいのでしょうか?
ご教授お願いします。


ガッ  2007-03-02 19:11:37  No: 98187

ゴリ押しするならAllocConsoleなど、コンソールを扱うWinAPIを見ていってください。
何とかなるはずです。

また、VB.NETならコンソールアプリケーションを作ることが出来たはずです。
VB6でないのならば試してみてください。


つとむ  2007-03-02 19:15:35  No: 98188

ガッさん早急な回答ありがとうございます。

開発言語を記載し忘れました。VB6.0です。
AllocConsole APIを調べてみます。
#ゴリ押ししかないのか。。。。


つとむ  2007-03-02 19:23:45  No: 98189

AllocConsoleでは別Windowのコマンドプロンプトが起動されてしまうようです。
http://madia.world.coocan.jp/vb/vb_bbs2/200311_03110088.html

こちらの方と同じようなやりかたをしたいのですが、
ご教授お願いします。


ガッ  2007-03-02 19:39:53  No: 98190

hmm・・・
こちらは参考になるでしょうか?
http://madia.world.coocan.jp/cgi-bin/DelphiBBS/wwwlng.cgi?print+200311/03110004.txt


ガッ  2007-03-02 20:09:15  No: 98191

ググってみました
http://www.google.co.jp/search?complete=1&hl=ja&q=vb6+%E6%A8%99%E6%BA%96%E5%87%BA%E5%8A%9B&lr=

とりあえず、起動したコマンドプロンプトに出力するのは難しい(無理?)な感じがします。


魔界の仮面弁士  2007-03-02 21:28:53  No: 98192

手元の VB6 + WinXP 環境では、下記のソースを
=======
C:\>Project1 | more
=======
というコマンドで実行させることで、標準出力に吐く事ができました。


Private Sub Command1_Click()
    Dim FSO As Scripting.FileSystemObject
    Set FSO = New Scripting.FileSystemObject
    Dim Stm As Scripting.TextStream
    On Error Resume Next
    Set Stm = FSO.GetStandardStream(StdOut, False)
    If Err.Number <> 0 Then
        MsgBox "標準出力を開けません。" & vbCrLf & _
            CStr(Err.Number) & ":" & Err.Description, _
            vbExclamation
    Else
        Stm.Write Text1.Text
        Stm.Close
    End If
End Sub


つとむ  2007-03-05 10:47:33  No: 98193

魔界の仮面弁士さん
サンプルコードまで記載して頂き本当にありがとうございます。
わがままを言って申し訳ないのですが、moreは無しで標準出力は
ガッさんがおっしゃているようにできないのでしょうか。

------イメージ------
C:\>
C:\>Project.exe
Project.exe -i [filePath]
            -o [logFilePath]
C:\>
---------------------


ガッ  2007-03-05 11:09:37  No: 98194

ホストがVB6のままは無理じゃないかな?ということなんですが、
魔界の仮面弁士さんのような方法なら可能ということです。
(つまりホストをVB6ではなくコンソールベースのものにすると簡単)

魔界の仮面弁士さんの方法を応用してバッチファイルで囲ってしまうとか、
VBScript側でActiveXEXEにしたアプリケーションを起動してみるとかがありますね。

rem バッチファイルで囲ってしまう方法
rem ----Project1.bat
@echo off
Project1.exe | more

このようなバッチファイルを作れって魔界の仮面弁士さんのアプリケーションを同ディレクトリに配置すれば
アプリケーションの終了と同時に出力されるはずです。


もげ  2007-03-05 11:13:29  No: 98195

'VB2005か素直にVBScriptにでもしたほうがいいような気もしますが

Project1.exeに対してLINK.EXEを実行して、
コンソールアプリとして再リンクしてあげれば、moreは不要でした。
(WinXPProSP2+VB6.0SP6)


Sub Main()
    Dim FSO As Scripting.FileSystemObject
    Set FSO = New Scripting.FileSystemObject
    Dim Stm As Scripting.TextStream
    On Error Resume Next
    Set Stm = FSO.GetStandardStream(StdOut, False)
    If Err.Number <> 0 Then
        MsgBox "標準出力を開けません。" & vbCrLf & _
            CStr(Err.Number) & ":" & Err.Description, _
            vbExclamation
    Else
        Stm.Write "Moge ..."
        Stm.Close
    End If

End Sub

"C:\Program Files\Microsoft Visual Studio\VB98\link.exe" /EDIT /SUBSYSTEM:CONSOLE Project1.exe


http://www.xaprb.com/blog/2005/10/14/how-to-create-a-vb6-console-program/


つとむ  2007-03-06 10:29:31  No: 98196

返信が遅くなって申し訳ありません。
魔界の仮面弁士さんのサンプルにもげさんにおっしゃたリンカの方法で
うまく実装できました。

ガッさん、魔界の仮面弁士さん、もげさんありがとうございました。


※作成する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。







   このエントリーをはてなブックマークに追加