输出字符串到cmd显示的右显示,但未被认为是命令

Output string to cmd displayed right but not recognised as command

本文关键字:显示 命令 认为是 字符串 cmd 输出      更新时间:2023-10-16

我正在使用writeconsoleoutputputhacter在控制台上写下字符串。尽管我的命令显示好的,但无法执行它。当我击中时,输入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

,但是当我击中Enter时未执行DIR命令,我只会得到一条新行。

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

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