int ScreenSaver(int EnableExit) { INPUT_RECORD rec; clock_t WaitTime; if (ScreenSaverActive) return 1; ChangePriority ChPriority(ChangePriority::IDLE); for (WaitTime=GetProcessUptimeMSec(); GetProcessUptimeMSec()-WaitTime<500;) { if (PeekInputRecord(&rec)) return 1; WINPORT(Sleep)(100); } ScreenSaverActive=TRUE; CONSOLE_CURSOR_INFO CursorInfo; Console.GetCursorInfo(CursorInfo); { SaveScreen SaveScr; SetCursorType(0,10); randomize(); SetScreen(0,0,ScrX,ScrY,L' ',F_LIGHTGRAY|B_BLACK); for (size_t I=0; I<ARRAYSIZE(Star); I++) { Star[I].Type=STAR_NONE; Star[I].Color=0; } int Step=0; while (!PeekInputRecord(&rec)) { clock_t CurTime=GetProcessUptimeMSec(); if (EnableExit && Opt.InactivityExit && Opt.InactivityExitTime>0 && CurTime-StartIdleTime>Opt.InactivityExitTime*60000 && FrameManager->GetFrameCount()==1) { FrameManager->ExitMainLoop(FALSE); return 0; } WINPORT(Sleep)(50); ShowSaver(Step++); } } SetCursorType(CursorInfo.bVisible!=FALSE, CursorInfo.dwSize); ScreenSaverActive=FALSE; FlushInputBuffer(); StartIdleTime=GetProcessUptimeMSec(); return 1; }
static int CASHook(const Manager::Key& key) { if (key.IsEvent()) { const KEY_EVENT_RECORD& rec=key.Event().Event.KeyEvent; if (rec.bKeyDown) { switch (rec.wVirtualKeyCode) { case VK_SHIFT: case VK_MENU: case VK_CONTROL: { const auto maskLeft=LEFT_CTRL_PRESSED|LEFT_ALT_PRESSED|SHIFT_PRESSED, maskRight=RIGHT_CTRL_PRESSED|RIGHT_ALT_PRESSED|SHIFT_PRESSED; auto state=rec.dwControlKeyState; auto wait=[](DWORD mask) { for (;;) { INPUT_RECORD rec; if (PeekInputRecord(&rec,true)) { GetInputRecord(&rec,true,true); if ((rec.Event.KeyEvent.dwControlKeyState&mask) != mask) break; } Sleep(1); } }; auto case1 = Global->Opt->CASRule&1 && (state&maskLeft) == maskLeft, case2 = Global->Opt->CASRule&2 && (state&maskRight) == maskRight; if (case1 || case2) { auto maskCurrent = case1?maskLeft:maskRight; const auto currentWindow = Global->WindowManager->GetCurrentWindow(); if (currentWindow->CanFastHide()) { int isPanelFocus=currentWindow->GetType() == windowtype_panels; if (isPanelFocus) { int LeftVisible=Global->CtrlObject->Cp()->LeftPanel->IsVisible(); int RightVisible=Global->CtrlObject->Cp()->RightPanel->IsVisible(); int CmdLineVisible=Global->CtrlObject->CmdLine()->IsVisible(); int KeyBarVisible=Global->CtrlObject->Cp()->GetKeybar().IsVisible(); Manager::ShowBackground(); Global->CtrlObject->Cp()->LeftPanel->HideButKeepSaveScreen(); Global->CtrlObject->Cp()->RightPanel->HideButKeepSaveScreen(); switch (Global->Opt->PanelCtrlAltShiftRule) { case 0: if (CmdLineVisible) Global->CtrlObject->CmdLine()->Show(); if (KeyBarVisible) Global->CtrlObject->Cp()->GetKeybar().Show(); break; case 1: if (KeyBarVisible) Global->CtrlObject->Cp()->GetKeybar().Show(); break; } wait(maskCurrent); if (LeftVisible) Global->CtrlObject->Cp()->LeftPanel->Show(); if (RightVisible) Global->CtrlObject->Cp()->RightPanel->Show(); if (CmdLineVisible) Global->CtrlObject->CmdLine()->Show(); if (KeyBarVisible) Global->CtrlObject->Cp()->GetKeybar().Show(); } else { Global->WindowManager->ImmediateHide(); wait(maskCurrent); } Global->WindowManager->RefreshWindow(); } return TRUE; } break; } } } } return FALSE; }