получить приложение Delphi, чтобы закрыть диалоговое окно, которое выскочило из драйвера - PullRequest
1 голос
/ 01 декабря 2010

У меня есть приложение delphi, которое пытается открыть веб-камеру. В Windows 7 иногда происходит сбой (это другая история / вопрос / нить), но в драйвере веб-камеры также появляется диалоговое окно под названием «Источник видео», предлагающее мне выбрать его. Если я несколько раз попытаюсь открыть драйвер в цикле и вручную закрывать диалоговое окно каждый раз, когда оно появляется, я могу приступить к работе. Поэтому я хотел бы закрыть диалог из моего приложения. FindWindow (nil, 'Video Source') не находит его. Если я смотрю с помощью Process Explorer, диалог отображается как принадлежащий моему приложению. Если я принудительно закрою его из PE, это закроет мое приложение! Как закрыть этот диалог? У меня есть подозрение (подтверждено), что мое приложение зависает, когда этот диалог открыт, что затруднит выполнение любого кода для его закрытия.

1 Ответ

1 голос
/ 01 декабря 2010

Если из-за этого всплывающего диалогового окна ваш основной поток приложения застопорился в ожидании ввода пользователя, единственное решение - запустить другой поток, который регулярно пытается найти это всплывающее окно. Когда он найдет его, используйте PostMessage для использования WM_CLOSE или аналогичного дескриптору всплывающего окна. Возможно, вам придется отправить сообщения mousedown / mouseup на кнопку во всплывающем окне.

Кроме того, я бы написал небольшое отладочное приложение, которое использует Windows API WindowFromPoint, чтобы узнать о всплывающем окне, т.е. не только видимая подпись, но и класс. Вы также можете использовать эту программу отладки, чтобы заставить FindWindow работать правильно.

...