Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2006, 09:53   #1
ale_krolik
 
Регистрация: 27.11.2006
Сообщений: 4
По умолчанию Как перехватить программно смену пользователя

Знравствуйте.Мною написана прграмма которыа управляеться службой (Ну, типа открываеться, закрываеться). При перезагрузке системы все нормально работает, служба точно знает что программа не запущена. Но при смене пользователя, служба не перезапускаеться и в итоге она не знает, запущена ли программа или нет. Когда пользователь сам закрывает данную программу, она сообщает службе что мол я закрываюсь, а при смене пользователя ничего не происходит. Так вот, вопрос. Либо два решения, не заню какое легче и выгоднее. Как мне перехватить смену пользователя и послать запрос на закрытие программы или как мне из службы узнать, закрылась ли программа или нет. Заранее всем спасибо.
ale_krolik вне форума Ответить с цитированием
Старый 15.12.2006, 20:15   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

чтобы узнать закрылась или нет то вот так
Код:
  var
   hpr:thandle;
  ....
  hpr:=OpenProcess(PROCESS_TERMINATE,false,ProcessID);
  if hpr=0 then 
     begin
       //процесса не существует следовательно он закрыт
     end;
если не знаешь как получить ID процесса по его имени
то вот так
Код:
function GetProcessID(ProcessName:string):DWORD;
var
  Snap: dword;
  Process: TPROCESSENTRY32;
begin
  Result := 0;
  Snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if Snap <> INVALID_HANDLE_VALUE then
     begin
      Process.dwSize := SizeOf(TPROCESSENTRY32);
      if Process32First(Snap, Process) then
         repeat
          if lstrcmpi(Process.szExeFile, pchar(ProcessName)) = 0 then
             begin
              Result := Process.th32ProcessID;
              CloseHandle(Snap);
              Exit;
             end;
         until not Process32Next(Snap, Process);
      Result := 0;
      CloseHandle(Snap);
     end;
end;
rpy3uH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перехватить нажатие клавиш в Windows? JoanM Win Api 15 31.05.2013 14:42
Как программно достать пароль текущего пользователя? masterdela Безопасность, Шифрование 2 22.08.2008 11:44
Перехватить сообщение об ошибке Insainer Общие вопросы Delphi 5 25.04.2008 20:39
Как перехватить обращения к принтеру? Classic Win Api 2 16.08.2007 11:07
как перехватить открытие чужого приложенияпытаюсь перехватить открытие любого приложе rpy3uH Win Api 2 02.12.2006 12:12