외부 모니터가 연결된 경우에만 노트북 덮개를 닫아도 아무 일도 일어나지 않도록 자동화합니다.

외부 모니터가 연결된 경우에만 노트북 덮개를 닫아도 아무 일도 일어나지 않도록 자동화합니다.

전체 내용을 읽기 전에 중복으로 표시하지 마십시오. 다른 게시물을 읽었지만 문제가 해결되지 않았습니다.

저는 외부 디스플레이가 있는 노트북을 사용하고 있습니다. 디스플레이가 연결되면 뚜껑을 닫아 아무것도 하지 않게 하고 싶습니다. 하지만 디스플레이가 연결되지 않은 경우 덮개를 닫아 노트북을 절전 모드로 전환하고 싶습니다.

지금 제가 하고 있는 일은 외부 디스플레이를 사용할 때 설정에서 '뚜껑 닫기'를 '아무 것도 하지 않음'으로 설정하고, 디스플레이 연결을 끊은 후에는 다시 설정하는 것을 기억해 두는 것입니다. 하지만 종종 잊어버리고 노트북이 잠자기 상태라고 생각하는 시간에도 몇 시간 동안 켜져 있어 배터리가 소모됩니다.

나는 이미 autohotkey를 사용하고 있으므로 AutoHotkey에서 외부 디스플레이를 감지하는 간단한 방법이 있다면 시작이 될 것입니다. 그런 다음 두 개의 전원 계획을 만들고 그 사이를 전환할 수 있습니다(AutoHotkey에서 가능합니까?).

이미 sysget, MonitorCount를 시도했지만 외부 모니터만 있는 경우와 랩톱 모니터만 있는 경우 모두 모니터 수가 1이기 때문에 작동하지 않습니다.

답변1

나는 당신의 문제에 대한 확실한 답을 모릅니다. 하지만 시도해 볼 수 있는 몇 가지 작업이 있습니다.

  1. 노트북을 닫기 전에 잠시 플러그를 꽂으세요.플러그를 꽂으면 아무것도 하지 않도록 덮개를 닫고 연결하지 않으면 절전 모드로 설정할 수 있습니다. 따라서 모니터를 사용할 때 노트북을 연결하고 덮개를 닫은 다음 플러그를 뽑을 수 있습니다(노트북은 깨어 있는 상태를 유지합니다. )
  2. 노트북을 켠 후 바로 닫습니다.내 경험상 노트북을 켠 후 바로 닫으면 절전 모드로 전환되지 않습니다. (아마 Windows가 덮개를 닫을 때 절전 모드로 전환하는 프로세스를 아직 로드하지 않았기 때문일 것입니다.)
  3. 바로가기 키 "[WIN]+X,U,S"를 눌러 절전 모드로 전환내 컴퓨터 중 하나는 덮개를 닫으면 종료되는 것 외에 아무 작업도 하지 않으므로 다음과 같은 절전 단축키를 사용하는 습관이 생겼습니다.Windows 키를 누른 상태에서 "x"를 누릅니다. 손을 뗀 다음 "u"와 "s" 키를 누르지 말고 누르세요.익숙해지면 이 바로가기를 사용하는 것이 컴퓨터를 잠자기 위해 시작 메뉴로 들어가는 것보다 훨씬 더 효율적일 수 있습니다.

답변2

물론 기본적으로 AHK에서는 무엇이든 할 수 있습니다. 계획을 만들고 활성화하려는 정확한 버튼과 위치의 작은 스크린샷을 캡처한 다음 AHK 스크립트를 스크립팅하여 전원 대화 상자를 열고 png/jpg를 기반으로 정확한 계획을 검색하고 클릭한 다음 닫을 수 있습니다. 전원 대화 상자.

이것이 최선의 선택은 아닐 수도 있지만, 하나의 선택입니다. taskchd.msc에는 현재 전원 계획을 결정할 수 있는 기능이 있으므로 예약된 작업을 살펴볼 수 있습니다.

답변3

완전한 답변은 아니지만 몇 가지 지침이 있을 수 있습니다.

모니터에는 이름이 있습니다. 예를 들어 다음은 작업 표시줄과 ClickMonitorDDC라는 샷컷을 사용하여 필요에 따라 모니터 밝기를 변경하는 데 사용하는 프로그램의 스크린샷입니다.

두 개의 연결된 모니터(내부 노트북 모니터와 연결된 Dell 모니터)의 이름을 보여주는 스크린샷.

스크린샷

여기는오토핫키를 사용해서 찾은 것AutoHotKey에서 모델 번호를 찾는 데 사용됩니다.

그리고 마지막으로 여기는AutoHotKey를 통한 전원 계획 변경에 관한 것.

답변4

참고: 저는 오토핫키 사용자가 아닙니다.

내가 찾은 내용은 다음과 같습니다.이 링크?

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
#SingleInstance force

; Defines getMonitorInputSource
; Finds monitor handle
getMonitorHandle()
{
  ; Initialize Monitor handle
  hMon := DllCall("MonitorFromPoint"
    , "int64", 0 ; point on monitor
    , "uint", 1) ; flag to return primary monitor on failure

    
  ; Get Physical Monitor from handle
  VarSetCapacity(Physical_Monitor, 8 + 256, 0)

  DllCall("dxva2\GetPhysicalMonitorsFromHMONITOR"
    , "int", hMon   ; monitor handle
    , "uint", 1   ; monitor array size
    , "int", &Physical_Monitor)   ; point to array with monitor

  return hPhysMon := NumGet(Physical_Monitor)
}

destroyMonitorHandle(handle)
{
  DllCall("dxva2\DestroyPhysicalMonitor", "int", handle)
}

getMonitorInputSource()
{
  handle := getMonitorHandle()
  DllCall("dxva2\GetVCPFeatureAndVCPFeatureReply"
    , "int", handle
    , "char", 0x60 ;VCP code for Input Source Select
    , "Ptr", 0
    , "uint*", currentValue
    , "uint*", maximumValue)
  destroyMonitorHandle(handle)
  return currentValue
}

MouseLock := False

!+l::
    If (!MouseLock && getMonitorInputSource() == 4) {
        MouseLock := True
        BlockInput, MouseMove
        return
        }

    Else {
        MouseLock := False
        BlockInput, MouseMoveOff
        return
        }

#If (getMonitorInputSource() == 4 && !MouseLock)
XButton2::
    If (!WinExist("ahk_exe Magnify.exe")) {
        Send, #=
        return
        }
    If (WinExist("ahk_exe Magnify.exe")) {
        Send, #{Esc}
        return
        }

#If (getMonitorInputSource() == 4 && MouseLock)
XButton2::
    If (!WinExist("ahk_exe Magnify.exe")) {
        Send, #=
        BlockInput, MouseMoveOff
        return
        }
    If (WinExist("ahk_exe Magnify.exe")) {
        Send, #{Esc}
        BlockInput, MouseMove
        return
        }

관련 정보