Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Проверка на "залогиненность" машины / 21 сообщений из 21, страница 1 из 1
23.07.2007, 11:38
    #34676674
iLLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка на "залогиненность" машины
Как осуществить?
Получать список пользователей и далее проверять залогинен ли хотя бы один? ОС - Windows 2000.

Вообщем изначально задача звучит так:
Приложение на ПБ при старте добавляет в трэй значок, но если приложение стартуется при старте ОС (НЕ сервис), то естественно никакого десктопа еще нет и значок пролетает. А когда логинешься значка нет. Надо бы как-то создавать его в процессе работы приложения, но как узнать в какой момент? Периодически проверять на залогиненность? Получать какое-то событие от виндов о логоне?
...
Рейтинг: 0 / 0
23.07.2007, 12:34
    #34676928
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка на "залогиненность" машины
iLLerКак осуществить?
Получать список пользователей и далее проверять залогинен ли хотя бы один? ОС - Windows 2000.

Вообщем изначально задача звучит так:
Приложение на ПБ при старте добавляет в трэй значок, но если приложение стартуется при старте ОС (НЕ сервис), то естественно никакого десктопа еще нет и значок пролетает. А когда логинешься значка нет. Надо бы как-то создавать его в процессе работы приложения, но как узнать в какой момент? Периодически проверять на залогиненность? Получать какое-то событие от виндов о логоне?
Winlogon notification должен помочь. Надо только прикрутить его к своему приложению.
http://msdn2.microsoft.com/en-us/library/aa380545.aspx
Пример: http://www.codeproject.com/system/winlogon_notification_package.asp

Только учтите что в Висте, насколько я понял, этот механизм уже не работает. Там это сделали как-то по другому.
Т.е. это работает только в 2000 и ХР
...
Рейтинг: 0 / 0
23.07.2007, 12:49
    #34676979
iLLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка на "залогиненность" машины
А я нарыл сообщение WM_TASKBARCREATED, должно типа приходить если создается область трэя. Попробую его половить, авось получится.
...
Рейтинг: 0 / 0
23.07.2007, 13:40
    #34677141
iLLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка на "залогиненность" машины
Урра, получилось!
1) Function long RegisterWindowMessage(string msg) library "user32.dll" Alias for "RegisterWindowMessageA"
2) На открытии окна вызываем RegisterWindowMessage('TaskbarCreated') она возвращает некий идентификатор
3) Отлавливаем pbm_other c Message.Number = этому идентификатору и передергиваем значок.
...
Рейтинг: 0 / 0
23.07.2007, 16:38
    #34677863
iLLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка на "залогиненность" машины
Хм, недолго моя радовалась... При тесте убить/запустить эксплорер.екзе все работает. Но с запуском виндов осталась. И судя по отладке дело в следующем.
При запуске приложения ПБ, из апликейшн скрипта запускается окно, после логона в винды этого окна.... нет, а приложение работает. Соответственно и получить событие о старте трэя некому, ведь его получает окно, а не приложение.
Проблема переросла в другую: как отобразить окно которое не создалось при старте приложения без десктопа?
...
Рейтинг: 0 / 0
23.07.2007, 16:43
    #34677882
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка на "залогиненность" машины
вешайся на PBM_OTHER
смотри какие события происходят при необходимых условиях
я когда-то успешно боролся с такой проблемой (события не помню)
...
Рейтинг: 0 / 0
23.07.2007, 17:03
    #34677963
iLLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка на "залогиненность" машины
Хм, так повесился. Вот только ловить можно событие у окна, на апликейшн оно не приходит. А окна-то и нет. Окно обычное, тип main, после логона в списке задач приложение есть, окна - нет. Смотрю WinSight32'ом из состава C++Builder, он показывает все существующие окна в системе. Вот что интересно, всякие касперские и прочие окна висят в системе, а от билдерного приложения ни одного окошечка. Что ж мне, АПИшными функциями теперь окна создавать что ли?!(((
...
Рейтинг: 0 / 0
23.07.2007, 18:03
    #34678180
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка на "залогиненность" машины
iLLerХм, так повесился. Вот только ловить можно событие у окна, на апликейшн оно не приходит. А окна-то и нет. Окно обычное, тип main, после логона в списке задач приложение есть, окна - нет. Смотрю WinSight32'ом из состава C++Builder, он показывает все существующие окна в системе. Вот что интересно, всякие касперские и прочие окна висят в системе, а от билдерного приложения ни одного окошечка. Что ж мне, АПИшными функциями теперь окна создавать что ли?!(((
А окно то у Вас это открыто? Вообще PB'шные окна и контролы на них очень хорошо видятся в т.ч. WinSight'ом.
...
Рейтинг: 0 / 0
23.07.2007, 18:04
    #34678185
voronk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка на "залогиненность" машины
Может я чего и не так понял, но ...

У тебя в базе данных наверняка есть таблица с юзерами, добавь туда колонку "loged" char(1) например.
На запуске аппликаций execute процедуру которая сделает update этой колонки на "Y", на выходе из аппликации обратно на null.
Можно и со smalldatetime поигратса, типа когда зашёл, когда вышел.
Я так слежу за юзверями которые "свежую" версию игнорируют.
...
Рейтинг: 0 / 0
23.07.2007, 19:28
    #34678360
iLLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка на "залогиненность" машины
По пунктам:
1) Компилю тестовое приложение, сую в "Назначеные задания"->"запускать при включении компьютера"
2) Перегружаю машину. Логинюсь.
3) В списке задач имеется.
4) Winsign не показывает ни одного окна от ПБ.
5) в приложении на окне есть обработчик события PBM_OTHER:
Код: plaintext
1.
2.
3.
4.
integer gi_report

gi_report=FileOpen("c:\debug.txt",LineMode!,Write!,LockWrite!)
FileWrite(gi_report,string(now())+" Window " + string(Handle(this))+ " Msg="+string(Message.Number)+" wparam="+string(wparam)+" lparam="+string(lparam))
FileClose(gi_report)
6) После логона, смотрю файл. Там имеются записи с сообщениями типа wm_activateapp, wm_windowposchanging, wm_windowposchanged, wm_setfocus, wm_move, wm_devicechange, wm_wininichange, wm_devmodechange. Значит окно есть и оно живет!
7) Добавляемый MessageBox в приведенный выше скрипт банально не работает, молча проходит мимо. Аналогично шаманства типа hide(), show(), повторный open этого же экземпляра, другого экземпляра не канает. Т.е. окно-то живет, но никаких действий связанных с выводом не выказывает.
8) Про БД - не в ту степь.

Получается, что есть некий "параллельный мир", и если прога сунулась в первый раз туда, то ей уже не судьба выплыть на свет божий?! Очень странно, если не сказать ерунда.
...
Рейтинг: 0 / 0
23.07.2007, 19:44
    #34678389
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка на "залогиненность" машины
Не понял, а как у вас РВшное приложение бежит без окон?
А вот так ловят WM_TASKBARCREATED
...
Рейтинг: 0 / 0
23.07.2007, 22:09
    #34678533
iLLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка на "залогиненность" машины
Да что ж такое! Е-мое.
Я уже выяснил (см. пост№3) как восстанавливать значок в трее. И для этого требуется окно. А ОНО НЕ РАБОТАЕТ КАК НУЖНО. Сделайте пробник, плиз, засуньте на запуск компа и проверьте.
Будьте внимательны, проблема видоизменилась от начальной.
...
Рейтинг: 0 / 0
23.07.2007, 22:21
    #34678538
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка на "залогиненность" машины
Опять не понял, вы что РВшное приложение как сервис гоняете?
А разрешаете ему Interact with Desktop?
...
Рейтинг: 0 / 0
23.07.2007, 22:39
    #34678551
iLLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка на "залогиненность" машины
Нет, не сервис. Был бы сервис, так бы и написал, что запускаем как сервис, но... Считайте, что запускается приложение из системного шедулера(пуск-программы-стандартные-служебные-назначенные задания), при старте системы, кстати пользователь в виндах один, под его аккаунтом и запускается приложение. Там галочки взаимодействия с десктопом не заметил. А может ПБ в таком случае как раз по умолчанию и начинает жить жизнью без экрана?
...
Рейтинг: 0 / 0
24.07.2007, 10:01
    #34678972
zuzu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка на "залогиненность" машины
в евенте PBM_OTHER вызывай свою функцию через пост, иногда помогает.
...
Рейтинг: 0 / 0
24.07.2007, 11:44
    #34679454
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка на "залогиненность" машины
так вот.

если я захожу в систему (у меня win xp)
под тем-же логином под каким запускаю свой exe-шник (через Scheduled Tasks),
то окно показывается на экране.

но если я истользую разные логины - то екзешник оказывается в отдельной сессии и десктоп (главное окно) у этой сессии абсолютно другой, поэтому и окно никак не увидеть.
--
пользовал ф-ю
function ULONG GetDesktopWindow() library "user32"

так-что PB здесь не причем. это все ОС.
...
Рейтинг: 0 / 0
24.07.2007, 14:09
    #34680123
iLLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка на "залогиненность" машины
Dmitry.если я захожу в систему (у меня win xp)
под тем-же логином под каким запускаю свой exe-шник (через Scheduled Tasks),
то окно показывается на экране.
А выложить пробное приложение сюда не можешь? Может у меня руки не оттуда растут и я не так открываю окна, но у меня "убей - не получается" увидеть окна после логона.
...
Рейтинг: 0 / 0
24.07.2007, 15:22
    #34680470
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка на "залогиненность" машины
приложение проще не бывает

пустое окно w_main

на открытии приложения код
open(w_main)

PB 10.2
...
Рейтинг: 0 / 0
24.07.2007, 16:18
    #34680720
iLLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка на "залогиненность" машины
Хм, у меня WinXP + PB9.03
...
Рейтинг: 0 / 0
24.07.2007, 17:26
    #34681054
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка на "залогиненность" машины
iLLerХм, у меня WinXP + PB9.03
А как это согласуется с первым сообщением про 2000?
...
Рейтинг: 0 / 0
24.07.2007, 17:35
    #34681097
iLLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка на "залогиненность" машины
Ну как, как. Просто. Переполз на отладочную машину с XP.

Сделал только что нулевое приложение без оконных обработчиков, без ничего, только одно окно и все. Добавил в "Назначенные задания". Перегрузился, окна нет. Сменил режим входа с окном приветствия на стандартный НТшный (с указанием пары логин/пароль), эффект тот же.
Кто-нибудь попробуйте с 9-м билдером провернуть такой финт. Ну ей богу, достало уже во тьме шарахаться.)))
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Проверка на "залогиненность" машины / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]