我正在尝试创建一个 C#.NET 2.0 脚本来自动化用 Java 编写的第三方应用程序中的工作流。
我正在使用 user32.dll 函数来与 Java 应用程序窗口进行交互。
我的问题是 Java 应用程序窗口完全加载速度很慢,并且我发送的操作IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, UInt32 wParam, IntPtr lParam)
有时会丢失。示例:在加载主窗口期间,如果我尝试打开一个菜单(此时我实际上在主窗口上有一个句柄),我的消息就丢失了,菜单永远不会打开。
我在 Stack Overflow 上找到了一些答案,告诉我们可以Process.WaitForInputIdle()
为此目的使用该方法,但我发现这仅适用于应用程序是单线程的,而我的 Java 应用程序不是这种情况。(C# SendKeys 等待程序加载后再发送)
我正在寻找具有相同想法但支持多线程或您可能拥有的任何其他想法的东西?!:)
遵循 Mari9 的想法,我终于用System.Diagnostic.PerformanceCounter()
来观看第三方应用程序进程的活动。然后它变为 0,这意味着该进程已经完成了它必须做的事情并且能够执行我发送给它的消息。
PerformanceCounter PC = new PerformanceCounter();
PC.CategoryName = "Process";
PC.CounterName = "% Processor Time";
PC.InstanceName = "<process name>";
Console.WriteLine(PC.NextValue().ToString());