微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 如何将键而不是字符发送到进程?

System.Diagnostics.Process公开名为StandardInput的StreamWriter,据我所知,它只接受字符.

但我也需要发送击键,有些击键不能很好地映射到角色.

我该怎么办?

解决方法

您正在将输入流与控制信号混合.正如您所知,控制台进程有一个认输入流,您可以使用StandardInput控制该输入流.但Ctrl-C和Ctrl-Break不是通过此流发送到进程的字符,而是它们是使用已注册的信号处理程序接收进程接收的控制信号,请参阅 CTRL+C and CTRL+BREAK Signals

By default,when a console window has
the keyboard focus,CTRL+C or
CTRL+BREAK is treated as a signal
(SIGINT or SIGBREAK) and not as
keyboard input.

要向流程发送虚假信号,您可以使用GenerateConsoleCtrlEvent并发送CTRL_C_EVENT或CTRL_BREAK_EVENT.此API没有.Net等效项,因此您必须对其进行PInvoke.

要在.NET中使用它,您只需要包含函数定义:

const int CTRL_C_EVENT = 0;
const int CTRL_BREAK_EVENT = 1;

[DllImport("kernel32.dll")]
static extern bool GenerateConsoleCtrlEvent(
    uint dwCtrlEvent,uint dwProcessGroupId);

原文地址:https://www.jb51.cc/csharp/99045.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