制作一个显示桌面和退出的简单程序

时间:2012-02-19 16:55:23

标签: objective-c xcode

我把这段代码:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [[NSWorkspace sharedWorkspace] hideOtherApplications];// Insert code here to initialize your application
    [NSApp terminate:self];
}

如果我发表评论[NSApp终止:自我];那么所有其他应用程序都是隐藏的。但是,如果我退出应用程序,它们会再次出现。

此外,如果我编写代码,程序实际上没有做任何事情。它会隐藏所有其他应用程序,然后再次退出显示所有其他应用程序。

程序很简单。

隐藏所有应用程序 放弃 退出后,我希望所有应用程序保持隐藏状态。它很简单。怎么样?

1 个答案:

答案 0 :(得分:1)

我相信,你想要的是最小化所有其他窗口,而不是隐藏它们。我知道,没有一种真正简单的方法可以做到这一点,但IMO最简单的方法就是调用每个应用程序的每个窗口并发出cmd-m命令的applescript。如果所有应用程序都实现了最小化,那么它应该可以正常工作(如果你愿意,可以选择关闭那些不能最小化的应用程序)。完全正确地工作可能需要一些修补,但下面的脚本取自macscripter.net,对我来说有80%的时间可用:

tell application "System Events"
   set currentProcesses to name of every application process whose visible = true
end tell

set tmpWindows to 0

repeat with tmpProcess in currentProcesses
   tell application tmpProcess
       activate
       try
           set tmpWindows to count windows
       on error
           set tmpWindows to 1 --> # of windows to try to force closed if it doesn't 'appear' to have any windows
       end try
   end tell

   if tmpWindows > 0 then
       tell application "System Events"
           tell application tmpProcess
               repeat tmpWindows times
                   try
                       keystroke "m" using command down
                   end try
               end repeat
           end tell
       end tell
   end if

   set tmpWindows to 0

end repeat

另一种选择是使用Cocoa Accessibility API获取每个正在运行的应用程序的窗口并设置AXMinimized。预先警告:它会变得非常粘稠!这两个其他stackoverflow问题应该可以帮助您:

Mac / Cocoa - Getting a list of windows using Accessibility API

Cocoa accessibility API, can I click a window in the background without activating it?