![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| SilverShield |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 22.8.2007 Репутация: нет Всего: нет |
Привет всем!
Собственно subj. Необходимо отловить смену активного окна. Самый простой способ - поставить хук WH_SHELL из dll. Из обычного приложения все отлично работает, НО мне необходимо отловить смену активного окна в сервисе. В этом случае хук из dll не работает. У сервиса Interactive = true. Есть ли еще какой-либо вариант без использования dll? Или что еще надо сделать с сервисом или с кодом в dll чтобы заработало? Заранее спасибо! |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
сделать отдельное от сервиса приложение, которое будет работать "прослойкой" между сервисом и системой
-------------------- There are always someone smarter than you... |
|||
|
||||
| SilverShield |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 22.8.2007 Репутация: нет Всего: нет |
MetalFan, такой вариант не годится. Он сразу понизит надежность и стабильность работы моей программы в целом, не говоря уже об дополнительных заморочках при установке.
1. Есть ли другие варианты как это сделать только в рамках сервиса? 2. Есть ли способ сделать так, чтобы глобальных хук из dll нормально работал с сервисом? |
|||
|
||||
| Virtuals |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
попробуй создать в сервисе окошко и в нем ловить события....
как вариант. |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 16 Всего: 128 |
смотря как реализуешь... AFAIK это вполне нормальный способ, если необходимо взаимодействие сервиса с пользователем -------------------- There are always someone smarter than you... |
|||
|
||||
| SilverShield |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 22.8.2007 Репутация: нет Всего: нет |
Virtuals, собственно так и делаю: в сервисе создаю форму, а на ней и пытаюсь ловить сообщения от dll. Сразу после инстала сервиса даже работает... до первой перезагрузки, а потом перестает и никакие start/stop не помогают.
MetalFan, согласен на счет взаимодействия с пользователем, но мне этого взаимодействия напрямую как раз и не надо ) Если будет отдельная программа, то пользователь сможет ее запросто убить, что сделает сервис не рабочим. А если все в самом серисе, то тут уже права нужны. Опять же сервис можно от system запустить и тогда кое какие меры по защите можно через теже доменные политики сделать. |
|||
|
||||
| Virtuals |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
2SilverShield
резрешено взаимодействие с рабочим столом? сервису |
|||
|
||||
| Virtuals |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
||||
|
||||
| SilverShield |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 22.8.2007 Репутация: нет Всего: нет |
||||
|
||||
| Virtuals |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
если тип сервиса
SERVICE_WIN32_OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS то оно (дает оконную станцию winsta0 и стол default) хотя на самом деле некоторые хуки в сервисах не пашут. может всетаки лучше запускать промежуточное приложение, от систем или другого пользователя собственно вопрос а зачем все это? и вопрос на засыппку: а как будеш боротся со сменой рабочего стола? CreateDesktop SwitchDesktop |
|||
|
||||
| Cashey |
|
|||
![]() Бессмертный ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3441 Регистрация: 13.11.2002 Где: в столице Репутация: нет Всего: 60 |
хотя ненадо....
Это сообщение отредактировал(а) Cashey - 2.3.2009, 13:16 -------------------- библия учит любить ближнего, а камасутра обучает как именно |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 15 Всего: 72 |
И не только с SwitchDesktop.
интерактивные сервисы - глючная штука, незря их в Vista отменили. Достаточно задействовать быстрое переключение пользователей и все преимущества интерактивности тут же падают, возможно - вместе с самим сервисом (в зависимости от радиуса кривизны рук). Единственный правильный вариант - неинтерактивный сервис и приложение, запускаемое от пользователя (из автозагрузки или запускаемое непосредственно сервисом). Приложение, запущенное от пользователя устанавливает хук и любым способом передает результаты в сервис. Хук устанавливается только на 1 десктоп в одной сессии. И если Thread Desktop сервиса можно переключить, то сессию - нет, поэтому интерактивные сервисы ограничены работой только в 1 сессии. Да, приложение можно убить. Но кто мешает сервису мониторить состояние "своего" приложения на активном десктопе и при необходимости перезапускать его? |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |