|
|
|
Проверка на "залогиненность" машины
|
|||
|---|---|---|---|
|
#18+
Как осуществить? Получать список пользователей и далее проверять залогинен ли хотя бы один? ОС - Windows 2000. Вообщем изначально задача звучит так: Приложение на ПБ при старте добавляет в трэй значок, но если приложение стартуется при старте ОС (НЕ сервис), то естественно никакого десктопа еще нет и значок пролетает. А когда логинешься значка нет. Надо бы как-то создавать его в процессе работы приложения, но как узнать в какой момент? Периодически проверять на залогиненность? Получать какое-то событие от виндов о логоне? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 11:38 |
|
||
|
Проверка на "залогиненность" машины
|
|||
|---|---|---|---|
|
#18+
iLLerКак осуществить? Получать список пользователей и далее проверять залогинен ли хотя бы один? ОС - Windows 2000. Вообщем изначально задача звучит так: Приложение на ПБ при старте добавляет в трэй значок, но если приложение стартуется при старте ОС (НЕ сервис), то естественно никакого десктопа еще нет и значок пролетает. А когда логинешься значка нет. Надо бы как-то создавать его в процессе работы приложения, но как узнать в какой момент? Периодически проверять на залогиненность? Получать какое-то событие от виндов о логоне? Winlogon notification должен помочь. Надо только прикрутить его к своему приложению. http://msdn2.microsoft.com/en-us/library/aa380545.aspx Пример: http://www.codeproject.com/system/winlogon_notification_package.asp Только учтите что в Висте, насколько я понял, этот механизм уже не работает. Там это сделали как-то по другому. Т.е. это работает только в 2000 и ХР ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 12:34 |
|
||
|
Проверка на "залогиненность" машины
|
|||
|---|---|---|---|
|
#18+
А я нарыл сообщение WM_TASKBARCREATED, должно типа приходить если создается область трэя. Попробую его половить, авось получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 12:49 |
|
||
|
Проверка на "залогиненность" машины
|
|||
|---|---|---|---|
|
#18+
Урра, получилось! 1) Function long RegisterWindowMessage(string msg) library "user32.dll" Alias for "RegisterWindowMessageA" 2) На открытии окна вызываем RegisterWindowMessage('TaskbarCreated') она возвращает некий идентификатор 3) Отлавливаем pbm_other c Message.Number = этому идентификатору и передергиваем значок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 13:40 |
|
||
|
Проверка на "залогиненность" машины
|
|||
|---|---|---|---|
|
#18+
Хм, недолго моя радовалась... При тесте убить/запустить эксплорер.екзе все работает. Но с запуском виндов осталась. И судя по отладке дело в следующем. При запуске приложения ПБ, из апликейшн скрипта запускается окно, после логона в винды этого окна.... нет, а приложение работает. Соответственно и получить событие о старте трэя некому, ведь его получает окно, а не приложение. Проблема переросла в другую: как отобразить окно которое не создалось при старте приложения без десктопа? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 16:38 |
|
||
|
Проверка на "залогиненность" машины
|
|||
|---|---|---|---|
|
#18+
вешайся на PBM_OTHER смотри какие события происходят при необходимых условиях я когда-то успешно боролся с такой проблемой (события не помню) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 16:43 |
|
||
|
Проверка на "залогиненность" машины
|
|||
|---|---|---|---|
|
#18+
Хм, так повесился. Вот только ловить можно событие у окна, на апликейшн оно не приходит. А окна-то и нет. Окно обычное, тип main, после логона в списке задач приложение есть, окна - нет. Смотрю WinSight32'ом из состава C++Builder, он показывает все существующие окна в системе. Вот что интересно, всякие касперские и прочие окна висят в системе, а от билдерного приложения ни одного окошечка. Что ж мне, АПИшными функциями теперь окна создавать что ли?!((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 17:03 |
|
||
|
Проверка на "залогиненность" машины
|
|||
|---|---|---|---|
|
#18+
iLLerХм, так повесился. Вот только ловить можно событие у окна, на апликейшн оно не приходит. А окна-то и нет. Окно обычное, тип main, после логона в списке задач приложение есть, окна - нет. Смотрю WinSight32'ом из состава C++Builder, он показывает все существующие окна в системе. Вот что интересно, всякие касперские и прочие окна висят в системе, а от билдерного приложения ни одного окошечка. Что ж мне, АПИшными функциями теперь окна создавать что ли?!((( А окно то у Вас это открыто? Вообще PB'шные окна и контролы на них очень хорошо видятся в т.ч. WinSight'ом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 18:03 |
|
||
|
Проверка на "залогиненность" машины
|
|||
|---|---|---|---|
|
#18+
Может я чего и не так понял, но ... У тебя в базе данных наверняка есть таблица с юзерами, добавь туда колонку "loged" char(1) например. На запуске аппликаций execute процедуру которая сделает update этой колонки на "Y", на выходе из аппликации обратно на null. Можно и со smalldatetime поигратса, типа когда зашёл, когда вышел. Я так слежу за юзверями которые "свежую" версию игнорируют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 18:04 |
|
||
|
Проверка на "залогиненность" машины
|
|||
|---|---|---|---|
|
#18+
По пунктам: 1) Компилю тестовое приложение, сую в "Назначеные задания"->"запускать при включении компьютера" 2) Перегружаю машину. Логинюсь. 3) В списке задач имеется. 4) Winsign не показывает ни одного окна от ПБ. 5) в приложении на окне есть обработчик события PBM_OTHER: Код: plaintext 1. 2. 3. 4. 7) Добавляемый MessageBox в приведенный выше скрипт банально не работает, молча проходит мимо. Аналогично шаманства типа hide(), show(), повторный open этого же экземпляра, другого экземпляра не канает. Т.е. окно-то живет, но никаких действий связанных с выводом не выказывает. 8) Про БД - не в ту степь. Получается, что есть некий "параллельный мир", и если прога сунулась в первый раз туда, то ей уже не судьба выплыть на свет божий?! Очень странно, если не сказать ерунда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 19:28 |
|
||
|
Проверка на "залогиненность" машины
|
|||
|---|---|---|---|
|
#18+
Не понял, а как у вас РВшное приложение бежит без окон? А вот так ловят WM_TASKBARCREATED ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 19:44 |
|
||
|
Проверка на "залогиненность" машины
|
|||
|---|---|---|---|
|
#18+
Да что ж такое! Е-мое. Я уже выяснил (см. пост№3) как восстанавливать значок в трее. И для этого требуется окно. А ОНО НЕ РАБОТАЕТ КАК НУЖНО. Сделайте пробник, плиз, засуньте на запуск компа и проверьте. Будьте внимательны, проблема видоизменилась от начальной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 22:09 |
|
||
|
Проверка на "залогиненность" машины
|
|||
|---|---|---|---|
|
#18+
Опять не понял, вы что РВшное приложение как сервис гоняете? А разрешаете ему Interact with Desktop? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 22:21 |
|
||
|
Проверка на "залогиненность" машины
|
|||
|---|---|---|---|
|
#18+
Нет, не сервис. Был бы сервис, так бы и написал, что запускаем как сервис, но... Считайте, что запускается приложение из системного шедулера(пуск-программы-стандартные-служебные-назначенные задания), при старте системы, кстати пользователь в виндах один, под его аккаунтом и запускается приложение. Там галочки взаимодействия с десктопом не заметил. А может ПБ в таком случае как раз по умолчанию и начинает жить жизнью без экрана? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2007, 22:39 |
|
||
|
Проверка на "залогиненность" машины
|
|||
|---|---|---|---|
|
#18+
в евенте PBM_OTHER вызывай свою функцию через пост, иногда помогает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2007, 10:01 |
|
||
|
Проверка на "залогиненность" машины
|
|||
|---|---|---|---|
|
#18+
так вот. если я захожу в систему (у меня win xp) под тем-же логином под каким запускаю свой exe-шник (через Scheduled Tasks), то окно показывается на экране. но если я истользую разные логины - то екзешник оказывается в отдельной сессии и десктоп (главное окно) у этой сессии абсолютно другой, поэтому и окно никак не увидеть. -- пользовал ф-ю function ULONG GetDesktopWindow() library "user32" так-что PB здесь не причем. это все ОС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2007, 11:44 |
|
||
|
Проверка на "залогиненность" машины
|
|||
|---|---|---|---|
|
#18+
Dmitry.если я захожу в систему (у меня win xp) под тем-же логином под каким запускаю свой exe-шник (через Scheduled Tasks), то окно показывается на экране. А выложить пробное приложение сюда не можешь? Может у меня руки не оттуда растут и я не так открываю окна, но у меня "убей - не получается" увидеть окна после логона. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2007, 14:09 |
|
||
|
Проверка на "залогиненность" машины
|
|||
|---|---|---|---|
|
#18+
приложение проще не бывает пустое окно w_main на открытии приложения код open(w_main) PB 10.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2007, 15:22 |
|
||
|
Проверка на "залогиненность" машины
|
|||
|---|---|---|---|
|
#18+
Хм, у меня WinXP + PB9.03 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2007, 16:18 |
|
||
|
Проверка на "залогиненность" машины
|
|||
|---|---|---|---|
|
#18+
iLLerХм, у меня WinXP + PB9.03 А как это согласуется с первым сообщением про 2000? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2007, 17:26 |
|
||
|
Проверка на "залогиненность" машины
|
|||
|---|---|---|---|
|
#18+
Ну как, как. Просто. Переполз на отладочную машину с XP. Сделал только что нулевое приложение без оконных обработчиков, без ничего, только одно окно и все. Добавил в "Назначенные задания". Перегрузился, окна нет. Сменил режим входа с окном приветствия на стандартный НТшный (с указанием пары логин/пароль), эффект тот же. Кто-нибудь попробуйте с 9-м билдером провернуть такой финт. Ну ей богу, достало уже во тьме шарахаться.))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2007, 17:35 |
|
||
|
|

start [/forum/topic.php?fid=15&msg=34678180&tid=1337069]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 157ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...