输出字符串到cmd显示的右显示,但未被认为是命令
Output string to cmd displayed right but not recognised as command
我正在使用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将认为已输入并执行命令。
相关文章:
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 在命令行上将输入显示到数组中时如何删除 ./a.out?
- 使用 Visual Studio 2019 显示 CMake 的编译器命令行
- 仅禁止显示实际的 make 命令和最终打印语句
- 如何在IDE中而不是在命令提示符中显示Visual Studio控制台应用程序输出
- Valgrind 在主机名命令输出中显示内存泄漏
- 当我仅使用链接器选项 /LTCG时,为什么Visual Studio在Linker命令行中显示选项 /PGD
- 输出字符串到cmd显示的右显示,但未被认为是命令
- 如何在Visual Studio中显示命令参数
- 如何在命令行lldb中显示CGAL异常
- C++函数系统(命令)的输出在Linux终端中不显示颜色
- 整数命令行参数都显示为2
- 命令提示符未显示
- 在 C++ 中使用 -s for make 命令时不会显示哪些消息?
- C++禁止显示命令提示符
- 显示命令行应用程序中的进度
- *忽略* C++和 C# 如何在命令行中显示百分比
- 在变量上显示默认文本,用户可以在C++命令行程序上编辑这些变量
- 使用Qt Creator和CMake显示命令提示符
- 如何在——help输出中显示命令行操作数描述