Delphi 6 Exe на Vista: проблемы с GetWindowText - PullRequest
0 голосов
/ 07 октября 2011

У меня есть exe-файл, скомпилированный с Delphi 6 под Windows XP, который использует комбинацию EnumWindows и GetWindowText, чтобы найти окно (не принадлежащее самому exe-файлу) с определенным заголовком.

Поведение такоеожидается под Windows XP.Однако на компьютерах Vista это не работает.

Поскольку упомянутая версия Delphi не работает в Vista, я не могу изменить и проверить это напрямую.

Однако я попробуюсоздать модифицированный exe-файл на компьютере XP, который выводит некоторые дополнительные данные и скопировать их на компьютер Vista.

Я просто хотел бы спросить, есть ли у кого-нибудь какая-либо информация о том, существуют ли конкретные проблемы, связанные с exe-файлами, скомпилированными сDelphi 6, работающий в Vista, относительно EnumWindows / GetWindowText.

В exe используются EnumWindows и GetWindowText, чтобы найти дескриптор определенного окна, чтобы затем проанализировать заголовок этого окна в событии таймера.Заголовок окна - это имя приложения плюс имя файла, открытого в этом приложении (если какой-либо файл открыт).Delphi exe анализирует / использует это имя файла, что-то делает с ним и ведет себя определенным образом.

В Vista ожидаемое поведение не появляется, поэтому я предполагаю, что дескриптор окна не найден, потому что GetWindowText каким-то образомне вернуть текст.Другая причина, конечно, может заключаться в том, что EnumWindows не работает должным образом, и дескриптор окна, которое ищет exe, никогда не отправляется в EnumWindowsProc.

1 Ответ

4 голосов
/ 07 октября 2011

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

Кроме этого, вам лучше всего запустить его под отладчиком. Delphi 6 наверняка работает на Vista. Он был написан до UAC и поэтому не может справиться с отсутствием прав на запись в каталог установки. Итак, установите его где-нибудь в вашем профиле пользователя или в C: \ Delphi6 - в основном там, где обычные пользователи имеют доступ для записи.

Наконец, не попадитесь в ловушку запуска Delphi с повышенными правами. Это будет путать проблему UIPI, если это действительно проблема здесь.

Удачи!

...