Я перемещаю окно (принадлежащее другому процессу) на передний план, чтобы сделать снимок экрана. Я могу сделать это, используя SetForegroundWindow
, однако эта функция немедленно возвращается. Другой процесс занимает много времени, чтобы перерисовать его главное окно (которое требует его доступа к базе данных), поэтому я не могу быть уверен, что когда я сделаю снимок экрана, окно будет полностью отображено. Иногда все, что я получаю на скриншоте, - это контур целевого окна, поверх любого окна ранее на переднем плане.Надежный способ подождать, пока другой процесс Windows перекроет основное окно
Есть ли надежный способ подождать, пока окно другого процесса будет полностью окрашено? Я подозреваю, что нет, но это стоит того. Может быть, есть сообщение, которое я могу отправить в окно, которое будет иметь этот эффект?
Note: Язык реализации не имеет значения, но мне нужно решение с использованием собственного API Windows, либо непосредственно из кода C/C++, либо через P/Invoke (например, с C# или VB.NET). К сожалению, я не могу использовать любые функции WinForms.
я до сих пор с той же проблемой. 'UpdateWindow' возвращается слишком рано, пока картина не будет завершена. – finnw
@finnw: Я думаю, что после 'UpdateWindow', я бы назвал' WaitForInputIdle' и посмотрел, делает ли это трюк. Я раньше не использовал 'WaitForInputIdle', поэтому я не могу гарантировать, что это будет эффективно, но я бы предположил, что есть хотя бы довольно хороший шанс ... –
@Jerry Coffin IIRC WaitForInputIdle работает только тогда, когда процесс запускается. – Anders