Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
24th
Сен
Как перехватить программно смену пользователя
Posted by maloy under Delphi, Win Api, Архив
ale_krolik
Мною написана программа которая управляется службой (Ну, типа открывается, закрывается). При перезагрузке системы все нормально работает, служба точно знает что программа не запущена. Но при смене пользователя, служба не перезапускаеться и в итоге она не знает, запущена ли программа или нет. Когда пользователь сам закрывает данную программу, она сообщает службе что мол я закрываюсь, а при смене пользователя ничего не происходит. Так вот, вопрос. Либо два решения, не заню какое легче и выгоднее. Как мне перехватить смену пользователя и послать запрос на закрытие программы или как мне из службы узнать, закрылась ли программа или нет.
rpy3uH
чтобы узнать закрылась или нет то вот так:
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;
тема на форуме от 2006 года
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)