如何将字符发送到控制台程序的 STDIN?

问题描述 投票:0回答:1

我正在用 C 语言编写一个 Win32 程序,该程序启动一个控制台应用程序,可以通过按键盘上的 Q 来停止该应用程序。按键盘上的Q使控制台应用程序停止;我只是想用我正在编写的程序来模拟这一点。

我对我认为的标准方法没有运气:

  • SECURITY_ATTRIBUTES
     初始化 
    bInheritHandle=TRUE
  • 结构
  • 使用该结构调用
    CreatePipe()
    来初始化读写句柄
  • 使用
    STARTUPINFO
     创建 
    dwFlags=STARTF_USESTDHANDLES
  • 结构
  • hStdInput
    分配给由
    CreatePipe()
  • 初始化的读取句柄

我的程序使用初始化的

CreateProcess()
结构启动带有
STARTUPINFO
的控制台应用程序,并在调用
q
时使用
hStdInput
写入句柄写入字母
WriteFile()
。控制台程序没有响应。

我应该发送扫描码而不是文本字符吗?

winapi console-application stdin
1个回答
0
投票

如果控制台程序对q

按键
做出反应,而不是使用“q”对输入字符串做出反应,那么它肯定不会通过从标准输入读取来处理输入。仅当按下
Enter
时,Stdin 才会将输入发送到主机应用程序。该程序很可能使用
ReadConsoleInput
或类似的东西。

您可以测试一下 - 创建一个包含 q 的文本文件,使用

<q.txt
运行控制台程序。很有可能,它不会放弃。

我还没有准备好示例,但

WriteConsoleInput
似乎是可行的方法。

© www.soinside.com 2019 - 2024. All rights reserved.