我想在用戶會話(MacOS)中使用 CGEventPost 模擬鍵盤。
CGEventRef keyEvent = CGEventCreateKeyboardEvent( NULL, keyCode, down ) ;
CGEventPost( kCGHIDEventTap, keyEvent ) ;
CFRelease( keyEvent ) ;
當我在普通應用程式中使用此代碼時(是否以 root 身份運行),它作業正常。
但是當我像專案smjobbless一樣在 launchd-daemon 中運行它時 ,它不起作用。
這是我的launch.plist:
<dict>
<key>Label</key>
<string>com.apple.bsd.SMJobBlessHelper</string>
<key>RunAtLoad</key>
<true/>
<key>MachServices</key>
<dict>
<key>com.apple.bsd.SMJobBlessHelper</key>
<true/>
</dict>
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<false/>
</dict>
</dict>
launchd-daemon 專案已/Library/PrivilegedHelperTools
成功安裝,一切運行正常(似乎以 root 身份運行)除了CGEventPost
,這很奇怪,有什么建議嗎?
uj5u.com熱心網友回復:
守護行程無權訪問視窗會話。UI 事件應該通過 XPC 通道推送回用戶會話中的行程(通常以用戶身份而不是 root 身份運行)。如果您想要啟動配置,請考慮LaunchAgents 而不是 LaunchDaemons。
考慮當有多個活動視窗會話時,這將如何在快速用戶切換下作業。
直接針對您的問題,在上面鏈接的檔案中,請注意:
Core Graphics 框架依賴于視窗服務器的存在,因此僅對在登錄會話中運行的應用程式可用。
您的守護程式不在登錄會話中運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/505767.html