Сделайте скриншот прямо перед блокировкой Windows - PullRequest
0 голосов
/ 20 июня 2019

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

Я попробовал SystemEvents.SessionSwith, но обработчик окна в это время больше не действителен.

Я также попытался LowLevelKeyboardProc поймать Win + L, сделать снимок экрана и затем заблокировать машину самостоятельно - но Win + L, похоже, как-то защищенный ярлык.

Это то, что я получил до сих пор

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);
    SystemEvents.SessionSwitch += SystemEvents_SessionSwitch;
}

private void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
{
    switch (e.Reason)
    {
        case SessionSwitchReason.SessionLock: TakeScreenShot(); break;
    }
}

private void TakeScreenShot()
{
    var screen = Screen.AllScreens.Single(x => x.Primary);
    var screenshot = new Bitmap(screen.Bounds.Width, screen.Bounds.Height, PixelFormat.Format32bppArgb);
    var gfxScreenshot = Graphics.FromImage(screenshot);
    gfxScreenshot.CopyFromScreen(screen.Bounds.X, screen.Bounds.Y, 0, 0, screen.Bounds.Size, CopyPixelOperation.SourceCopy);
    screenshot.Save("tmp.png");
}

Сбой с System.ComponentModel.Win32Exception: 'The handle is invalid'

1 Ответ

1 голос
/ 20 июня 2019

Я использовал свой собственный ярлык (Win+Shift+L), чтобы сделать снимок экрана и затем заблокировать машину.Спасибо @Hans Passant за подсказку.

...