題:
如何在“通過終端/應用程序訪問”中啟用/禁用灰度模式?
esaruoho
2016-06-03 01:27:43 UTC
view on stackexchange narkive permalink

我想知道在“系統偏好設置”的“輔助功能”面板中啟用/禁用灰度模式的過程是什麼?

我想通過單擊Dock中的應用程序或通過Terminal命令運行一個簡單的腳本,然後將其從灰度模式切換到常規模式。

有什麼想法嗎?

三 答案:
RecursivelyIronic
2018-11-13 23:47:26 UTC
view on stackexchange narkive permalink

這需要開發人員工具來編譯目標C程序。該程序基於此Stackoverflow答案

創建一個名為grayscale.c的文件,其內容如下:

  // clang -g -O2 -std = c11 -Wall -framework ApplicationServices
// https://stackoverflow.com/questions/14163788/how-does-on-screen-color-inversion-work-in-os-x
#include <stdio.h>
#include <ApplicationServices / ApplicationServices.h>

CG_EXTERN bool CGDisplayUsesForceToGray(void);
CG_EXTERN void CGDisplayForceToGray(bool forceToGray);

整型
main(int argc,char ** argv)
{
    bool isGrayscale = CGDisplayUsesForceToGray();
    printf(“ isGrayscale =%d \ n”,isGrayscale);
    CGDisplayForceToGray(!isGrayscale);
    printf(“灰度現在是%d \ n”,CGDisplayUsesForceToGray());

    返回0;
}
 

然後運行以下命令進行編譯:

  clang -g -O2 -std = c11 -Wall -framework ApplicationServices ./grayscale.c -o toggle-grayscale
 

現在運行 ./ toggle-grayscale ,這會立即使屏幕在所有應用程序中都變為灰度或不是灰度,但不會更新“系統偏好設置”中的設置。

在MacOS High Sierra 10.13.6上進行了測試,clang版本為 Apple LLVM版本10.0.0(clang-1000.10.44.4)

我同意這並不理想。我無法使Apple腳本解決方案100%可靠地工作,並且在腳本執行時會導致令人討厭的彈出窗口。使用launchctl將需要禁用安全保護(IMO的做法要差得多),而且速度很慢。當然,毫無疑問,使用未記錄的目標C API可能不是實現此目的的理想方法,但是此解決方案具有其他解決方案所沒有的優點,並且對於熟悉UNIX命令行界面的人來說更容易編寫腳本。
這真太了不起了。我獲取了您的可執行文件,並通過Automator將其設置為服務,然後為該服務分配了鍵盤快捷鍵,實際上是將Cmd + Option + Ctrl + 9映射為切換灰度
這很有趣。與顏色反轉一起使用時,這種簡單的灰度方法比本機macOS Accessibility灰度彩色濾光片(我相信它根本無法與顏色反轉一起使用)提供更好的輸出。但是發現了一個缺點:當使用多個顯示器時,一旦我切換到另一個顯示器上的窗口,灰度行為就會被關閉(仍在研究該問題)。
IconDaemon
2016-06-03 01:57:36 UTC
view on stackexchange narkive permalink

由“可訪問性”面板修改的.plist文件位於〜/ Library / Preferences 中,分別為 com.apple.CoreGraphics com。 apple.universalaccess

〜/ Library / Preferences / ByHost

中的任何文件均未更改

執行命令:

默認為com.apple.universalaccess灰度-bool是

默認為com.apple.CoreGraphics DisplayUseForcedGray -bool是

然後通過卸載和重新加載 universalaccessd 過程將顏色更改為灰度:

launchctl卸載/System/Library/LaunchAgents/com.apple.universalaccessd.plist

launchctl加載/System/Library/LaunchAgents/com.apple.universalaccessd.plist

要切換回彩色,請在將 defaults 參數設置為 no 的情況下執行相同的命令。

與“輔助功能”面板(它會立即更改顏色)不同,此方法可能需要花費幾秒鐘來進行過渡。

