使用C#控制Python应用程序

时间:2011-02-17 23:12:38

标签: c# python user-interface

嘿 这个问题之前已经解决过,但不是在这个角度。我正在尝试用C#控制Python应用程序。应用程序运行时间未知,我需要保留主要的C#应用​​程序表单,直到它“知道”Python应用程序何时完成处理。 我应该标记Python应用程序有自己的GUI,我试图保留。 到目前为止,我已经使用过:

ProcessStartInfo processStart= new System.Diagnostics.ProcessStartInfo(@app);
processStart.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
processStart.UseShellExecute = false;
processStart.RedirectStandardOutput = true;
processStart.CreateNoWindow = true;
Process myProcess = Process.Start(processStart);

然后我发送了一些“SendKey”方法,包括一些TAB和ENTER。 此外,正如您可能从代码中推断我正在尝试隐藏整个Python进程 - 我确实成功地打开了\关闭Python应用程序但是根本没有成功控制它。有什么建议吗?

3 个答案:

答案 0 :(得分:1)

以这种方式重定向stdin和推送字符(而不是sendkeys)?

答案 1 :(得分:0)

您是否看过IronPython - 它允许您在.NET应用程序中本地执行python代码。

答案 2 :(得分:0)

SendKeys只能向活动应用程序发送击键。由于您在不创建窗口的情况下强制启动它,因此无法接收SendKeys.Send()消息。听起来你真正想要的是使用python代码的功能而不向用户呈现该应用程序的任何UI。

您可以通过以下两种方式之一来解决此问题:

我的第一个建议是你编写一个简单的python脚本来导入你想要使用的应用程序,并调用你需要的应用程序内的函数。

如果这对您不起作用,您可以允许创建窗口,然后使用以下命令立即将您的应用程序设置为前景窗口:

[DllImport("User32.dll")]
public static extern Int32 SetForegroundWindow(int hWnd);

public void ForceToFront()
{
    SetForegroundWindow(Handle.ToInt32());
}

然后您可以使用Win32 API将密钥发送到现在的后台窗口。这里有一个相当不错(虽然相当陈旧)的例子:http://www.codeproject.com/KB/cs/SendKeys.aspx