我正在構建一個mac應用程序,在特定時間需要將當前登錄的用戶切換到另一個預設用戶。基本上是一個修改的登錄窗口。可可 - 強制用戶切換?
有沒有辦法使用可可做到這一點?
- 阿里
編輯:有沒有不要求用戶輸入自己的密碼的方法嗎?
我正在構建一個mac應用程序,在特定時間需要將當前登錄的用戶切換到另一個預設用戶。基本上是一個修改的登錄窗口。可可 - 強制用戶切換?
有沒有辦法使用可可做到這一點?
- 阿里
編輯:有沒有不要求用戶輸入自己的密碼的方法嗎?
在我說我的解決方案之前,我想說@ jrodatus的答案非常好,它只是用於稍微不同的用例。
我想出了這個小的AppleScript:
set theUser to "user"
set theUser to do shell script "/usr/bin/id -u " & theUser
set password to "pswd"
do shell script "/System/Library/CoreServices/Menu\\ Extras/User.menu/Contents/Resources/CGSession -switchToUserID " & theUser
repeat
try
tell application "System Events"
repeat until visible of process "SecurityAgent" is false
set visible of process "SecurityAgent" to false
end repeat
keystroke password
keystroke return
end tell
exit repeat
on error
tell application "System Events"
end tell
end try
end repeat
這只是觸發登錄屏幕,與-switchToUserID
設置爲用戶名的用戶ID。然後當至少有一個窗口SecurityAgent
(登錄屏幕)可見時,模擬密碼的擊鍵,然後輸入結果,當運行登錄窗口打開時,輸入密碼。此外,這沒有延遲。
正如在回答類似的問題here解釋說,有一個叫「CGSession」隱藏在應該做你所需要的系統文件夾中的命令行工具。要在Cocoa應用程序中運行命令行工具,請查看NSTask。
直接切換用戶,通過運行「ID -u theUserName」找出你預設的用戶的UNIX用戶ID,然後使用輸出作爲參數執行:
/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -switchToUserID theUserIDNumber
或者簡單地去登錄窗口(無需註銷),運行:
/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend
這是一個用於NSWorkspace的快速Obj-C類別。
NSWorkspace-SwitchUser.h:
#import <Cocoa/Cocoa.h>
@interface NSWorkspace (SwitchUser)
-(BOOL)switchToUser:(NSString *)userName;
@end
NSWorkspace-SwitchUser.m:
編輯:如果需要切換用戶,而不需要用戶輸入自己的密碼,有如果沒有AppleScript,似乎沒有任何辦法可以做到這一點,而IMO在任何意義上都是不安全的。但你可能會收集你需要的信息here和here。
嗨,我討厭成爲一個痛苦。你的回答非常好。我更新了這個問題,請你補充一下。 –
好的,看我的編輯。這就是我能找到的,但Google不是最終的。 – jrodatus
謝謝,我真的想出了昨晚!但很好的答案! –