Я просто немного поиграюсь. Я пытаюсь сделать скриншот основного монитора прямо перед тем, как пользователь заблокирует машину. Пока ничего не получалось.
Я попробовал 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'