Мне удалось получить ссылку на работающее приложение в .net, и я смог использовать эту ссылку для нажатия кнопок.
Это код, который получает ссылку и использует ее.
string name = WindowsIdentity.GetCurrent().Name.Split('\\')[1];
testAssembly = Assembly.LoadFrom(FindFile("BuildWellnessFile.exe", "C:\\Users\\" + name + "\\AppData\\Local\\Apps\\2.0\\"));
Type t = testAssembly.GetType("BuildWellnessFile.Form1");
testForm = (Form)testAssembly.CreateInstance(t.FullName);
ThreadPool.QueueUserWorkItem(new WaitCallback(RunApp), testForm);
object[] p = { this, new EventArgs() };
InvokeMethod(testForm, "CountButton_Click", p);
Это код поддержки
Assembly testAssembly = null;
Form testForm = null;
static void RunApp(object state)
{
Application.Run((Form)state);
}
private void InvokeMethod(Form form, string methodName, params object[] parms)
{
EventHandler eh = (EventHandler)Delegate.CreateDelegate(typeof(EventHandler),form,methodName);
if (eh != null)
{
form.Invoke(eh, parms);
}
}
После этого InvokeMethod используется для нажатия кнопки в другом приложении, появляется диалоговое окно. Я хочу получить ссылку на это диалоговое окно, чтобы я мог нажать OK.
Пожалуйста, не упоминайте лучшие практики по автоматизации другого приложения, меня просто попросили сделать что-то.
UPDATE:
Вот как другое приложение вызывает диалоговое окно
Interaction.MsgBox(" active cards in list created at: ", MsgBoxStyle.OkOnly, Nothing)