Здравствуйте, Demon, Вы писали:
D>Здравствуйте, Adm, Вы писали:
Adm>>Необходимо выводить из сервиса диалоговые окна на видимый в данный момент десктоп, в том числе — на Winlogon. Поиск по многочисленным форумам не дал результатов. Сталкивался с мнением о том, что это вообще невозможно. Тем не менее, существует программка Outpost Firewall, которая каждый день демонстрирует обратное. Скриншот прилагается. (Более того, при переключении десктопов окно красиво переходит на ставший видимым в данный момент десктоп.) Мне же на десктоп Winlogon удается вывести только MessageBox, а это меня не устраивает. Быть может, кто-то знает, как решить проблему и поделится мыслями по этому поводу?
D>Ну выводить окна вместе с окнами винлогона не проблема. Просто делаешь SetThreadDesktop и творишь с окнами чего душа пожелает. D>А вот переносить окно с одного десктопа на другой вроде не положено. Тут либо хакерством нужно заниматься, либо просто схитрить. Можно, например, на всех доступных десктопах создать окно, отлавливать пользовательские манипуляции на активном десктопе и эмулировать их на всех остальных.
Спасибо. Получается выводить окно на видимый десктоп из Thread. Хотелось бы вывести на Winlogon диалог, который откомпилирован как exe. При создании формы наблюдается следующая ситуация: если сервис неинтерактивный, OpenInputDesktop возвращает ошибку 1(Неверная функция), в случае интерактивного сервиса OpenInputDesktop проходит нормально, но SetThreadDesktop возвращает ошибку 170(Требуемый ресурс занят). Процесс запускается функцией CreateProcessAsUser с токеном сервисного процесса.