Я задаю этот вопрос, потому что оказывается, что есть некоторые трудности с написанием приложения-заставки в Delphi, которое может работать с экрана входа в систему.
См. вопрос: экранная заставка входа в Windows 7 в Delphi
Я сузил проблему (или по крайней мере одну проблему) до конкретного вызова Win API CreateEvent
.
SyncEvent := CreateEvent(nil, True, False, '');
if SyncEvent = 0 then
RaiseLastOSError;
Этот код не работает только в том случае, если он вызывается с экрана входа в систему. И GetLastError возвращает, что доступ запрещен. Таким образом, ограничения безопасности на экране входа в систему не позволяют CreateEvent(nil, True, False, '');
создать желаемое событие.
(Я действительно не понимаю, как событие может быть опасным для безопасности.)
Итак, вопрос: можно ли создать событие на экране входа в систему? Предположительно через:
- Используя соответствующий
lpEventAttributes
- Или вместо этого вызов CreateEventEx.
Несмотря на то, что проблема возникла в Delphi, она больше связана с Win API. Поэтому не стесняйтесь отвечать на выбранном вами языке.
CreateEvent()
наnil
вместо''
. Существует разница между нулевым указателем и указателем на строку нулевой длины. В документации ничего не говорится о длина строки обрабатывается иначе, чем любая другая именованная строка. Если вы хотите безымянное событие, используйтеnil
. - person Remy Lebeau   schedule 14.07.2014