![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определение блокировки рабочей станции [D7, Win2k, WinXP]
Woolen © (2006-03-21 20:22:00)Если кто-нибудь знает, поскажите, пожалуйста. Как определить, что рабочая станция заблокирована? Если правильно понимаю, есть WM_WTSSESSION_CHANGE. Но он не подходит, потому что нужна поддержка Windows 2000. Видимые/невидимы собственные окна тоже не подходят. Их нет, поскольку программа - DLL без единого окна. Есть ли способ как-то еще определить, что машина залочена? Спасибо
Eraser (2006-03-23 18:33:00) [1]
> Woolen © (23.03.06 18:27) [18]
> Под каждую версию Windows придется писать по-разному.
Winlogon notification packages в 2000 поддерживаются...
Но всё равно то что касается системы безопасности - это кошмар. И действительно чуть ли не для каждой версии надо отдельнцю "технологию" использовать.
Woolen (2006-03-23 18:27:00) [2]
> SERVICE_CONTROL_SESSIONCHANGE + WM_WTSSESSION_CHANGE
К стати, не работает в 2000. Там нету WM_WTSSESSION_CHANGE. На счет SERVICE_CONTROL_SESSIONCHANGE не знаю. В итоге, это все очень печально. Под каждую версию Windows придется писать по-разному.
Eraser (2006-03-22 18:04:00) [3]
> Игорь Шевченко © (22.03.06 17:13) [16]
Да почитал
Winlogon notification packages are no longer supported. To achieve the functionality formerly provided by notification packages, either create a Group Policy script or create a service.
не скажу, что это меня обрадовало ), но всё таки моё приложение и так сервис, так что выход есть - SERVICE_CONTROL_SESSIONCHANGE + WM_WTSSESSION_CHANGE... вроде бы это то что нужно... на первый взгялд..
но пока остановился на notification packages.
Игорь Шевченко (2006-03-22 17:13:00) [4]Eraser © (22.03.06 16:43) [15]
> а то я как раз winlogon notification packages в проекте
> применять буду
Недолго твоему проекту жить :) Ссылку почитай :)
Eraser (2006-03-22 16:43:00) [5]
> Игорь Шевченко © (22.03.06 16:22) [14]
> Виноват, про подпись спутал с чем-то еще.
ну слава Богу.. отлегло! а то я как раз winlogon notification packages в проекте применять буду )
Игорь Шевченко (2006-03-22 16:22:00) [6]Eraser © (22.03.06 16:16) [13]
Виноват, про подпись спутал с чем-то еще. Исправляюсь, ссылку даю на winlogon notification packages
http://download.microsoft.com/download/7/d/8/7d8965b9-4a7c-4510-9987-ffa57c9ad2fe/relnotes.htm
Eraser (2006-03-22 16:16:00) [7]
> Игорь Шевченко © (22.03.06 16:07) [12]
а вот это не знал... на XP SP2 не требует цифровой подписи... может на серверных ОС.
Можно поподробнее?
Игорь Шевченко (2006-03-22 16:07:00) [8]Eraser © (22.03.06 15:51) [11]
> как минимум права администратора
То-то и оно. Кстати, не факт, что на всех версиях Windows дополнить Winlogon notifications будет легко и просто. Может потребоваться цифровая подпись.
Eraser (2006-03-22 15:51:00) [9]
> Игорь Шевченко © (22.03.06 15:36) [10]
как минимум права администратора ), но только в процессе регистрации DLL, что не желательно.. но допустимо.
Игорь Шевченко (2006-03-22 15:36:00) [10]Eraser © (22.03.06 14:48) [9]
> + копни в сторону Winlogon Notification Package.
А не подскажет ли уважаемый Eraser, много ли прав требуется для работы с Winlogon notification packages ?
Eraser (2006-03-22 14:48:00) [11]
> Woolen ©
почитай вот эту ветку
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1138482663&n=5
+ копни в сторону Winlogon Notification Package.
но всё таки, скорее всего, если приложение не является сервисом, всё закочится на этом [6].
Woolen (2006-03-22 12:51:00) [12]
> Это подтверждется эскпериментом ?
Да, под Windows 2000 TBitmap.Canvas.CopyRect дает белый растр. В качестве источника - Canvas с дескриптором контекста, полученным из дескриптора окна рабочего стола (который получен припомощи GetDesktopWindow). Даже если бы что-то и было видно, смысловой нагрузки оно все равно никакой не несло бы - пользователь все равно ничего не делает.
> OpenInputDesktop
> Winsta.Dll, например WinStationQueryInformationW
Спасибо. Буду пробовать.
Игорь Шевченко (2006-03-22 01:15:00) [13]Могу еще посоветовать подвигаться в сторону функций из Winsta.Dll, например WinStationQueryInformationW и т.д. и т.п.
Игорь Шевченко (2006-03-22 01:13:00) [14]
> Если машина заблокирована, оно ничего не снимет (по большому
> счету),
Это подтверждется эскпериментом ?
> Если могут быть варианты, подскажите, пожалуйста?
Да я бы подсказал, но боюсь, что у простого пользователя шансов узнать о заблокированной машине крайне немного, если вообще есть. Максимум, что могу посоветовать, это подвигаться в сторону OpenInputDesktop, потому что единственное отличие заблокированной машины от незаблокированной заключается в том, что текущим Desktopом является WinLogon, а не Default.
Woolen (2006-03-22 00:37:00) [15]
> Вообще-то он доступен с точки зрения программы. Просто в
> этот момент активен другой Desktop - ну и что с того ?
Приложение может делать снимки экрана, в т.ч. и по таймеру. Если машина заблокирована, оно ничего не снимет (по большому счету), следовательно моя DLL должна отказать в копировании экрана. Если могут быть варианты, подскажите, пожалуйста?
Игорь Шевченко (2006-03-21 22:10:00) [16]Woolen © (21.03.06 21:23) [3]
> Чтоб не делать лишних и ненужных действий с рабочим столом,
> когда он недоступен.
Вообще-то он доступен с точки зрения программы. Просто в этот момент активен другой Desktop - ну и что с того ?
Woolen (2006-03-21 21:23:00) [17]
> Есть способ ослаживать момент "залочивания/разлочивания".
А какой? Что-то я ничего такого не нашел, к сожалению.
> Не уверен, что есть способ. А зачем это надо ?
Чтоб не делать лишних и ненужных действий с рабочим столом, когда он недоступен.
Игорь Шевченко (2006-03-21 21:08:00) [18]
> Есть ли способ как-то еще определить, что машина залочена?
Не уверен, что есть способ. А зачем это надо ?
Eraser (2006-03-21 20:51:00) [19]
> Woolen © (21.03.06 20:22)
> Есть ли способ как-то еще определить, что машина залочена?
Есть способ ослаживать момент "залочивания/разлочивания".