Мое приложение может загружать библиотеки DLL, которые в основном содержат другие оконные приложения.
Он может открыть только одно окно DLL в любой момент времени.
Я столкнулся с ситуацией, когда в окне DLL отображается окно сообщения и/или в моем основном приложении отображается окно сообщения или модальная форма, а при деактивации приложения (переключение на другое), а затем его активация перемещает все окна случайным образом ( ?) z-порядок, благодаря чему форма DLL с окном сообщения располагается позади основной формы. Окно сообщения основной формы располагается за основной формой.
Это приводит к тому, что приложение не отвечает. Не могу ничего нажать, не могу закрыть, не могу свернуть. Приходится убивать через диспетчер задач.
В Delphi я вижу, что есть объект Screen
и у него есть список Forms
. Я проверил его и увидел, что он содержит все формы, открытые в настоящее время моим приложением (даже окно сообщения, которое является результатом ShowMessage()
, у него нет имени, но я вижу ClassName
).
Пока все было хорошо, я мог перебирать формы и использовать SetWindowPos
, чтобы сообщить им правильный z-порядок, однако я не могу сделать это для приложения DLL. Screen
нет этой формы в списке.
Как управлять z-порядком форм DLL?
DLL создаются с использованием Delphi, C++, WPF.
DLL Questions
? - person LU RD   schedule 03.02.2014