Làm cách nào để kích hoạt tập lệnh khi màn hình thứ hai được đính kèm


1

Tôi đang sử dụng macOS El Captain (sắp nâng cấp lên High Sierra) và tôi đang tìm kiếm một công cụ có thể kích hoạt AppleScript hoặc shell script mỗi khi số lượng màn hình / màn hình được gắn vào hệ thống thay đổi.

Tôi đã thử ControlPlane , nhưng không thể kích hoạt thay đổi hiển thị đính kèm để hoạt động. Hai câu hỏi:

1) Có ai biết rằng kích hoạt hiển thị trong ControlPlane chắc chắn hoạt động trên macOS El Captain trở lên không? (Cho biết tôi đang làm gì đó sai.)

Hoặc là:

2) Có công cụ nào khác có thể tác động đến việc thay đổi số lượng màn hình mỗi khi màn hình / màn hình được kết nối (dis-) không?


PS : Tôi biết có một số câu hỏi khác trong mạng StackExchange liên quan đến chủ đề này (như Làm cách nào tôi có thể chạy tập lệnh bất cứ khi nào tôi cắm vào màn hình ngoài? Hoặc Đặt lại Mac OS X Windows Position sau khi gắn màn hình ngoài ) câu trả lời dường như không áp dụng cho El Captain / High Sierra.

Câu trả lời:


1

Có thể có một cách hiệu quả hơn nhưng nếu bạn lưu mã AppleScript này theo Script Editor, dưới dạng một ứng dụng, sau khi tùy chỉnh nó theo nhu cầu của bạn, chạy ứng dụng này, như được cấu hình hiện tại, sẽ tiếp tục chạy và kiểm tra cứ sau 5 giây, cho đến khi màn hình bổ sung được phát hiện.

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

Tùy chọn tiếp theo này sẽ phát hiện xem màn hình được kết nối hay ngắt kết nối và sẽ tiếp tục chạy

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

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây


1
Trông khá tốt. Mặc dù tôi hơi lo lắng về một AppleScript không bao giờ kết thúc, nhưng cái này không nên đánh thuế quá cao vào hệ thống.
halloleo

Tôi cần tập lệnh để tiếp tục chạy để phát hiện thay đổi tiếp theo. - Sẽ cập nhật câu hỏi cho phù hợp.
halloleo

@halloleo. Bạn có nhận thấy tôi đã cập nhật mã cho bạn không? Đây có phải là nhiều hơn những gì bạn đang tìm kiếm?
wch1zpink

Cảm ơn @ wch1zpink. Kịch bản thứ hai chính xác có thể áp dụng cho câu hỏi (cập nhật). :-)
halloleo

1
Xong, @ wch1zpink.
halloleo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.