Как получить ссылку на диалоговое окно другой программы, чтобы я мог нажать кнопку - PullRequest
1 голос
/ 06 августа 2011

Мне удалось получить ссылку на работающее приложение в .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)

1 Ответ

1 голос
/ 06 августа 2011

Возможно, вам понадобится P / Invoke, чтобы отправить сообщение BM_CLICK соответствующей кнопке в диалоговом окне. Пример того, как это сделать в C #, можно найти на http://www.codeproject.com/KB/cs/WindowsAPIsFromCS.aspx

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