【问题标题】:Write input to console using C使用 C 将输入写入控制台
【发布时间】:2018-03-17 18:07:06
【问题描述】:

假设我正在更改用户的密码,

#include <stdio.h>
#include <stdlib.h>

int main() {
  system("net user myUsername *");
  return 0;
}

当运行这个程序时,我回来了

Type a password for the user:

如何在不手动输入键盘的情况下使用函数写入控制台?有没有类似

的功能
writeConsoleWindow("myPass");
submitConsole();

【问题讨论】:

  • 为什么不用API
  • 我需要自动化,我为什么要?:) @DavidHeffernan
  • 呃,如果你想以编程方式做某事,请使用 API
  • 我相信应该有办法的。
  • Remy Lebeau 接受的答案的第一部分对于问题中提出的问题是完全错误的。使用管道无法写入 net.exe 的密码提示,因为该程序仅从控制台读取。它需要连接到同一个控制台(例如,在创建子控制台之前分配一个隐藏控制台)并调用WriteConsoleInput,如果有人倾向于编写代码。

标签: c windows winapi command-prompt windows-console


【解决方案1】:

使用CreateProcess() 启动带有重定向STDIN 句柄的cmd.exesystem() 所做的),然后您可以在代码中将数据写入cmd。见Creating a Child Process with Redirected Input and Output

但是,在net user 命令的特定情况下,您应该改用NetUserGetInfo()NetUserSetInfo()NetUserChangePassword() 等函数。

【讨论】:

  • 在这种情况下,OP 需要运行运行 net1.exe 的 net.exe。您的第一个建议将不起作用,因为net1!GetPasswdStr 硬编码在标准输入句柄上调用GetConsoleModeSetConsoleModeReadConsole,以便从控制台并且仅从控制台安全地读取密码。这对管道来说失败了,它愚蠢地创建了一个空白密码。您需要连接到它的控制台并使用WriteConsoleInput 驱动它。
  • 虽然在这种情况下你会更简单地在命令行中将它作为net user myUsername myPass传递。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-18
  • 2017-09-30
  • 2016-11-19
  • 2020-04-10
相关资源
最近更新 更多