在2.8 GHz Intel Core i7上進行測試並包裹在bash腳本中,該腳本執行後需要10秒鐘才能顯示灰度。因此,我不得不說“幾秒鐘”具有誤導性,但無論如何還是+1。
也許有一個不同的launchctl命令可以使它更快地執行?在我的3.4GHz Intel Core i7上,時間不超過5-6秒。我剛剛計時。
我向OP提供了終端命令,其他人可以使用它們自己創建外殼程序腳本。我更喜歡使用perl通過這些命令創建腳本並將其包裝在[Platypus](http://sveinbjorn.org/platypus)中。給一個人一條魚-他們會吃一天。教他們如何釣魚,他們永遠不會餓。
在macOS 10.13.3 Beta上,“ launchctl”命令產生以下錯誤消息:“在啟用系統完整性保護時不允許進行操作”。您可以禁用系統完整性保護(請參閱[here](https://www.howtogeek.com/230424/how-to-disable-system-integrity-protection-on-a-mac-and-why-you-shouldnt/)),但這樣做會使您更容易受到惡意軟件的攻擊。
user3439894
2016-06-03 03:12:07 UTC
view on stackexchange narkive permalink

注意:示例AppleScript代碼已更新為處理當前最新的macOS(Mojave)並添加了其他代碼改進。在OS X / macOS的早期版本中,可能必須從具有示例的AppleScript代碼的兩行示例中刪除組1的 ,代碼才能正常工作。


如果要創建一個AppleScript應用程序放入Dock,則可以在OS X Yosemite(我相信還有後者)中使用以下代碼

 如果運行應用程序“系統偏好設置”,則
    嘗試
        告訴應用程序“系統偏好設置”退出
    錯誤
        做shell腳本“ killall的“系統偏好設置””
    結束嘗試
萬一

運行應用程序“系統偏好設置”時重複
    延遲0.01
結束重複

告訴應用程序“系統偏好設置”以顯示¬的錨點“ Seeing_Display”
    窗格ID“ com.apple.preference.universalaccess”

告訴應用程序“系統事件”,告訴進程“系統偏好設置”
    重複直到存在¬組1的複選框“使用灰度”
        窗口“輔助功能”
        延遲0.01
    結束重複
    單擊窗口“輔助功能”的組1的複選框“使用灰度”
結束告訴

告訴應用程序“系統偏好設置”退出
 

在腳本編輯器中,將其另存為Toggle Grayscale,將文件格式更改為:Application

您可以通過複製並粘貼到應用程序“獲取信息”表的圖標中,然後將應用程序捆綁包拖放到Dock上,為該應用程序提供其他圖標。

您必須在“系統偏好設置”中“安全性&隱私”的“隱私”選項卡下的“可訪問性”下授予權限,才能成功運行它。


如果您想使用IconDaemon提供的 code bash腳本,則以下 code 將在使用顏色和基於當前設置的灰度。

 #!/ bin / bash

setGrayscale(){

    默認寫入com.apple.universalaccess灰度-bool $ 1
默認寫入com.apple.CoreGraphics DisplayUseForcedGray -bool $ 1
    launchctl卸載/System/Library/LaunchAgents/com.apple.universalaccessd.plist
    launchctl加載/System/Library/LaunchAgents/com.apple.universalaccessd.plist

    案例“ $ 1”在
        “沒有”)
            echo“正在更改顯示以使用顏色。這將需要一點時間...”
        ;;
        “是”)
            echo“將顯示更改為使用灰度。這將需要一點時間...”
        ;;
    埃薩克

}

_bool =“ $(默認讀取com.apple.universalaccess灰度2> / dev / null)”

案例“ $ _bool”在
    “ 0”)
        setGrayscale“是”
    ;;
    “ 1”)
        setGrayscale“否”
    ;;
    *)
        setGrayscale“是”
    ;;
埃薩克
 

enter image description here

我在點擊複選框前添加了“延遲1”後,此方法就起作用了。謝謝!
user3439894我收到此錯誤:系統事件收到錯誤:無法獲取進程“系統偏好設置”的窗口“可訪問性”。(-1728)嘗試解決出現問題的地方...謝謝!
@Cory Snider,我更新了示例AppleScript代碼以處理當前最新的macOS(Mojave),並添加了其他代碼改進。在OS X / macOS的早期版本中,可能需要從具有示例的AppleScript代碼的兩行示例中刪除組1,該代碼才能起作用。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...