如何以编程方式模拟与控制台的交互
How to simulate interaction with console programmatically?
我想知道如何在Windows的命令提示符(CMD)中以编程方式执行命令(如"dir C:\"或"shutdown-r"等)并检索结果输出,当然不会显示黑色CMD窗口。
我怀疑->这个链接<-包含所需API的列表,但我不确定该选择哪些,因此需要您的帮助。
基本上这就是我需要它的原因:我想写一个简单的客户端-服务器应用程序(WinSock),用户可以坐在客户端,在服务器的命令提示符下执行命令(并从中读取回复)。是的-就像Telnet工作一样,但没有Telnet,只有Win32 API。
假设用户想要在服务器上执行"dir"命令。他在客户端应用程序上键入"dir",后者将请求发送到服务器应用程序,在那里执行命令(就像在服务器的命令提示符中实际键入的一样),输出文本将发送回客户端应用程序。
您基本上是在尝试重新实现netcat的许多可能用途之一。通过在windows系统上运行命令提示符:
nc -l -L -e cmd -p 5555
然后从另一个系统运行
nc 192.168.1.xxx 5555
192.168.1.xxx
是windows机器的IP地址,你可以完全按照你所说的做:你键入的任何内容都将在windows机器上"键入",你将从远程执行的命令中获得输出。您也可以在隐藏窗口中运行netcat。
请注意,由于此功能,一些防病毒软件会阻止netcat程序。。。它显然被恶意软件用来将受害者的电脑变成从属机器人。
还要注意,将输入/输出直接路由到cmd
(XP shell)是非常危险的,因为没有任何类型的身份验证:任何人都可以连接到5555端口并在机器上执行命令,除非您处于非常受控的环境中,否则您真的不想允许这样做。
尽管这个答案对于便携式软件来说不是一个好答案,但如果你确信一切正常,它会按照你需要的方式工作:
int system(const char *command);
如果可用,此函数将在shell中执行command
(在windows中为CMD)。
所谓"如果一切都好",我的意思是你的操作系统中有一个外壳,它对你来说是可用的。一般来说,对于窗口来说应该是这样。
如果用NULL
调用它,那么如果shell可用,它将给出非零。如果您给出一个实际的命令,它要么返回指示错误的-1
(例如,无法生成进程),要么返回命令的状态,该状态应与操作系统相关。也许您最关心的是"如果命令失败",您应该通过检查返回值是否为0(0表示良好)来做得很好。
请注意,要获得命令的输出,需要将输出保存在某个位置。例如,执行dir
命令如下:
error = system("dir > temp.txt 2>&1");
然后从CCD_ 7检索其输出。
- Qt VTK交互风格的信号到小部件
- C++:将控制台输出存储在宏中更好吗
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- C++控制台应用程序阻止退出
- 如何修复此iFile以将.txt输出到控制台
- 为什么控制台要求输入,即使代码中没有输入
- Qt Quick-如何仅从c++代码与qml属性交互
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 控制台输出在 Qt5 中未正确显示
- C++出现控制台错误.我无法识别源代码的问题
- 复制和交换习惯用法与移动操作之间的交互
- C++程序不会从 Windows 控制台运行
- 有人可以向我解释为什么控制台输出 0 吗?
- Visual Studio 2017 停止工作,并在打开后显示许多控制台窗口
- 如何从 Win32 C++ 应用程序输出到父控制台窗口?
- C++(DLL)与C#控制台应用程序的交互问题
- 如何以编程方式模拟与控制台的交互
- 如何从Windows Service主函数启动c++本地应用程序(应用程序与控制台交互)?
- 在gui应用程序中进行交互式控制台/窗口交互