我如何获得对另一个程序的对话框的引用,以便我可以单击按钮

本文关键字:我可以 按钮 单击 引用 对话框 何获得 另一个 程序 | 更新日期: 2023-09-27 18:04:52

我已经成功地在。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

请不要提及自动化另一个应用程序的最佳实践,我只是被要求把事情做好。

更新:下面是另一个应用程序如何调用对话框

Interaction.MsgBox(" active cards in list created at: ", MsgBoxStyle.OkOnly, Nothing)

我如何获得对另一个程序的对话框的引用,以便我可以单击按钮

您可能需要使用p/Invoke将BM_CLICK消息发送到对话框中的相应按钮。在http://www.codeproject.com/KB/cs/WindowsAPIsFromCS.aspx

有一个c#的例子