“Extend my Windows desktop onto this monitor” programmatically

后端 未结 8 1081
不思量自难忘°
不思量自难忘° 2020-12-24 03:02

I would like to be able to set \"Extend my Windows desktop onto this monitor\" via code. A PowerShell script would be ideal. WMI seems the way forward but I have zero knowle

8条回答
  •  -上瘾入骨i
    2020-12-24 03:22

    One first possible solution is... through the GUI (but without user interaction)

    VB script (also described here but in Autoit language):

    Option Explicit
    Dim WshShell, Dummy, Splash
    
    On Error Resume Next
    
    Set WshShell = WScript.CreateObject("WScript.Shell")
    
    'Main
    Call DoIt
    WScript.Quit
    
    Sub DoIt
    wshshell.Run("%systemroot%\system32\control.exe desk.cpl,@0,3")
    
    ' Give Display Properties time to load
    WScript.Sleep 1000
    WshShell.SendKeys "2"
    WScript.Sleep 10
    WshShell.SendKeys "%E"
    WScript.Sleep 500
    WshShell.SendKeys "%A"
    WshShell.SendKeys "{TAB}"
    WshShell.SendKeys "{TAB}"
    WshShell.SendKeys "{TAB}"
    WshShell.SendKeys "{TAB}"
    WshShell.SendKeys "{TAB}"
    WshShell.SendKeys "{TAB}"
    WshShell.SendKeys "{TAB}"
    WshShell.SendKeys "{TAB}"
    WshShell.SendKeys "{TAB}"
    WshShell.SendKeys "{TAB}"
    WshShell.SendKeys "{ENTER}"
    End Sub 'DoIt
    

    In Autoit, that would be:

    ;
    ; — toggle-screen.au3
    ;
    
    ; exec cpanel app `display settings`
    Run(”C:\WINDOWS\system32\control.exe desk.cpl,@0,3?”)
    
    ; wait for window to be active
    WinWaitActive(”Display Settings”)
    
    ; select 2nd display
    Send(”{TAB}”)
    Send(”{DOWN}”)
    
    ; work back to the ‘extend desktop’ control
    Send(”+{TAB}”)
    Send(”+{TAB}”)
    Send(”+{TAB}”)
    Send(”+{TAB}”)
    Send(”+{TAB}”)
    Send(”+{TAB}”)
    Send(”+{TAB}”)
    Send(”+{TAB}”)
    Send(”+{TAB}”)
    
    ; toggle ‘extend desktop’ control and apply
    Send(”{SPACE}”)
    Send(”{ENTER}”)
    
    ; wait for window to be active
    WinWaitActive(”Display Settings”)
    
    ; accept
    Send(”{TAB}”)
    Send(”{ENTER}”)
    
    ;
    ; — E.O.F.
    ; 
    

提交回复
热议问题