У меня есть приложение (C # + WPF), которое пытается получить контроль над графическим интерфейсом любого процесса, переданного ему в качестве входных данных, и изменить его размер / положение для моих собственных целей.
Думаю, он неплохо справляется со своей задачей. После ожидаемого завершения (базовый класс наследует от IDisposable) «захваченный» процесс освобождается - его родительский элемент устанавливается на исходный, его стиль окна сбрасывается и т. Д. И т. Д.
Фактически, при тестировании я могу захватывать, выпускать, повторно захватывать и т. Д. Тот же процесс, что и много раз раз, как я хочу, без проблем.
Однако при неожиданном завершении (скажем, другой процесс принудительно убивает его) процесс никогда не восстанавливает свой графический интерфейс! Я могу сказать, что он все еще работает, но я никогда не смогу вернуть этот процесс в исходное состояние.
Похоже, что процесс больше не отвечает на вызовы Win32 API на основе окна, которые больше устанавливают определенные оконные функции (например, я могу получить информацию с помощью GetParent, GetWindowThreadProcessId и т. Д., Но вызов ShowWindow или связанных результатов ни к чему не приводит).
Есть предложения, почему это происходит? Я предполагаю, что, поскольку я установил родителем процесса свое приложение WPF (которое затем неожиданно закрывается), это вызывает некоторые проблемы при попытке восстановить исходный интерфейс?
Вот почему это происходит (или, по крайней мере, указание на то, почему мне было так трудно разобраться в этой проблеме самостоятельно); я могу восстановиться после этого? И если да, то как?
Редактировать -
IInspectable дает хорошее замечание в комментариях, вопрос скорректирован для лучшего понимания этого конкретного приложения.