Получать события SENS в .NET - PullRequest
       55

Получать события SENS в .NET

2 голосов
/ 01 января 2012

Я хочу получать события SENS, когда заставка включается / выключается.Мой код основан на этой статье:

private static readonly string GUID = "{" + typeof(ScreensaverHandler).GUID.ToString() + "}";

[ComImport, Guid("4E14FBA2-2E22-11D1-9964-00C04FBBB345")]
private class EventSystem { }

[ComImport, Guid("7542E960-79C7-11D1-88F9-0080C7D771BF")]
private class EventSubcription { }

[ComImport, Guid("AB944620-79C6-11d1-88F9-0080C7D771BF")]
private class EventPublisher { }

[ComImport, Guid("cdbec9c0-7a68-11d1-88f9-0080c7d771bf")]
private class EventClass { }

public ScreensaverHandler() {
    IEventSystem es = (IEventSystem) new EventSystem();
    IEventSubscription sub = (IEventSubscription) new EventSubcription();
    sub.Description = "description";
    sub.SubscriptionName = "subscriptionname";
    sub.SubscriptionID = GUID;
    sub.InterfaceID = GetInterfaceGuid(typeof(SensEvents.ISensLogon));
    sub.SubscriberInterface = this; // implements SensEvents.ISensLogon 
    es.Store("EventSystem.EventSubscription", sub);
}

private static string GetInterfaceGuid(Type type) {
    object[] attributes = type.GetCustomAttributes(typeof(GuidAttribute), true);
    return "{" + ((GuidAttribute)attributes[0]).Value + "}";
}

Проблема в том, что es.Store создает исключение System.UnauthorizedAccessException с Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

1 Ответ

2 голосов
/ 01 января 2012

Вы можете столкнуться с побочным эффектом этого бюллетеня по безопасности Microsoft .Возможно, вам придется ослабить ограничения безопасности на dll системы событий.

Я бы, если вы еще не сделали, сначала попробуйте это с правами администратора.Я только что проверил ваш код на Win Server 2008 как полный администратор без проблем.

Кроме того, есть еще одна очень хорошая статья о системе событий в .Net на CodeProject .

...