Процесс, который запускается, чтобы показать экран входа в систему, кажется, называется LogonUI.exe
.
Используя Windows Management Instrumentation (WMI) infrastructure, вы можете слушать процессы, которые запускаются и выключаются. Вам понадобится ссылка на сборку System.Management
.
var interval = new TimeSpan(0, 0, 1);
const string isWin32Process = "TargetInstance isa \"Win32_Process\"";
// Listen for started processes.
WqlEventQuery startQuery
= new WqlEventQuery("__InstanceCreationEvent", interval, isWin32Process);
_startWatcher = new ManagementEventWatcher(startQuery);
_startWatcher.Start();
_startWatcher.EventArrived += OnStartEventArrived;
// Listen for closed processes.
WqlEventQuery stopQuery
= new WqlEventQuery("__InstanceDeletionEvent", interval, isWin32Process);
_stopWatcher = new ManagementEventWatcher(stopQuery);
_stopWatcher.Start();
_stopWatcher.EventArrived += OnStopEventArrived;
Обращаясь к этим событиям, вы можете получить информацию о запущенном или закрытом процессе. Таким образом, вы можете проверить, когда LogonUI.exe
был отключен, а затем инициировать необходимые действия.
void OnStopEventArrived(object sender, EventArrivedEventArgs e)
{
var o = (ManagementBaseObject)e.NewEvent[ "TargetInstance" ];
string name = (string)o[ "Name" ];
...
}
Отлично, это похоже на одно возможное решение. В настоящее время я изучаю, может ли какое-то отслеживание LogonUI.exe работать. Если я ударил стену, я попробую. –
Я закончил с [довольно быстрой реализацией не P/Invoke] (http://stackoverflow.com/a/10607062/590790). Если вы не увидите никаких проблем с этим, я буду считать это принятым ответом. Пока это работает. Тем не менее, этот ответ очень ценится! –
@Steven Нет, ничего плохого в WMI. Это часто альтернатива перехватам, иногда более удобным для кода, особенно на языках .NET, где большая часть инфраструктуры уже существует (т. Е. Они скрыли код P/Invoke внутри BCL).Единственная проблема, которая приходит на ум, заключается в том, что она требует, чтобы все целевые машины включали службу WMI, но если вы используете установщик или что-то еще, вы можете убедиться, что они настроены соответствующим образом в то время. –