Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> отслеживание событий WINDOWS 
:(
    Опции темы
Varius
Дата 18.7.2006, 02:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



подскажите кто знает . есть сервис, надо чтоб он отлавливал перезагрузку, выход из системы, смену пользователя, выключение...как енто сделать? 
PM MAIL   Вверх
_hunter
Дата 18.7.2006, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



лови WM_ENDSESSION 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Varius
Дата 18.7.2006, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



событие  WM_ENDSESSION  происходит при завершении работы windows, а как отследить, что именно -   перезагрузка, выход из системы, смену пользователя, выключение? 
PM MAIL   Вверх
Romikgy
Дата 18.7.2006, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



http://vingrad.ru/DELPHI-DLP-000808
хоть и на дельфи , но думаю разберешься 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Varius
Дата 19.7.2006, 03:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



как ето сделать в самом сервисе? 
PM MAIL   Вверх
_hunter
Дата 19.7.2006, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



так и сделать. в чем проблема?
или у тебя сервис безоконный? -- тогда guardian' а ему напиши... 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Varius
Дата 20.7.2006, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



что такое guardian? еще вопрос, как получить текучего пользователя (не испльзовать GetUserName, она извлекает из текущего потока, а ето имя скорее всего будет system).Сервис у меня безоконный. 
PM MAIL   Вверх
_hunter
Дата 20.7.2006, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



программа, запускаемая под обычным пользователем и передающая сервису какую-то информацию.
да и для получения имени пользователя она пригодится... 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
dumb
Дата 20.7.2006, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



по-хорошему надо сделать dll'ку и из нее слать контролы в свой сервис(OpenService, ControlService)... 
PM MAIL   Вверх
Varius
Дата 20.7.2006, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



при смене пользователя dll'ка странным образом отваливается, пробовал на разных системах,усе тоже.Так какой функцией мона узнать текущего пользователя? 
PM MAIL   Вверх
dumb
Дата 21.7.2006, 04:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



хм. специально сейчас проверил - ничего не "отваливается". ни при входах-выходах, ни при fast switch'е юзеров.

Pwl_notify.dll:
Код

//---------------------------------------------------------------------------
#include <windows.h>
#include <winwlx.h>
#include <stdio.h>
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hInstance, unsigned long dwReason, void* lpReserved)
{
  switch (dwReason)
  {
    case DLL_PROCESS_ATTACH:
    {
      // Disable DLL_THREAD_ATTACH & DLL_THREAD_DETACH
      // notification calls. This is a performance optimization
      // for multithreaded applications that do not need
      // thread-level notifications of attachment or detachment.
      DisableThreadLibraryCalls (hInstance);
    }
    break;
  }
  return 1;
}
//---------------------------------------------------------------------------
// Here is the event handler for the Winlogon Logon event.
extern "C" _stdcall _declspec(dllexport) void WLEventLogon (PWLX_NOTIFICATION_INFO pInfo)
{
  char uname[256], dname[256], wname[256];
  WideCharToMultiByte( CP_ACP, 0, pInfo->UserName, -1, uname, sizeof( uname ), NULL, NULL );
  WideCharToMultiByte( CP_ACP, 0, pInfo->Domain, -1, dname, sizeof( dname ), NULL, NULL );
  WideCharToMultiByte( CP_ACP, 0, pInfo->WindowStation, -1, wname, sizeof( wname ), NULL, NULL );

  FILE * f = fopen("C:\\wl_notify.txt", "a+");
  if ( !f ) return;
  fprintf( f, "logon: %s@%s (%s)\n", uname, dname, wname );
  fclose( f );
}
//---------------------------------------------------------------------------
// Here is the event handler for the Winlogon Logoff event.
extern "C" _stdcall _declspec(dllexport) void WLEventLogoff (PWLX_NOTIFICATION_INFO pInfo)
{
  char uname[256], dname[256], wname[256];
  WideCharToMultiByte( CP_ACP, 0, pInfo->UserName, -1, uname, sizeof( uname ), NULL, NULL );
  WideCharToMultiByte( CP_ACP, 0, pInfo->Domain, -1, dname, sizeof( dname ), NULL, NULL );
  WideCharToMultiByte( CP_ACP, 0, pInfo->WindowStation, -1, wname, sizeof( wname ), NULL, NULL );

  FILE * f = fopen("C:\\wl_notify.txt", "a+");
  if ( !f ) return;
  fprintf( f, "logoff: %s@%s (%s)\n", uname, dname, wname );
  fclose( f );
}
//---------------------------------------------------------------------------


reg:
Код

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\WL_Notify]
"DLLname"="Pwl_notify.dll"
"Logoff"="WLEventLogoff"
"Logon"="WLEventLogon"


еще есть SERVICE_CONTROL_SESSIONCHANGE, но он только с XP "пришел". в 2к нет его.
 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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