Вимкнення режиму сну при підключенні зовнішнього дисплея


2

Коли я підключений до зовнішнього дисплея, я хотів би закрити ноутбук, не спаючи. Коли я не підключений до зовнішнього дисплея, я хотів би, щоб закривши кришку, клав ноутбук у режим сну.
Я знаю, що досягти цього можна вручну, перемикаючи параметри живлення, але мені хотілося б чогось автоматичного. Будь-яка ідея? Чи можемо ми відстежувати зовнішнє підключення дисплея?
Windows 10

Відповіді:


0
  1. Визначте (або створіть, якщо необхідно) дві схеми живлення, одну з увімкненою кнопкою сну, одну з вимкненим.

  2. За допомогою команди powercfg /lвизначте GUID цих схем.

  3. Встановіть AutoHotKey та налаштуйте запуск цього сценарію моніторингу після кожного запуску Windows. Кожен раз, коли монітор підключений та відключений, AutoHotKey запустить сценарій для вас, перемикаючи схему живлення:

    OnMessage (0x219, "MsgMonitor")
    MsgMonitor (wParam, lParam, msg)
    {
        якщо (wParam = 7) {
            Запустити, powercfg / s 381b4222-f694-41f0-9685-ff5bb260df2e
        } Ще {
            Виконати, powercfg / s 381b4222-0001-2222-3333-000000000000
        }
        MsgBox перевірить% wParam% та% lParam% та вирішить запускати програми з% msg%
    }
    ; wParam: 7 lParam: підключено 0 моніторів
    ; wParam: 32772 lParam: 8977536 слід відключити

Важливо: Замініть зразки GUID у наведеному вище коді на GUID, визначений на кроці 2 .

Джерела:


0

Рішення @miroxlav для мене не працювало. Я змінив сценарій так.

  • Ще потрібно створити два конфігурації енергозбереження
  • Сценарій AutoHotKey зазвичай виконується при запуску.
  • Піймана подія трохи інша (WM_DISPLAYCHANGE)
  • Ви повинні визначити назву вашого основного екземпляра монітора від powerhell get-WmiObject або менеджера пристроїв або ...
  • UUID-адреси конфігурації живлення також жорстко закодовані в сценарії.
    /*
       Please note that it is not sufficient to count the number of monitors because the
       main monitors goes off line when you close the lid.
       Which resets the count to... 1
       So instead, we just make our decision on the presence of a different monitor than the known
       main one (hardcoded id, SN is a poor criterion).
    */

    /*  
        Subscribe to windows event
        0x7E = WM_DISPLAYCHANGE
    */
    OnMessage(0x7E, "MsgMonitor")

    MsgMonitor(wParam, lParam, msg) {

    /* Sleep 2 sec because there is a delay before display is known to WMI */
    Sleep 2000

    /* default */
    strComputer := "."

    /* This is the one for my PC... */
    myMonitor := "DISPLAY\LGD056E\4&13419694&0&UID265988_0"

    objWMIService := ComObjGet("winmgmts:{impersonationLevel=impersonate}!\\" . strComputer . "\root\wmi")
    colItems := objWMIService.ExecQuery("Select * FROM WMIMonitorID")._NewEnum

    hasExternal := false

    While colItems[objItem]
    if objItem.instanceName != myMonitor {
        hasExternal := True
    }

    if ( hasExternal ) {
        /* this is the power config that does not set laptop to sleep on lid closing */event
        Run, powercfg /s a48ebd52-0590-400d-b032-ac7f4302c0e1
    } Else {
        /* this instead is the power config that does set laptop to sleep on lid closing event */
        Run, powercfg /s 377a8558-bff4-4f51-ab43-626b1aa5a65f
    }

}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.