Действительно ли возможно исполнить роль пользователя, не регистрируя его в?

Вы можете использовать EventAggregators для достижения этой цели.

Для тех, кто незнаком, Event Aggregator - это служба, которая предоставляет возможность публиковать объект от одного объекта к другому свободно основанным образом.

blockquote>

Подробнее об агрегаторах событий можно прочитать здесь

Вы начинаете с определения своего CustomMessage, которое будет содержать сообщение, которое нужно передать.

public class CustomMessage
{
    public string String1 { get; set; }
}

Теперь вы переходите к ParentViewModel и создаете экземпляр агрегатора событий.

private IEventAggregator _eventAggregator;
[ImportingConstructor]
public ShellViewModel(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
_eventAggregator.Subscribe(this);
}

В установщике вашего свойства, которое привязано к вашему текстовому полю, вы теперь добавите код для публикации сообщения с помощью Event Aggregator.

Например,

public string String1
{
    get => _string1;
    set
    {
        if (_string1.Equals(value)) return;

        _string1 = value;
        _eventAggregator.PublishOnUIThread(new CustomMessage
        {
            String1 = _string1,
        });

    }

}

Теперь вы направляетесь к своей модели детского представления и подписываетесь на агрегатор событий.

private IEventAggregator _eventAggregator;
[ImportingConstructor]
public SecondWinViewModel(IEventAggregator eventAggregator)
{
    _eventAggregator = eventAggregator;
    _eventAggregator.Subscribe(this);
}

Чтобы подписаться на конкретное сообщение (в данном случае CustomMessage), вам необходимо реализовать интерфейс IHandle.

[Export(typeof(SecondWinViewModel))]
public class SecondWinViewModel : Screen, IHandle

Для интерфейса требуется один метод, который вы бы использовали для получения сообщения и обновления обязательного свойства в вашем дочернем окне.

public void Handle(CustomMessage message)
{
    String1 = message.String1;
    NotifyOfPropertyChange(nameof(String1));
}

Вы можете сделать то же самое для нескольких параметров, добавив больше свойств в ваше CustomMessage. Таким же образом вы можете передавать сообщения от Child Vm к Parent Vm.

8
задан Vertexwahn 4 March 2016 в 16:12
поделиться

2 ответа

Нет, необходимо вызвать функцию Win32 API LogonUser для возвращения, окна считают маркер, таким образом, можно затем явиться олицетворением.

6
ответ дан 5 December 2019 в 12:14
поделиться

Вы можете выдать себя за пользователя без ввода пароля, вызвав ZwCreateToken. См. Функцию CreatePureUserToken в этой статье: RunAsEx на основе графического интерфейса Чтобы это работало, вы должны работать как администратор (или LocalSystem).

Другой способ - использовать пакеты субаутентификации Windows. Это позволяет вам переопределить встроенную проверку подлинности Windows и позволить LogonUser успешно выполнить, даже если пароль не был предоставлен. См. Эту статью базы знаний .

8
ответ дан 5 December 2019 в 12:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: