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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Handle из сервиса, Не определяется хендл из сервиса 
V
    Опции темы
Magik
Дата 3.8.2008, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Порылся где можно, но так и не нашёл ответа:-
В службе это не катит – 
var
h: hwnd;
begin
h:= FindWindow('Progman', 'Program Manager');
  if  h<>0 then
       MessageBox(0, 'ПРОТОКОЛ!', 'ServiceName', MB_SERVICE_NOTIFICATION or MB_ICONWARNING or MB_OK);
End; 
Очевидно хендл не определяется. Хотя при запуске как ехе-приложение – всё работает. С MessageBox – проблем нет – проверено. 
Может есть варианты?
PM MAIL   Вверх
Virtuals
Дата 3.8.2008, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Magik, 
батенька курите мсде, 

ну а если лень то поиск по
EnumDesktops
OpenDesktop
SwitchDesktop

короче вам треба понимание о: множественности рабочих столов, 
намек...
стол где ctrl+alt+del = winlogon
где юзер живет = default
а где сервис smile  smile  smile  smile = станция произвольная!!! smile 
так что далее курим
SetProcessWindowStation

удачи
PM MAIL ICQ   Вверх
Magik
Дата 3.8.2008, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Благодарю за ответ и намёк! К сожалению я давно бросил курить! Придётся жевать!
Может ещё у кого-нибудь  есть пожелания?
PM MAIL   Вверх
Virtuals
Дата 3.8.2008, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Magik, 
без шуток, все что перечислил достаточно для понимания вашей проблемы!
прикол в том что в виндах есть множество рабочих столов, живущих на множестве оконных станций
так вот FindWindow работает в пределах: WindowStation/Desktop
а сервис запускается с произвольным WindowStation! (попробуйте выставить у сервиса: взаимодействие с рабочим столом, но это очень неправильно) smile 

ЗЫ попробуйте поиск по моим постам, просто в последнее время очень активно ковырял данный вопрос, и удивило как мало это обсуждается smile 
PM MAIL ICQ   Вверх
CodeMonkey
Дата 3.8.2008, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Попробуйте также почитать Создание служб Windows в Delphi с использованием VCL.
То, что вы сейчас пытаетесь сделать - это одна из наихудших вещей, которые вы только можете сделать. Я настоятельно не рекомендую реаизовывать такую логику. Служба не должна взаимодействовать с пользователем. Напишите это крупными буквами на своём мониторе smile
Если вы расскажете немного больше про свою задачу, возможно, вам подскажут правильный путь её реализации.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Magik
Дата 4.8.2008, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 to Virtuals:
Понял! Всё ОК!

А если немного конкретнее, то на одном сервере необходимо ограничить время работы пользователя. Далее сервер переводится в режим смены пользователя с новым паролем по условию того, что серевер не находится в режиме смены пользователя. Этим условием я считал наличие рабочего стола. Может есть и другие способЫ, но я подумал, что нет ничего проще определить хендл этого окна.  Тем более, что в  MessageBox() через его Handle я спокойно нажимаю на нужную кнопку по таймеру.  
Буду рад, если предложите иной способ.  Одно необходимое условие, этот код надо запускать до входа пользователя (это нужно для другой задачи).  
   
PM MAIL   Вверх
CodeMonkey
Дата 4.8.2008, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Magik @  4.8.2008,  07:33 Найти цитируемый пост)
А если немного конкретнее, то на одном сервере необходимо ограничить время работы пользователя.

Посмотрите:
http://www.delphikingdom.ru/asp/answer.asp?IDAnswer=60639
http://www.delphikingdom.ru/asp/answer.asp?IDAnswer=63639
http://www.rsdn.ru/Forum/message/3001453.flat.aspx

Я бы сделал как приложение, запускаемое планировщиком с системной учёткой при логине пользователя. Как вариант - можно поместить в автозагрузку.

Хотя службой в принципе тоже можно. Но это имеет смысл, только если у вас будет много пользователей работать одновременно. В этом случае служба должна ловить SERVICE_CONTROL_SESSIONCHANGE: HandlerEx Callback Function

Ещё можно вот это почитать: Winlogon Notification Packages Removed Impact on Windows Vista Planning and Deployment

Это сообщение отредактировал(а) CodeMonkey - 4.8.2008, 08:39


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Magik
Дата 4.8.2008, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В принципе проблема ясна.  Пока решил вообще в сервисе не использовать оконные сообщения.  А планировщик, - не хотел бы использовать. Слишком много ушлых ребят развелось с шаловливыми ручонками.

Virtuals & CodeMonkey - C Наилучшими пожеланиями!
PM MAIL   Вверх
CodeMonkey
Дата 4.8.2008, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Magik @  4.8.2008,  13:48 Найти цитируемый пост)
А планировщик, - не хотел бы использовать. Слишком много ушлых ребят развелось с шаловливыми ручонками.

Тогда не ясно, что им мешает выключить вашу службу. 



--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Magik
Дата 4.8.2008, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну так, уровень юзера конечно играет роль. Если службу  грамотно спрятать, то найти её, - нужно ещё и голову поломать. С другой стороны это я вам сказал о наличии её, и роли (правда не до конца).  А юзер просто будет поставлен перед фактом смены пользователя без каких либо причин.
Кстати, ну и партизаны же вы все! Все проблемы с окнами решаются установкой "галки" в свойстве сервиса "взаимодействие с рабочим столом" .! Ведь знали? - А?
PM MAIL   Вверх
CodeMonkey
Дата 4.8.2008, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Для некоторых вопросов правильный ответ: "если вы знаете ответ - держите его при себе".


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Virtuals
Дата 4.8.2008, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



CodeMonkey,  smile думаю права в системе...
PM MAIL ICQ   Вверх
CodeMonkey
Дата 4.8.2008, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Virtuals @  4.8.2008,  17:06 Найти цитируемый пост)
CodeMonkey,   думаю права в системе...

Если бы это было так, то тогда нет никаких проблем сделать так, что они не смогут завершить любое другое приложение (не сервис), запущенное из-под админской/системной учётки? Устанавливаются нужные права и приложение, скажем, помещённое в автозапуск, нельзя ни удалить оттуда, ни завершить, если оно начало выполняться. А автор вопроса, напротив, говорит, что так сделать нельзя, т.к. пользователи работают под неограниченными учётками. Откуда следует, что нет препятствий для остановки службы простыми пользователями.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Virtuals
Дата 4.8.2008, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



если есть права локального админа, то аксиома (тоесть не требует доказательств), ничего не поможет вопрос только времени и скорости усвоения информации пользователем smile , все зашиты безтолку.
PM MAIL ICQ   Вверх
CodeMonkey
Дата 5.8.2008, 02:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Virtuals @  4.8.2008,  19:23 Найти цитируемый пост)
если есть права локального админа, то аксиома (тоесть не требует доказательств), ничего не поможет вопрос только времени и скорости усвоения информации пользователем  , все зашиты безтолку.

Именно про это я и говорю.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.

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


 




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


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

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