【问题标题】:Not able to close a window (QuickTime) with [NSWindow close] or [NSWindow performClose:(id)]无法使用 [NSWindow close] 或 [NSWindow performClose:(id)] 关闭窗口 (QuickTime)
【发布时间】:2010-11-24 07:36:11
【问题描述】:

我正在尝试使用 Quicktime 打开一个视频文件,然后将其关闭。使用[NSWorkspase openfile:path withapplication:@"Quick Time Player"] 可以正常打开视频文件。但是当我试图关闭 Quicktime 窗口时,什么也没有发生。这是代码。

NSMutableArray *titles = [[NSApplication sharedApplication] orderedWindows];
int i;
id obj;
NSMutableString *mystring;
for(i=0; i< [titles count]; i++)
    {
    obj = (NSWindow*)[titles objectAtIndex:i];
    mystring = [obj title];
    if([mystring isEqualToString:@"PREVIEW"] == 1 )
    {
    [obj close];
    }
    //NSLog("Title : %@\n",(NSString*)[obj title]);
    }

如果有人可以帮助我,我将不胜感激。

【问题讨论】:

    标签: objective-c nswindow quicktime


    【解决方案1】:

    您需要使用NSWorkspaceNSRunningApplication 来执行此操作。

    这里给出了相同问题的示例:

    NSRunningApplication - Terminate

    【讨论】:

      【解决方案2】:

      嘿,我找到了解决方案,可以通过 Apple Scripting 轻松完成,下面是脚本

      tell application "QuickTime Player"
          repeat with d in documents
               if name of d is "abc.mp4" then 
                   close d
               end if
          end repeat 
      end tell
      

      简单易行。该脚本会给出错误,但它会执行所需的任务。它将首先获取应用程序 QuickTIme Player 的控制权,然后迭代查找标题为 abc.mp4 的窗口并最终将其关闭。

      【讨论】:

      • 有一种更简单的方法:tell application "QuickTime Player" to close (every document whose name is "abc.mp4")
      【解决方案3】:

      这不起作用,因为orderedWindows 只返回应用程序中的窗口。无法从 QuickTime Player 等其他应用程序访问 NSWindow 对象。

      为此,您必须使用 AppleEvents。有许多不同的发送方式,但最简单的可能是ScriptingBridge。这是一个不错的tutorial

      【讨论】:

      • "orderedWindows" 这个函数已经向我发送了一个包含 QuickTime 播放器引用的 NSWindows 数组,因为它来自我自己的应用程序,我有 QuickTIme 的 NSWindow 对象,我只需要关闭它。对此有什么想法吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      相关资源
      最近更新 更多