İkinci bir monitör bağlandığında bir betiği nasıl tetiklerim


1

MacOS El Captain'dayım (yakında High Sierra'ya geçeceğim) ve sisteme bağlı monitör / ekran sayısı değiştiğinde her seferinde bir AppleScript veya kabuk betiğini tetikleyebilecek bir araç arıyorum.

ControlPlane'i denedim , ancak ekli ekran değişikliğindeki tetikleyiciyi çalıştırmayı başaramadım. İki soru:

1) ControlPlane’deki tetikleyicinin kesinlikle macOS El Captain ve daha yüksek sürümlerde çalıştığını bilen var mı ? (Yanlış bir şey yaptığımı belirtiyor.)

Veya:

2) Bir monitör / ekran bağlandığında (ekranın her bağlanışında) sayıları değiştirebilecek bir araç var mı?


Not : StackExchange ağında bu konuyla ilgili başka sorular olduğunun farkındayım ( harici bir monitörü taktığımda her komut dosyasını nasıl çalıştırabilirim? Veya harici monitörü bağladıktan sonra Mac OS X Windows Konumunu Sıfırla gibi ). Cevaplar El Captain / High Sierra için geçerli görünmüyor.

Yanıtlar:


1

Daha etkili bir yol olabilir, ancak bunu AppleScript kodunu Script Editor'de bir uygulama olarak kaydederseniz, ihtiyaçlarınızı özelleştirdikten sonra…… bu uygulamayı çalıştırmak için, şu anda yapılandırıldığı şekilde çalıştırmaya devam edene kadar her beş saniyede bir çalışıp kontrol etmeye devam edeceksiniz. ek monitör algılandı.

property displayCount : 1

repeat until displayCount is greater than 1
    tell application "Image Events"
        set theDisplays to count of displays
    end tell
    set displayCount to theDisplays
    delay 5 -- How Often To Check How Many Connected Monitors.. In Seconds
end repeat

-- The Following Line Will Execute When An Additional Display Is Connected
-- Replace The Following Code With Whatever Actions You Choose

activate
display dialog "New Display Connected" buttons {"Cancel", "OK"} default button "OK"

-- OR use the "run script" command as in the sample below

--set theScript to (path to desktop as text) & "whatever.scpt"
--set runScript to run script alias theScript

return

Bu sonraki seçenek bir monitörün bağlı olup olmadığını tespit eder ve çalışmaya devam eder

property displayCount : missing value
property tempDisplayCount : missing value

countDisplays()

repeat
    repeat until displayCount is greater than 1
        countDisplays()
    end repeat
    displayConnected()
    countDisplays()
    copy displayCount to tempDisplayCount
    repeat until tempDisplayCount is not equal to displayCount
        countDisplays()
    end repeat
    copy displayCount to tempDisplayCount
    if tempDisplayCount is greater than displayCount then
        displayConnected()
    else if tempDisplayCount is equal to displayCount then
        displayDisconnected()
    end if
end repeat

on displayConnected()
    -- The Following Lines Will Execute When An Additional Display Is Connected
    -- Replace The Following Code With Whatever Actions You Choose
    -- OR use the "run script" command as in the sample below
    -- set theScript to (path to desktop as text) & "whatever.scpt"
    -- set runScript to run script alias theScript
    activate
    set newDisplayConnected to button returned of (display dialog "New Display Connected" buttons {"Stop Monitoring", "Continue Monitoring"} default button "Continue Monitoring")
    if newDisplayConnected is "Stop Monitoring" then
        quit me
    end if
end displayConnected

on displayDisconnected()
    -- The Following Lines Will Execute When A Display Is Disconnected
    -- Replace The Following Code With Whatever Actions You Choose
    -- OR use the "run script" command as in the sample below
    -- set theScript to (path to desktop as text) & "whatever.scpt"
    -- set runScript to run script alias theScript
    activate
    set newDisplayDisconnected to button returned of (display dialog "A Display Was Disconnected" buttons {"Stop Monitoring", "Continue Monitoring"} default button "Continue Monitoring")
    if newDisplayDisconnected is "Stop Monitoring" then
        quit me
    end if
end displayDisconnected

on countDisplays()
    tell application "Image Events"
        set theDisplays to count of displays
    end tell
    set displayCount to theDisplays
    delay 5 -- How Often To Check How Many Connected Monitors.. In Seconds
end countDisplays

görüntü tanımını buraya girin görüntü tanımını buraya girin


1
Oldukça iyi görünüyor. Her ne kadar hiç bitmeyen bir AppleScript için biraz endişeliyim, ancak bu sistem için çok fazla vergi ödememeliydi.
halloleo

Bir sonraki değişikliği tespit etmek için betiğin çalışmaya devam etmesi gerekiyor. - Buna göre soruyu güncelleyecektir.
halloleo

@halloleo. Kodu sizin için güncellediğimi fark ettiniz mi? Bu daha çok aradığınız şey boyunca mı oluyor?
wch1zpink

@ Wch1zpink @ teşekkür ederiz. İkinci betik (güncellenmiş) soruya tam olarak uygulanabilir. :-)
halloleo

1
Tamam, @ wch1zpink.
halloleo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.