Какое-то время назад мой рабочий ноутбук отказался включаться. Просто не реагировал ни на какие попытки, включая отключение батареи. У технической поддержки ушло несколько месяцев на то, чтобы замененить практически все компоненты от матрицы до материнской платы и выяснить, что проблема была в перетертом шлейфе матрицы. Шлейф заменили, машина ожила и вернулась ко мне. Но в первый же день выяснилась интересная особенность — видимо, в пылу борьбы со шлейфом ремонтеры поломали или отключили датчик закрытия крышки. Теперь ноутбук не засыпает при закрытии крышки. Какое-то время я пытался найти способ устранить это самостоятельно, но в этот раз действенных советов Гугл и форумы комании Lenovo, к сожалению, не дали. Второй раз отдавать машину в ремонт просто страшно.
Ок, я не могу решить проблему механически, но может быть можно придумать, какой-то простой workaround. Например, я привык, уходя блокировать компьютер нажатием Win+L, почему бы не сделать shortcut для перевод машины в спящий режим? Выяснилось, что отправить машину в sleep несложно, но вот привязать это к нажатию на Ctrl+Q, например, уже не так тривиально. Можно найти софт, который будет управлять для вас этими функциями. Ну или написать свой. И так вышло, что как раз сегодня есть пара часов времени и стойкое желание попрактиковаться в программировании.
Так как программист я посредственный, то писать решил на C# в Visual Studio Community Edition. Чтобы не усложнять создал пустой проект в формате Windows Form Application с одной формой, в которую добавил контрол notifyIcon. Форму сделал невидимой сразу после старта, а в обработчк MouseDoubleClick добавил код включения и выключения видимости, чтобы форму можно было штатным образом закрыть. Эта мысль пришла не сразу, а после того, как стало понятно, что приложение должно уметь отменить регистрацию глобальных shortcut-ов после своей терминации.Читать полностью »