为什么我的程序在等待弹出窗口关闭?

Why is my program waiting for the popup to close?

我正在尝试在我的 C# 项目中使用 user32.dll 的方法来实现另一个程序的自动化。我创建了一个小测试程序来自动输入文本并单击一个按钮。单击该按钮后,会出现一个弹出窗口,可以使用 'yes' 按钮将其关闭。

但是,一旦弹出窗口打开,我的程序就会等待它关闭,直到它继续 运行 它的代码。 (我必须手动点击按钮)

如何让代码 运行 访问弹出窗口 window?

Console.WriteLine("Please press enter to continue.");

Console.ReadLine();
identifyProcess();
RemoteMethods.updateWindows(_MainWnd);
IntPtr saveButton = RemoteMethods.GetChildWindow(RemoteMethods.GetIndexByTitle(_MainWnd, "Save")[0]);
IntPtr titleTF = RemoteMethods.GetChildWindow(3);
IntPtr nameTF = RemoteMethods.GetChildWindow(5);
IntPtr streetTF = RemoteMethods.GetChildWindow(1);

//Replacing Text

RemoteMethods.SendMessage(titleTF, RemoteMethods.WM_SETTEXT, IntPtr.Zero, "Mr.");
RemoteMethods.SendMessage(nameTF, RemoteMethods.WM_SETTEXT, IntPtr.Zero, "Berg");
RemoteMethods.SendMessage(streetTF, RemoteMethods.WM_SETTEXT, IntPtr.Zero, "Fountainally 3.");

RemoteMethods.ClickButton(saveButton);

//Popup appears here
//But the program only continues after i click 'Yes' manually.

Console.WriteLine("Test");
IntPtr nW = RemoteMethods.GetLastActivePopup(_MainWnd);
RemoteMethods.updateWindows(nW);
IntPtr yesButton = RemoteMethods.GetChildWindow(RemoteMethods.GetIndexByTitle(nW, "Yes")[0]);

RemoteMethods.ClickButton(yesButton);

这是 RemoteMethods class: https://drive.google.com/file/d/19xtvq6ep8ICKY4WZqY0BBv8schnhzfqs/view?usp=sharing

SendMessage() 将等待消息被处理,即保存按钮的方法处理程序已 运行 结束。如果该处理程序打开另一个 window 并等待用户输入(如您的情况),则不会出现这种情况。

改用SendNotifyMessage() or Postmessage()。它们很相似,但是 SendNotifyMessage() 会比 PostMessage() 给予消息更高的优先级。这两种方法都以异步方式工作,即它们将立即return。

这反过来意味着,您可能需要重试查询下一个 window,因为在方法 returned.

时它可能不会直接显示