0

現在、AutoIt でコマンド ライン アプリケーションを作成していますが、開いたコマンド ラインに出力するのに問題があります。私の目標は、プログラム全体を 1 つのシェル内で動作させることです。最初に試したのは次のとおりです。

;myprogram.au3
$MyCommand = 'dir'
Run(@ComSpec & " /c " & $MyCommand, @SystemDir, @SW_Show)
Run(@ComSpec & " /c @echo off && echo Command completed successfully. && @echo on", @SystemDir, @SW_Show)

次に、それをコンパイルして、コマンド ラインから実行しました (各コード ボックスは新しいシェルを表します)。

C:\Users\Matthew>myprogram.au3
C:\Users\Matthew>

新しいシェルを開く ↓</p>

Volume in drive C has no label.
Volume Serial Number is 0287-990C
Directory of C:\Users\Matthew
<Finishes normal dir command output>

終了したら、ディレクトリ内のファイルを一覧表示して終了します

新しいシェルを開く ↓</p>

The command completed successfully.

そして、そのウィンドウはすぐに閉じます。

私が探している出力は同じものですが、次のように 1 つのウィンドウに表示されます。

C:\Users\Matthew>myprogram
*Output of dir command*
The command completed successfully
C:\Users\Matthew>
4

2 に答える 2

1

これを機能させるには、プロジェクトをコンソール アプリケーションとしてコンパイルします。これは、コンパイル時に「GUI EXE の代わりに CUI を作成」チェックボックスをチェックすることで、やや不可解な名前が付けられたものにチェックを入れることで実行できます。myprogram.exe次に、代わりにシェルから呼び出します.au3

#include <Constants.au3>

;myprogram.au3
$MyCommand = 'dir'
Local $foo = Run(@ComSpec & " /c " & $MyCommand & " \& echo Command completed successfully.", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

Local $output
While 1
    $output = StdoutRead($foo)
    If @error Then ExitLoop
    ConsoleWrite($output)
Wend
于 2012-08-15T22:28:39.013 に答える