2013-11-28 59 views
0

我正在構建一個mac應用程序,在特定時間需要將當前登錄的用戶切換到另一個預設用戶。基本上是一個修改的登錄窗口。可可 - 強制用戶切換?

有沒有辦法使用可可做到這一點?

- 阿里

編輯:有沒有不要求用戶輸入自己的密碼的方法嗎?

回答

1

在我說我的解決方案之前,我想說@ 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(登錄屏幕)可見時,模擬密碼的擊鍵,然後輸入結果,當運行登錄窗口打開時,輸入密碼。此外,這沒有延遲。

1

正如在回答類似的問題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在任何意義上都是不安全的。但你可能會收集你需要的信息herehere

+0

嗨,我討厭成爲一個痛苦。你的回答非常好。我更新了這個問題,請你補充一下。 –

+0

好的,看我的編輯。這就是我能找到的,但Google不是最終的。 – jrodatus

+0

謝謝,我真的想出了昨晚!但很好的答案! –