我有Windows附带的计算器。我写了一个C#应用程序来启动它。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Process proc = new Process();
proc.StartInfo.FileName = "Calc";
proc.Start();
}
}
我对是否可以抑制子进程的键输入感兴趣。例如,在计算器中,您只需按数字键即可输入输入。
是否可以禁用这些密钥通过我的应用程序执行任何操作?或者,是否可以强制计算器的所有输入首先通过我的应用程序?
例如,假设我想这样做,以便在使用我的应用程序启动计算器时,按计算器中的数字5不会做任何事情。
答案 0 :(得分:0)
是的,您可以重定向标准输入流,这将阻止用户直接将文本输入控制台窗口。您的程序可以写入Process.StandardInput
(TextWriter
)来向流程发送输入。
将您的点击处理程序更改为:
private void button1_Click(object sender, EventArgs e)
{
Process proc = new Process();
proc.StartInfo.FileName = "Calc";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardInput = true;
proc.EnableRaisingEvents = true;
_process.Exited += (sender1, e1) => process.Dispose();
proc.Start();
}
三个注释:
Process
实例或至少其StandardInput
对象的引用。UseShellExecute
设置为false才能使重定向生效,这会禁用Process
类的某些自动行为(例如,指定文件而不是可执行文件)。在您的特定情况下,这可能是也可能不是问题。Process
对象。我在上面的示例中包含了几行来解决此问题(启用引发事件,然后通过部署Exited
对象来处理Process
事件)