Проблема с фокусировкой окна в Vista - PullRequest
0 голосов
/ 08 октября 2008

У меня есть приложение, которое управляет демографической информацией пациента. Наряду с этими данными пользователь может отсканировать изображение пациента и назначить это изображение пациенту. Когда пользователь нажимает кнопку сканирования, в качестве диалогового окна открывается отдельное приложение для сканирования изображения. При запуске этого на XP все работало нормально. Приложение для обработки изображений загрузилось нормально и получило фокус. Однако в Vista время от времени приложение для обработки изображений не фокусируется и всплывает позади основного приложения. При запуске в полноэкранном режиме или через Сервер приложений 2008 вы не можете видеть приложение, вы получаете только заблокированный экран, и кажется, что ничего не произошло. Есть ли способ изменить управление фокусировкой окна в Vista, чтобы работать так же, как XP? Я ищу способ решить эту проблему, не внося изменений в реальное приложение, если это возможно.

Ответы [ 4 ]

1 голос
/ 08 октября 2008

Я думаю, вам придется внести изменения в свое приложение, чтобы приложение для обработки изображений могло сфокусироваться. Я предполагаю, что ваше приложение запускает приложение обработки изображений через ShellExecute или CreateProcess. Если это так, вы можете получить дескриптор запущенного процесса через SHELLEXECUTEINFO.hProcess (для ShellExecute) или PROCESS_INFORMATION.hProcess (для CreateProcess). Сразу после запуска приложения обработки изображений вызовите API AllowSetForegroundWindow :

AllowSetForegroundWindow(GetProcessId(hProcess));

Это позволит приложению обработки изображений при запуске запускать главное окно / диалоговое окно на переднем плане.

1 голос
/ 09 октября 2008

Вы можете попробовать следующие шаги:
1. Щелкните правой кнопкой мыши на exe
2. Выберите Свойства
3. Выберите вкладку «Совместимость»
4. Установите флажок Запустить эту программу в режиме пригодности для проживания:
5. Выберите Windows XP (пакет обновления 2)

0 голосов
/ 14 октября 2008

Я не верю, что это связано с Vista и XP. Я думаю, что просто это приложение обработки изображений требует больше времени для запуска в Vista. Начиная с Windows 2000, диспетчер окон предотвращал кражу фоновых приложений на переднем плане. Когда приложение запускается, оно имеет окно возможностей для создания и отображения окна, которое будет на переднем плане. Если это занимает слишком много времени, диспетчер окон считает, что текущее окно должно сохранять приоритет, и запрещает другому приложению переходить на передний план, когда оно наконец запускается.

Я не могу придумать какой-либо конкретный способ избежать этого ... кроме использования FindWindow для поиска окна других приложений после запуска приложения. Когда вы в конце концов найдете его, вызовите SetForegroundWindow, чтобы вывести его на передний план.

0 голосов
/ 08 октября 2008

Вы можете перебрать все HWND верхнего уровня и идентифицировать приложение сканирования по его классу окна, а затем отправить соответствующее сообщение, чтобы поднять окно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...