我正在用 C 语言编写一个 Win32 程序,该程序启动一个控制台应用程序,可以通过按键盘上的 Q 来停止该应用程序。按键盘上的Q使控制台应用程序停止;我只是想用我正在编写的程序来模拟这一点。
我对我认为的标准方法没有运气:
SECURITY_ATTRIBUTES
初始化
bInheritHandle=TRUE
CreatePipe()
来初始化读写句柄STARTUPINFO
创建
dwFlags=STARTF_USESTDHANDLES
hStdInput
分配给由CreatePipe()
我的程序使用初始化的
CreateProcess()
结构启动带有 STARTUPINFO
的控制台应用程序,并在调用 q
时使用 hStdInput
写入句柄写入字母 WriteFile()
。控制台程序没有响应。
我应该发送扫描码而不是文本字符吗?
如果控制台程序对q
的
按键做出反应,而不是使用“q”对输入字符串做出反应,那么它肯定不会通过从标准输入读取来处理输入。仅当按下
Enter
时,Stdin 才会将输入发送到主机应用程序。该程序很可能使用 ReadConsoleInput
或类似的东西。
您可以测试一下 - 创建一个包含 q 的文本文件,使用
<q.txt
运行控制台程序。很有可能,它不会放弃。
我还没有准备好示例,但
WriteConsoleInput
似乎是可行的方法。