输出字符串到cmd显示为右但未识别为命令

时间:2014-01-28 07:33:43

标签: c++ cmd

我正在使用WriteConsoleOutputCharacter在控制台上写一个字符串。我的目标是,如果该字符串是一个命令,那么我可以正常执行它(通过按Enter键)。但结果是,虽然我有命令显示好吧,它无法执行。当我点击进入时,cmd只是忽略它并显示一个新行,就像前一个是空的一样。有没有办法强制cmd将其视为命令? 这就是我所做的:

HANDLE hStdout;
CONSOLE_SCREEN_BUFFER_INFO csbi; 

void dir( HANDLE hConsole )
{
    DWORD cCharsWritten;
    COORD  crCurr;
    GetConsoleScreenBufferInfo(hStdout, &csbi);
    crCurr = csbi.dwCursorPosition;

    std::wstring ss;
    ss=std::wstring(L"dir ");

    SetConsoleCursorPosition( hConsole, crCurr );

    if( !WriteConsoleOutputCharacter( hConsole,         
                                ss.c_str(),     
                                (DWORD)ss.length(),       
                                crCurr,     
                                &cCharsWritten ))
    {
      return;
    }

}

int main( void )
{
    hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
    GetConsoleScreenBufferInfo(hStdout, &csbi);
    dir(hStdout);
    return 0;
}

我得到的结果是

C:\Users\..\Desktop>prog.exe
dir

这不行,因为我错过了“C:\ Users .. \ Desktop>”提示输入新命令的部分。 所以我想我会使用start / B方法执行我的程序来获得提示。现在输出是

C:\Users\..\Desktop>start /B prog.exe
C:\Users\..\Desktop>dir

但是当我点击回车时没有执行dir命令,我只是换了一行。

C:\Users\..\Desktop>start /B prog.exe
C:\Users\..\Desktop>dir
C:\Users\..\Desktop>

1 个答案:

答案 0 :(得分:0)

WriteConsoleOutputCharacter是一个写入控制台的函数。它不会将其提供给控制台应用程序本身的输入缓冲区。为此,您需要将其提供给cmd.exe上的stdin,而不是在控制台的输出上绘制它。这样做的方法是打开控制台,例如_popen(或某个较低级别CreateProcess,然后将I / O重定向到管道)。然后,将要执行的命令提供给管道。然后cmd.exe会认为它已被输入,并执行命令。