我正在尝试创建一个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());
Run Code Online (Sandbox Code Playgroud)