提问人:couldabin 提问时间:11/3/2023 最后编辑:Remy Lebeaucouldabin 更新时间:11/3/2023 访问量:45
如何将角色发布到控制台程序的 STDIN?
How do I post a character to a console program's STDIN?
问:
我正在用 C 编写一个 Win32 程序,该程序启动一个控制台应用程序,可以通过按下键盘来停止。按下键盘会使控制台应用程序停止;我只是想用我正在编写的程序来模仿这一点。QQ
我没有运气,我认为是标准方法:
- 初始化结构
SECURITY_ATTRIBUTES
bInheritHandle=TRUE
- 使用该结构调用以初始化读取和写入句柄
CreatePipe()
- 创建结构
STARTUPINFO
dwFlags=STARTF_USESTDHANDLES
- 分配给初始化的读取句柄
hStdInput
CreatePipe()
我的程序使用初始化的结构启动控制台应用程序,并在调用 .控制台程序没有响应。CreateProcess()
STARTUPINFO
q
hStdInput
WriteFile()
我应该发送扫描码而不是文本字符吗?
答:
0赞
Seva Alekseyev
11/3/2023
#1
如果控制台程序对 的按键而不是带有“q”的输入字符串做出反应,则它绝对不会通过从 stdin 读取来处理输入。Stdin 仅在按下时向主机应用程序发送输入。该程序很可能使用或类似的东西。q
Enter
ReadConsoleInput
您可以测试一下 - 制作一个包含 q 的文本文件,使用 .很有可能,它不会退出。<q.txt
我没有准备好一个例子,但似乎是要走的路。WriteConsoleInput
评论
0赞
Remy Lebeau
11/3/2023
"Stdin 仅在按下 Enter 时向主机应用程序发送输入“ - 更准确地说,控制台/终端处理该缓冲,而不是 stdin 本身。
0赞
Seva Alekseyev
11/3/2023
要点是,如果你从 stdin 读取,它会阻塞,直到按下 Enter 键。
2赞
Remy Lebeau
11/3/2023
同样,该行为由控制台/终端控制,而不是由 stdin 本身控制。当然,可以将数据通过管道传递到生成进程的 stdin 中,而无需发送 Enter。它还取决于生成的程序如何从 stdin 读取数据,因为它在处理数据之前可能需要 Enter。
0赞
Seva Alekseyev
11/4/2023
使用 Depends(或 ILSpy,如果托管)浏览 OP 的控制台程序可能会很有启发性。
评论
q
Q
stdin
stdin
Q