john1990_1 Ответов: 1

Как настроить мышь так, чтобы она не будила ПК в C#?


I made an exe file that puts the screens on standby for when I want darkness in the room to sleep but not to have to put the PC to sleep or hibernate it as this sometimes ruins my Winstep Nexus Ultimate bars and moves them to different screens and the individual windows open and it takes a long time to wake up from hibernation, but when the mouse moves the movement wakes them up, I want to force Windows to not wake up when the mouse moves as this could happen accidentally, I want to use some C# lines of code that running them would make Windows not wake up when the mouse moves (maybe also prevent the keyboard from waking up the standby mode of the screens).

Что я уже пробовал:

static void Main()
       {
           System.Threading.Thread.Sleep(2000);
           SendMessage((new Form()).Handle, WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)2);
       }


       static private int SC_MONITORPOWER = 0xF170;
       static private uint WM_SYSCOMMAND = 0x0112;

       [DllImport("user32.dll")]
       static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

phil.o

Просто подумайте: если вы планируете отключить мышь и клавиатуру, как вы планируете восстановить контроль над своим компьютером?

john1990_1

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

1 Ответов

Рейтинг:
12

RickZeeland

Простой способ состоял бы в том, чтобы установить События mousemove событие для формы, чтобы снова выполнить ваш SendMessage (). Также видеть: c# - событие MouseMove в форме - переполнение стека[^]


john1990_1

Я знаю глобальные крючки мыши и клавиатуры, но как оставить мой exe-файл работающим до тех пор, пока не будет нажата клавиша клавиатуры?

RickZeeland

Если вы имеете в виду консольное приложение, вы можете использовать консоль.ReadKey()

john1990_1

Я лучше знаком с WinForms... кроме того, мне не нужно окно консоли. Кроме того, мне нужно, чтобы ключ был обнаружен глобально, а не только в окне консоли. могу ли я сделать: "пока (правда) Нить.Сон(2000);" in void Main() ?

RickZeeland

Конечно, но ваше приложение Winforms не будет очень отзывчивым, вам нужно использовать приложение.Doevents() для этого ...

john1990_1

Большое спасибо.