| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Windows.GetWindow и GetWindowText = нет заголовков |
| Автор: Delvish 24.5.2014, 23:14 | ||
| Всем доброй ночи и других времен суток. Есть такая функция GetWindow, при помощи которой я получаю хэндл первого попавшегося окна (Application.Handle, gw_HWNDfirst), так?. После, перечислением всех остальных окон (gw_HWNDnext) получаю хэндлы остальных [видимых] окон, выбирая из них через GetWindowText их заголовки. И все бы было здОрово, если бы программа работала с правами текущего пользователя. В силу обстоятельств, необходимо запускать ее с правами System, и вот тогда происходит беда - не определяются заголовки окон. И беда косвенная - при попытке сделать скриншот сохраняется ровное белое поле. Как будто права системы не позволяют видеть окна (ну бред же ведь?). Натолкните на правильную мысль, пожалуйста. Гугл не спасает. ОС Windows 7 IDE Delphi 7
|
| Автор: Akella 25.5.2014, 14:50 |
не совсем так почитай про z-последовательность Добавлено через 1 минуту и 13 секунд случайно не сервис? |
| Автор: Delvish 25.5.2014, 15:51 |
| Нет, не сервис. Обычный Application. Будучи запущенным руками от текущего пользователя, видит заголовки окон, делает нормальный скриншот и выполняет некоторые другие функции. Будучи запущенным планировщиком задач от имени Системы, не хочет выполнять вышеописанных функций. С чем это связано - мне не понятно и хотелось бы узнать, а так же узнать возможные пути решения проблемы. |
| Автор: Delvish 26.5.2014, 15:17 |
| Все же откопал информацию о том, что у пользователя Система свои рабочий стол и WinSta и весьма проблематично переключаться с защищенного рабочего стола на пользовательский. Отсюда вытекает, что мне "проще" запускать программу от имени Администратора. Но тут такое "но" подкралось: в планировщике при создании задачи по умолчанию выставляется пункт "Выполнять только для зарегистрированного пользователя", а у меня все пользователи сидят под ограниченными учетками, соответственно, запуск программы по расписанию не состоится, ибо Админ не залогинен. Как же быть? Сделать сервис, запускающийся с правами системы (что даст отвязку от залогиненного пользователя) и он уже будет запускать основную программу, но с правами пользователя/администратора? Но как тогда это сделать - запуск с пониженными правами? |
| Автор: Delvish 26.5.2014, 22:45 | ||
| Как говорится, сам спросил - сам ответил С пониженными правами запускать нужно так:
И тогда первое приложение, стартовавшее от имени системы, запустит второе, но уже с правами текущего пользователя |