У меня есть программа поиска (.exe), которую я хочу запустить, которая содержит текстовое поле.Я хочу запустить эту программу из моей основной формы и скопировать данные вставки из моей основной формы в программу поиска (.exe).
Я уже написал некоторый код для этого, и он работает нормально, но я 'используя Thread.Sleep (), чтобы дождаться загрузки программы.Я думал о чем-то вроде WaitForInputIdle (), но я не уверен, как это работает.
private IntPtr handle;
private void launchProgram()
{
// Copy the text in the datafield to Clipboard
Clipboard.SetText(serialTextBox.Text, TextDataFormat.Text);
bool isRunning = Process.GetProcessesByName("Serial Search.exe").Any();
using (Process process = new Process())
{
if (!isRunning)
{
process.StartInfo.FileName = @"C:\Serial Search.exe";
process.Start();
// Give the process some time to startup - I want to remove this line and interact when fully loaded
Thread.Sleep(2000);
Process[] pname = Process.GetProcessesByName("Serial Search.exe");
if (pname.Length > 0)
{
handle = pname[0].MainWindowHandle;
SetForegroundWindow(handle);
}
var activatedHandle = GetForegroundWindow();
var vPprocess = Process.GetProcessesByName("Serial Search.exe");
while (GetActiveWindowTitle() == "Serial Search")
{
SendKeys.Send("^V");
SendKeys.Send("{ENTER}");
break;
}
}
else
{
Process[] pname = Process.GetProcessesByName("Serial Search.exe");
handle = pname[0].MainWindowHandle;
SetForegroundWindow(handle);
var activatedHandle = GetForegroundWindow();
var vPprocess = Process.GetProcessesByName("Serial Search.exe");
while (GetActiveWindowTitle() == "Serial Search")
{
SendKeys.Send("^A");
SendKeys.Send("^V");
SendKeys.Send("{ENTER}");
break;
}
}
}
}
}
Я хочу удалить часть Thread.Sleep и просто заставить форму мгновенно взаимодействовать с .exe всякий раз, когда онзагружен.Есть идеи, как мне это сделать?