C# Запуск программы после входа пользователем в систему

217
26 января 2018, 20:18

Есть программа, которая прописывает себя в автозагрузку. Все работает, все отлично.

RegistryKey reg;
reg = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\", true);
reg.SetValue("PCVision", Assembly.GetExecutingAssembly().Location);

Но есть одна проблема, когда пользователь ставит и снимает компьютер со сна - программа понятным образом не запускается. так как полноценной перезагрузки системы не происходит.

Собственно вопрос, возможно кто-то из вас уже ранее стыкался с подобным и знает как правильно выйти из этой ситуации.

Answer 1

Сомневаюсь, что реестре есть раздел, отвечающий за это. Например, гугл молчит на запрос вида "run program after power change". Да и с трудом представляю когда бы это могло кому-нибудь понадобиться => Microsoft, скорее всего, не стали реализовывать невостребованный функционал.

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

Например, прикладная программа может поймать данные события как в этом примере:

SystemEvents.PowerModeChanged += OnPowerChange;
private void OnPowerChange(object s, PowerModeChangedEventArgs e) 
{
    switch ( e.Mode ) 
    {
        case PowerModes.Resume: 
        break;
        case PowerModes.Suspend:
        break;
    }
}

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

Answer 2

Попробуйте запустить приложение(напишите свою службу, которая будет следить, за работой приложения и когда надо запускать.), чтобы поймать событие:

Microsoft.Win32.SystemEvents.PowerModeChanged += this.SystemEvents_PowerModeChanged;
private void SystemEvents_PowerModeChanged(object sender, Microsoft.Win32.PowerModeChangedEventArgs e)
{
    if (e.Mode == PowerModes.Resume)
    {
        //Ваш код
    }
}

ну или через планировщик заданий , триггер на следующее событие:

Журнал Microsoft-Windows-Diagnostics-Performance

Источник Diagnostics-Performance

Код события 300

или же на "At Workstation Unlock"

READ ALSO
Передать параметр в ViewModel из Behavior WPF MVVM

Передать параметр в ViewModel из Behavior WPF MVVM

Каким образом из реализации поведения контрола можно передать свойство или параметр во ViewModelВ окне имеется PasswordBox у которого реализовано...

205
.NET C# WPF DataGrid Как ускорить отрисовку?

.NET C# WPF DataGrid Как ускорить отрисовку?

Доброго времени суток! Имеется некий DataGrid:

266
Программа завершилась с кодом 1073741855 (0x4000001f)

Программа завершилась с кодом 1073741855 (0x4000001f)

Пробовал гуглить по этому коду, но ничего не нашелВообще, я не удивлен крешу, так как тут 20+ потоков, которые вызывают WinApi-функции через библиотеку...

335
Как создать numeric столбец в таблице dbf на C# ADO.NET

Как создать numeric столбец в таблице dbf на C# ADO.NET

Создаю таблицу в dbf, так работает нормально

227