Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехватить смену активного окна в сервисе 
:(
    Опции темы
SilverShield
Дата 22.8.2007, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 22.8.2007

Репутация: нет
Всего: нет



Привет всем! 
Собственно subj. Необходимо отловить смену активного окна. Самый простой способ - поставить хук WH_SHELL из dll. Из обычного приложения все отлично работает, НО мне необходимо отловить смену активного окна в сервисе. В этом случае хук из dll не работает. 
У сервиса Interactive = true. 
Есть ли еще какой-либо вариант без использования dll? Или что еще надо сделать с сервисом или с кодом в dll чтобы заработало?
Заранее спасибо! 


PM MAIL   Вверх
MetalFan
Дата 22.8.2007, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



сделать отдельное от сервиса приложение, которое будет работать "прослойкой" между сервисом и системой


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
SilverShield
Дата 23.8.2007, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 22.8.2007

Репутация: нет
Всего: нет



MetalFan, такой вариант не годится. Он сразу понизит надежность и стабильность работы моей программы в целом, не говоря уже об дополнительных заморочках при установке.
1. Есть ли другие варианты как это сделать только в рамках сервиса?
2. Есть ли способ сделать так, чтобы глобальных хук из dll нормально работал с сервисом?
PM MAIL   Вверх
Virtuals
Дата 23.8.2007, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 476
Регистрация: 27.11.2006

Репутация: 4
Всего: 11



попробуй создать в сервисе окошко и в нем ловить события....
как вариант.
PM MAIL ICQ   Вверх
MetalFan
Дата 23.8.2007, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



Цитата(SilverShield @  23.8.2007,  08:08 Найти цитируемый пост)
такой вариант не годится. Он сразу понизит надежность и стабильность работы моей программы в целом, не говоря уже об дополнительных заморочках при установке.

смотря как реализуешь... AFAIK это вполне нормальный способ, если необходимо взаимодействие сервиса с пользователем


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
SilverShield
Дата 24.8.2007, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 22.8.2007

Репутация: нет
Всего: нет



Virtuals, собственно так и делаю: в сервисе создаю форму, а на ней и пытаюсь ловить сообщения от dll. Сразу после инстала сервиса даже работает... до первой перезагрузки, а потом перестает и никакие start/stop не помогают.

MetalFan, согласен на счет взаимодействия с пользователем, но мне этого взаимодействия напрямую как раз и не надо ) Если будет отдельная программа, то пользователь сможет ее запросто убить, что сделает сервис не рабочим.  А если все в самом серисе, то тут уже права нужны. 
Опять же сервис можно от system запустить и тогда кое какие меры по защите можно через теже доменные политики сделать. 
PM MAIL   Вверх
Virtuals
Дата 26.8.2007, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 476
Регистрация: 27.11.2006

Репутация: 4
Всего: 11



2SilverShield 
резрешено взаимодействие с рабочим столом? сервису
PM MAIL ICQ   Вверх
Virtuals
Дата 27.8.2007, 07:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 476
Регистрация: 27.11.2006

Репутация: 4
Всего: 11



Цитата(SilverShield @  24.8.2007,  08:40 Найти цитируемый пост)
 Если будет отдельная программа, то пользователь сможет ее запросто убить

да но если она запустится сервисом, то окажется под пользователем system и ее не так просто убить smile 
PM MAIL ICQ   Вверх
SilverShield
Дата 27.8.2007, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 22.8.2007

Репутация: нет
Всего: нет



Virtuals, я же говорю: 
Цитата(SilverShield @  22.8.2007,  15:08 Найти цитируемый пост)
У сервиса Interactive = true. 
 или надо еще что-то сделать?

PM MAIL   Вверх
Virtuals
  Дата 27.8.2007, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 476
Регистрация: 27.11.2006

Репутация: 4
Всего: 11



если тип сервиса
SERVICE_WIN32_OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS
то оно (дает оконную станцию winsta0 и стол default)

хотя на самом деле некоторые хуки в сервисах не пашут.
может всетаки лучше запускать промежуточное приложение, от систем или другого пользователя

собственно вопрос а зачем все это?

и вопрос на засыппку: а как будеш боротся со сменой рабочего стола? smile 
CreateDesktop
SwitchDesktop
PM MAIL ICQ   Вверх
Cashey
Дата 2.3.2009, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: нет
Всего: 60



хотя ненадо.... smile

Это сообщение отредактировал(а) Cashey - 2.3.2009, 13:16


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
kami
Дата 8.3.2009, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 15
Всего: 72



И не только с SwitchDesktop.

интерактивные сервисы - глючная штука, незря их в Vista отменили.
Достаточно задействовать быстрое переключение пользователей и все преимущества интерактивности тут же падают, возможно - вместе с самим сервисом (в зависимости от радиуса кривизны рук).

Единственный правильный вариант - неинтерактивный сервис и приложение, запускаемое от пользователя (из автозагрузки или запускаемое непосредственно сервисом).
Приложение, запущенное от пользователя устанавливает хук и любым способом передает результаты в сервис.

Хук устанавливается только на 1 десктоп в одной сессии. И если Thread Desktop сервиса можно переключить, то сессию - нет, поэтому интерактивные сервисы ограничены работой только в 1 сессии.

Да, приложение можно убить. Но кто мешает сервису мониторить состояние "своего" приложения на активном десктопе и при необходимости перезапускать его?
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0502 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.