Управление приложением Python с помощью C # - PullRequest
0 голосов
/ 18 февраля 2011

Эй, Эта проблема решалась раньше, но не в этом ракурсе. Я пытаюсь контролировать приложение Python с помощью C #. Приложение запускается в неизвестное время, и мне нужно держать основную форму приложения C #, пока оно не «узнает», когда приложение Python завершает обработку. Я должен отметить, что у приложения Python есть собственный графический интерфейс, который я пытаюсь сохранить. До сих пор я использовал:

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 ]

1 голос
/ 18 февраля 2011

Перенаправить стандартный ввод и push-символы таким образом (вместо sendkeys)?

0 голосов
/ 18 февраля 2011

SendKeys может отправлять только нажатия клавиш активному приложению.Поскольку вы заставляете его запускаться без создания окна, он не может получать сообщения SendKeys.Send ().Похоже, что вы действительно хотите, чтобы использовать функциональность кода Python, не представляя какой-либо пользовательский интерфейс из этого приложения для ваших пользователей.

Вы можете подойти к этому одним из 2 способов:Во-первых, вы должны написать простой скрипт на 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

0 голосов
/ 18 февраля 2011

Посмотрели ли вы IronPython - он позволяет вам выполнять код Python непосредственно из вашего .NET-приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...